webcream 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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