webcream 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ # https://help.github.com/articles/dealing-with-line-endings
2
+
3
+ # Auto detect text files and perform LF normalization
4
+ * text=auto
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in webcream.gemspec
4
+ gemspec
@@ -0,0 +1,46 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'minitest' do
5
+ # with Minitest::Unit
6
+ # watch(%r|^test/(.*)\/?test_(.*)\.rb|)
7
+ # watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
8
+ # watch(%r|^test/test_helper\.rb|) { "test" }
9
+
10
+ # with Minitest::Spec
11
+ watch(%r|^spec/(.*)_spec\.rb|)
12
+ watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
13
+ watch(%r|^spec/spec_helper\.rb|) { "spec" }
14
+
15
+ # Rails 3.2
16
+ # watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/controllers/#{m[1]}_test.rb" }
17
+ # watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
18
+ # watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
19
+
20
+ # Rails
21
+ # watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/functional/#{m[1]}_test.rb" }
22
+ # watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
23
+ # watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
24
+ end
25
+
26
+ guard 'minitest' do
27
+ # with Minitest::Unit
28
+ watch(%r|^test/(.*)\/?test_(.*)\.rb|)
29
+ watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
30
+ watch(%r|^test/test_helper\.rb|) { "test" }
31
+
32
+ # with Minitest::Spec
33
+ # watch(%r|^spec/(.*)_spec\.rb|)
34
+ # watch(%r|^lib/(.*)([^/]+)\.rb|) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
35
+ # watch(%r|^spec/spec_helper\.rb|) { "spec" }
36
+
37
+ # Rails 3.2
38
+ # watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/controllers/#{m[1]}_test.rb" }
39
+ # watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
40
+ # watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
41
+
42
+ # Rails
43
+ # watch(%r|^app/controllers/(.*)\.rb|) { |m| "test/functional/#{m[1]}_test.rb" }
44
+ # watch(%r|^app/helpers/(.*)\.rb|) { |m| "test/helpers/#{m[1]}_test.rb" }
45
+ # watch(%r|^app/models/(.*)\.rb|) { |m| "test/unit/#{m[1]}_test.rb" }
46
+ end
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 David Stephen James Birch
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # Webcream
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'webcream'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install webcream
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
@@ -0,0 +1,9 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'spec'
6
+ t.pattern = 'spec/*.rb'
7
+ end
8
+
9
+ task :default => [:test]
@@ -0,0 +1,500 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.ruby-toolbox.com/categories/Web_Content_Scrapers
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip,deflate,identity
12
+ Accept:
13
+ - '*/*'
14
+ User-Agent:
15
+ - Mechanize/2.7.0 Ruby/2.1.0dev40850 (http://github.com/sparklemotion/mechanize/)
16
+ Accept-Charset:
17
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
18
+ Accept-Language:
19
+ - en-us,en;q=0.5
20
+ Host:
21
+ - www.ruby-toolbox.com
22
+ Connection:
23
+ - keep-alive
24
+ Keep-Alive:
25
+ - 300
26
+ response:
27
+ status:
28
+ code: 301
29
+ message: Moved Permanently
30
+ headers:
31
+ Server:
32
+ - nginx/1.4.1
33
+ Date:
34
+ - Wed, 22 May 2013 19:24:41 GMT
35
+ Content-Type:
36
+ - text/html
37
+ Content-Length:
38
+ - '184'
39
+ Connection:
40
+ - keep-alive
41
+ Location:
42
+ - https://www.ruby-toolbox.com/categories/Web_Content_Scrapers
43
+ body:
44
+ encoding: UTF-8
45
+ string: "<html>\r\n<head><title>301 Moved Permanently</title></head>\r\n<body
46
+ bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently</h1></center>\r\n<hr><center>nginx/1.4.1</center>\r\n</body>\r\n</html>\r\n"
47
+ http_version:
48
+ recorded_at: Wed, 22 May 2013 19:24:37 GMT
49
+ - request:
50
+ method: get
51
+ uri: https://www.ruby-toolbox.com/categories/Web_Content_Scrapers
52
+ body:
53
+ encoding: US-ASCII
54
+ string: ''
55
+ headers:
56
+ Accept-Encoding:
57
+ - gzip,deflate,identity
58
+ Accept:
59
+ - '*/*'
60
+ User-Agent:
61
+ - Mechanize/2.7.0 Ruby/2.1.0dev40850 (http://github.com/sparklemotion/mechanize/)
62
+ Accept-Charset:
63
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
64
+ Accept-Language:
65
+ - en-us,en;q=0.5
66
+ Host:
67
+ - www.ruby-toolbox.com
68
+ Connection:
69
+ - keep-alive
70
+ Keep-Alive:
71
+ - 300
72
+ response:
73
+ status:
74
+ code: 200
75
+ message: OK
76
+ headers:
77
+ Server:
78
+ - nginx/1.4.1
79
+ Date:
80
+ - Wed, 22 May 2013 19:24:42 GMT
81
+ Content-Type:
82
+ - text/html; charset=utf-8
83
+ Transfer-Encoding:
84
+ - chunked
85
+ Connection:
86
+ - keep-alive
87
+ X-Ua-Compatible:
88
+ - IE=Edge,chrome=1
89
+ Cache-Control:
90
+ - max-age=0, private, must-revalidate
91
+ Set-Cookie:
92
+ - _ruby_toolbox_session=BAh7B0kiD3Nlc3Npb25faWQGOgZFVEkiJTk1NDgxZjBlNTk5Y2QzZmRjNzFiODAxZmE3YTBlNGQzBjsAVEkiEF9jc3JmX3Rva2VuBjsARkkiMWpoM0htRjBWU2IvL24wMDY5amV0REtPVjdubkhsTzFWZlNCWTBFTCtTM2M9BjsARg%3D%3D--f6c9532da95f2736769457aa9f1bbb858825ba5b;
93
+ path=/; HttpOnly
94
+ X-Request-Id:
95
+ - fd8ae401369b4f9b6fe20756f32f01f8
96
+ X-Runtime:
97
+ - '0.115615'
98
+ Content-Encoding:
99
+ - gzip
100
+ body:
101
+ encoding: ASCII-8BIT
102
+ string: !binary |-
103
+ H4sIAAAAAAAAA+1923YaWZL2vZ8iC//dkrvFGQlJLtEjS7ZL3XbZI6kOXV5e
104
+ rIRMIC0gqcxEEu7qWXM/TzC3czdvMNfVL/Z/X+ydJyABUUh2V9datoA87POO
105
+ HYcvIr784vTNyeVf3z43esGg33j0JT+MvjnsHm3Zw/zY3+I127TwEThB325c
106
+ 9mzjfNyaGJeu22+5t0be+M5uGSfuMLCHgXHR9syR7flfFtXjj74c2IFptNXt
107
+ o62Z1x3f4O3ByLN79tB3rm2jbQZm3+0abkfVZA4t49x0+r4x6o+7eWfo7xhd
108
+ e4C/AdqA93Hfs3137LVt3+i4nnrNsq/tvsvGGDdO0DNG7mjcNz0nmBieGTjD
109
+ rm+0TN+2DHdovMQD45ZxYwbtHl9gkS/tgWG5N8O+a1r+ljE0B/bR1qnttz1n
110
+ FDjukEOT7pyHcVGNwsCEbWSbpckeu4CrUtVO2Msdw722vWvHvpFLdtf1HJtP
111
+ oyx0UkqJfuG62Q4wRv54NHK9IPzp2W3Xs9QvdzhARbYXVeiZ7Sv+uLJ3DN7a
112
+ MVrjoSVPDCb+j/jtlPeHYQf/Yk9uUJZMfLp3gX0bFLk+nhrtnun5dnA0Djr5
113
+ /fBNPcf5YDKyZ97OmeMA8xs4bYx/M3Cv7GFODWmu7Xud/Mj0zEHOKE7XmvvQ
114
+ q341eFH69qJVLA5Lpb2DD3Zw+pc339aHw6/6b8rfdi6e/bX0/NUfL6rto1SJ
115
+ ug6W2HeGV0bPsztHW70gGPmHxWIHC9IvdF2327fNkeMXsASLbd//U8ccOP3J
116
+ 0Wu3bw+77k+v3JYf2N6WMbAtxzzaMvv9LSy2/tGWH0z6tt+z7WDLYJePtmSA
117
+ UAY7P6fKm5ubAmc1z1WLBSJVSjuKDsbOaTf9wMPAFFjE/dbHWs0bbJnBL60t
118
+ Fw6oVekOWzfeTatWr3WvC+2+O7Y6HuopDO2gaPpYLn7RHI36DlY5dk9+b7fc
119
+ 6XTMA/Ng/6Bid3Y7pU7ZtOz9yl6pst+uVTkMOT0MOWw62x7uGCPP/WBjB7hY
120
+ PZyFXDwLOTULuXAW1GKK5+FuLR15zjDIH+zWO6V2ybIPqi3L2rXtvVapVLNM
121
+ u22bddNOt1FeWbFZX+Tz75yO0Q+Ms+fG/vvUgrlbQx07b1VrnVLJMmv7NRMf
122
+ +zWrtmvvdqq7rYpttfdKmxnJL97ZQ8vpvM/n0VpFBA3fa8dbyvxg3k7vKF4r
123
+ 9p2WX/zw49j2JsVyYa9Q1T8KA2dY+IC1ntg+H8xrUxW+1fiyqL79gvrGDmrc
124
+ L5T3dJX5sbNerXeblOQ6b9fr5c5uuVS1ynvlVrlSaXX2q7vt/c6eWdkrt1sY
125
+ gdTSjUcglxyBlQmKeU1qUhgNuyGh6uGkaI8Dg9fDwXYGZtcu8qG7EKuZsu9S
126
+ 5MoUwgaFHLd7eRaeB19A7sDFQZ3f3esctK3OwX6nXt2v7tXre5VayW639mvV
127
+ jm2Xy4lOcwayysno8nrtq1du65VUKw/2SvulvVK9bJmlctsuVc1OrdPGIqib
128
+ uwflcmnVVhq+8xGnilSw0SaXy7Vb/E812rLqdsc+2LUr1YPKfsuu1/ZNq2NX
129
+ Wgf1em3Xsu7YaF3FZptdQ7Nr6WZvakXosUbxrGKq2UUwkUPfNr12r3A7iM5/
130
+ uYD9RLZ4lrENN1qCFCTKsWI28o8sEpuwqNnslmtNjHYfJ+bRFq9bzrXhWCCz
131
+ 4MLBiOgr+gHyXKYznLnuj8xh/oAP98r4Y2rup7g1w79/WTSlcj5WRF3p8qWc
132
+ SgkSgR9MVR24o/zQvObVMSWHvpOu6CswF7pwuSV/yOEMu2H3uMGFKuUVUwyS
133
+ r1uaK5JfLKrLOf18zvRyjQuni3eGLBnngxTXePT7YcsfPR37YOqNCeSAkJ83
134
+ 2213PAzQM6m9KA1N9JLjmu5DWBVob9SUXCPsiy6n70QtEm48+XDMw+caJxE/
135
+ r5qrx2FeHZqx8XONt4rFgQTFHi54JRJ5co3zUPpZ+lILglWu8Qx/U49iWCA3
136
+ DSBdtO1RkA/5+9w3ly/y+zkROtzhUa6odgHZsqDnWke5rh2g81yiwogd5Qam
137
+ B2nnsPR0ZFoWpgPfLMcf9c3JoTPEGcaxcoYjnEYiT+UgQaB8YQByPceyKBZc
138
+ m/0xfv7+8W2lXq4+JSMXTpp6VS9+cnqGatGWbBH1PQ/eOpRJftyCzGi27Z7b
139
+ x+Y52roIN23EsG/p6mSvtcZBgCWpy/fHrYET5MMaFJeiLvLhcBFsxctYP4rm
140
+ ynJTxfEbB7fxaO461Msx9RHv+paHbd/2xoOWiBUc6VW2fuUg2rJY89h789bc
141
+ 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
407
+ EPQLIzuaxuXJW0S+BzYmjwwAI9GStU2EiPTlDkYBIokgCcxr17GQBhdBIWxw
408
+ PI6yvDMwBX3RDWS0R1SAeIy0ST5zTCU+is8UDjSPhXkMWhDNGZ1CAk+I7Zqx
409
+ KuO5MLqwial8D4nKDg+R1yCcuKji1HvK6hZgKJBpGWY4kbyQHeLFiVHZK+8h
410
+ //twdr1k2gB/M3bfm7EbMjDCj2bu1PPXcl8ER4T1oJEUSCGbGThubMjLImFz
411
+ ss8oTKuH02gQXjfeIm4D43ZIyBI4CLDMzNn2Hs4ADzl5gIgSmd2Hez3xOCr0
412
+ ELy+Q/uu7Hy9yZUV3rcDsfECqgUypuMaYBunnkyNTAj0oQv/uaIX9OHXTVpP
413
+ 7f2ZmH5nWfXFJuDp57OQrGlb+Gfjir5AIF3LELygvEb2vU9nBF6Df/8ntQFn
414
+ RLg8xmFMMmcBpaaiX7WJ96qUJJsN4aygnzyBgRCDQTEgOizo5RpIdQStY3JV
415
+ 30WwY0lNVYHCg79i0epC5g5a0aopMk/54LJSOqzuRSEW9VV0TF39FObfeWiQ
416
+ uX5iBFzOcRJzwPPYec+dyk6eMwMwZLwHt5/AywPTOR4M/XwFbMsIozxUdxHs
417
+ S431JeLmJa9mD7g2Y8zx0I72MhJBhPq7lWynox5C6t3mGupzvaNitksniU5m
418
+ deeTWUiz6V6mffSz8Lde0O57sY7qQ1Gh9RqPDKNY/PKLdyenx5fH7/DLMP7f
419
+ dhjS7kmBseIn22Ggw+0nxt/kET609TigFOQZBcQDHOYrB1tPCsDvA0e/vfUl
420
+ 95tjARYhj+QhJIx6EQ+lfmnc2taTpzNFqudRXjDuBPD99LbDag1SUPPQePcO
421
+ SqG9yo7xNzEKHRpbkTXw8cjxB26u8ZYfXPlbf3+/g8dr++W5j7PAJkJKwVOh
422
+ cYrvr/k18R6kkbnvQUIyGYpMAvzlGq+TP5Ovz28kOF37JtdAOCyVlF03srxb
423
+ m1tZGPboRHIJJIovZbQuxta90E70yZdq87s0zWXlGq9gUbqM7eS6jPc7esoM
424
+ BLLzvnMsamJLhf3U5VdqYqIomdsM43mLFQS2GJ4HhKk6/rvSe+Pv8Wsmgs7p
425
+ 96I1N/e18vuCTHzyZRBk1zuU1Zn58rutx8d75Vq5trVjbD22q+VWubX1/p3U
426
+ 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
497
+ mXKyK7S88pOa28aj/w8Af1AHGSoBAA==
498
+ http_version:
499
+ recorded_at: Wed, 22 May 2013 19:24:38 GMT
500
+ recorded_with: VCR 2.5.0
@@ -0,0 +1,17 @@
1
+ require 'mechanize'
2
+ require 'sourcify'
3
+
4
+ require 'webcream/version'
5
+ require 'webcream/scraper'
6
+
7
+ module Webcream
8
+ class << self
9
+ def scrape!(page, &block)
10
+ klass = Class.new
11
+ klass.send(:include, Webcream::Scraper)
12
+
13
+ # FIXME: Implement method_missing instead of cherry picking methods to proxy.
14
+ klass.new.scrape!(page, &block)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,38 @@
1
+ module Webcream
2
+ module Scraper
3
+ attr_reader :page
4
+ def scrape!(page, &block)
5
+ @page = page
6
+
7
+ block_source = block.to_source
8
+
9
+ if block_source[block_source.length - 1] == '}' then
10
+ modified_block = block_source.chop!
11
+ modified_block << '; binding }'
12
+ else
13
+ modified_block = block_source.gsub(/\nend/, "\nbinding \nend")
14
+ end
15
+
16
+ new_block = eval(modified_block)
17
+
18
+ outer_binding = binding
19
+ inner_binding = new_block.call
20
+
21
+ inner = eval("local_variables", inner_binding)
22
+ outer = eval("local_variables", outer_binding)
23
+
24
+ # create publically accessible instance_variables
25
+ (inner - outer).each do |item|
26
+ singleton_class.class_eval { attr_reader item }
27
+ value = eval("#{item.to_s}", inner_binding)
28
+ instance_eval("@#{item} = value")
29
+ end
30
+ end
31
+
32
+ def css(search)
33
+ html_doc = Nokogiri::HTML(@page.body)
34
+ return html_doc.css(search)
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ module Webcream
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,12 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/focus'
3
+
4
+ require 'vcr'
5
+ require 'webcream'
6
+
7
+ require 'debugger'
8
+
9
+ VCR.configure do |c|
10
+ c.cassette_library_dir = 'fixtures/vcr_cassettes'
11
+ c.hook_into :webmock
12
+ end
@@ -0,0 +1,79 @@
1
+ require 'spec_helper'
2
+
3
+ require 'mechanize'
4
+
5
+ describe Webcream::Scraper do
6
+ before do
7
+ @klass = Class.new
8
+ @klass.send :include, Webcream::Scraper
9
+ end
10
+
11
+ it "must be included in a class" do
12
+ @klass.must_include Webcream::Scraper
13
+ end
14
+
15
+ describe "A scraper instance" do
16
+ before do
17
+ @scraper = @klass.new
18
+ end
19
+
20
+ describe "#scrape!" do
21
+ it "exists" do
22
+ @scraper.must_respond_to :scrape!
23
+ end
24
+
25
+ it "accepts a single Mechanize::Page and a block" do
26
+ a = Mechanize.new
27
+
28
+ VCR.use_cassette('ruby_toolbox_web_content_scrapers') do
29
+ page = a.get('http://www.ruby-toolbox.com/categories/Web_Content_Scrapers')
30
+
31
+ @scraper.scrape! page do
32
+ end
33
+ end
34
+ end
35
+
36
+ it "keeps a record of the page it was instructed to scrape" do
37
+ a = Mechanize.new
38
+
39
+ VCR.use_cassette('ruby_toolbox_web_content_scrapers') do
40
+ page = a.get('http://www.ruby-toolbox.com/categories/Web_Content_Scrapers')
41
+
42
+ @scraper.scrape! page do
43
+ end
44
+
45
+ assert_equal @scraper.page, page
46
+ end
47
+ end
48
+
49
+ it "must search the page using css when instructed" do
50
+ a = Mechanize.new
51
+
52
+ VCR.use_cassette('ruby_toolbox_web_content_scrapers') do
53
+ page = a.get('http://www.ruby-toolbox.com/categories/Web_Content_Scrapers')
54
+
55
+ @scraper.scrape! page do
56
+ found_title = css("h1 a")
57
+ end
58
+
59
+ assert_equal("The Ruby Toolbox", @scraper.found_title.text)
60
+ end
61
+ end
62
+
63
+ it "must return text only when instructed" do
64
+ a = Mechanize.new
65
+
66
+ VCR.use_cassette('ruby_toolbox_web_content_scrapers') do
67
+ page = a.get('http://www.ruby-toolbox.com/categories/Web_Content_Scrapers')
68
+
69
+ @scraper.scrape! page do
70
+ found_title = css("h1 a").text
71
+ end
72
+
73
+ assert_equal("The Ruby Toolbox", @scraper.found_title)
74
+ end
75
+ end
76
+
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,16 @@
1
+ require 'spec_helper'
2
+
3
+ require 'mechanize'
4
+
5
+ describe Webcream do
6
+ it "must provide a singleton class for quick access to scraper functionality" do
7
+ a = Mechanize.new
8
+
9
+ VCR.use_cassette('ruby_toolbox_web_content_scrapers') do
10
+ page = a.get('http://www.ruby-toolbox.com/categories/Web_Content_Scrapers')
11
+
12
+ Webcream.scrape! page do
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,40 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'webcream/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "webcream"
8
+ spec.version = Webcream::VERSION
9
+ spec.authors = ["David Stephen James Birch"]
10
+ spec.email = ["dsjbirch@gmail.com"]
11
+ spec.description = %q{A web crawler dsl.}
12
+ spec.summary = %q{Collect the cream from the Interwebs.}
13
+ spec.homepage = "https://github.com/dsjbirch/gem-webcream"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "vcr"
24
+ spec.add_development_dependency "webmock"
25
+ spec.add_development_dependency "guard"
26
+ spec.add_development_dependency "minitest-focus"
27
+ spec.add_development_dependency "guard-minitest"
28
+ spec.add_development_dependency "debugger"
29
+
30
+ spec.add_development_dependency "ruby_parser"
31
+ spec.add_development_dependency "file-tail"
32
+ spec.add_development_dependency "sourcify", "0.6.0.rc2"
33
+ spec.add_development_dependency "ruby2ruby"
34
+
35
+ spec.add_dependency "mechanize"
36
+ spec.add_dependency "ruby_parser"
37
+ spec.add_dependency "file-tail"
38
+ spec.add_dependency "sourcify", "0.6.0.rc2"
39
+ spec.add_dependency "ruby2ruby"
40
+ end
metadata ADDED
@@ -0,0 +1,336 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: webcream
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - David Stephen James Birch
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: vcr
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: webmock
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: guard
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: minitest-focus
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: guard-minitest
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: debugger
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: ruby_parser
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: file-tail
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ - !ruby/object:Gem::Dependency
175
+ name: sourcify
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
178
+ requirements:
179
+ - - '='
180
+ - !ruby/object:Gem::Version
181
+ version: 0.6.0.rc2
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
186
+ requirements:
187
+ - - '='
188
+ - !ruby/object:Gem::Version
189
+ version: 0.6.0.rc2
190
+ - !ruby/object:Gem::Dependency
191
+ name: ruby2ruby
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ - !ruby/object:Gem::Dependency
207
+ name: mechanize
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
210
+ requirements:
211
+ - - ! '>='
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ type: :runtime
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
218
+ requirements:
219
+ - - ! '>='
220
+ - !ruby/object:Gem::Version
221
+ version: '0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: ruby_parser
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
226
+ requirements:
227
+ - - ! '>='
228
+ - !ruby/object:Gem::Version
229
+ version: '0'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ none: false
234
+ requirements:
235
+ - - ! '>='
236
+ - !ruby/object:Gem::Version
237
+ version: '0'
238
+ - !ruby/object:Gem::Dependency
239
+ name: file-tail
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
242
+ requirements:
243
+ - - ! '>='
244
+ - !ruby/object:Gem::Version
245
+ version: '0'
246
+ type: :runtime
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
249
+ none: false
250
+ requirements:
251
+ - - ! '>='
252
+ - !ruby/object:Gem::Version
253
+ version: '0'
254
+ - !ruby/object:Gem::Dependency
255
+ name: sourcify
256
+ requirement: !ruby/object:Gem::Requirement
257
+ none: false
258
+ requirements:
259
+ - - '='
260
+ - !ruby/object:Gem::Version
261
+ version: 0.6.0.rc2
262
+ type: :runtime
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ none: false
266
+ requirements:
267
+ - - '='
268
+ - !ruby/object:Gem::Version
269
+ version: 0.6.0.rc2
270
+ - !ruby/object:Gem::Dependency
271
+ name: ruby2ruby
272
+ requirement: !ruby/object:Gem::Requirement
273
+ none: false
274
+ requirements:
275
+ - - ! '>='
276
+ - !ruby/object:Gem::Version
277
+ version: '0'
278
+ type: :runtime
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ none: false
282
+ requirements:
283
+ - - ! '>='
284
+ - !ruby/object:Gem::Version
285
+ version: '0'
286
+ description: A web crawler dsl.
287
+ email:
288
+ - dsjbirch@gmail.com
289
+ executables: []
290
+ extensions: []
291
+ extra_rdoc_files: []
292
+ files:
293
+ - .gitattributes
294
+ - .gitignore
295
+ - Gemfile
296
+ - Guardfile
297
+ - LICENSE.txt
298
+ - README.md
299
+ - Rakefile
300
+ - fixtures/vcr_cassettes/ruby_toolbox_web_content_scrapers.yml
301
+ - lib/webcream.rb
302
+ - lib/webcream/scraper.rb
303
+ - lib/webcream/version.rb
304
+ - spec/spec_helper.rb
305
+ - spec/webcream/scraper_spec.rb
306
+ - spec/webcream_spec.rb
307
+ - webcream.gemspec
308
+ homepage: https://github.com/dsjbirch/gem-webcream
309
+ licenses:
310
+ - MIT
311
+ post_install_message:
312
+ rdoc_options: []
313
+ require_paths:
314
+ - lib
315
+ required_ruby_version: !ruby/object:Gem::Requirement
316
+ none: false
317
+ requirements:
318
+ - - ! '>='
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
321
+ required_rubygems_version: !ruby/object:Gem::Requirement
322
+ none: false
323
+ requirements:
324
+ - - ! '>='
325
+ - !ruby/object:Gem::Version
326
+ version: '0'
327
+ requirements: []
328
+ rubyforge_project:
329
+ rubygems_version: 1.8.23
330
+ signing_key:
331
+ specification_version: 3
332
+ summary: Collect the cream from the Interwebs.
333
+ test_files:
334
+ - spec/spec_helper.rb
335
+ - spec/webcream/scraper_spec.rb
336
+ - spec/webcream_spec.rb