wombat 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -11,11 +11,11 @@ Generic Web crawler with an elegant DSL that parses structured data from web pag
11
11
 
12
12
  ``gem install wombat``
13
13
 
14
- OBS: Requires ruby 1.9
14
+ Obs: Requires ruby 1.9
15
15
 
16
- Creating a crawler:
16
+ ## Crawling a page:
17
17
 
18
- ###### Create a class that includes ``Wombat::Crawler``:
18
+ The simplest way to use Wombat is by calling ``Wombat.crawl`` and passing it a block:
19
19
 
20
20
  ```ruby
21
21
 
@@ -24,9 +24,7 @@ Creating a crawler:
24
24
  #coding: utf-8
25
25
  require 'wombat'
26
26
 
27
- class GithubCrawler
28
- include Wombat::Crawler
29
-
27
+ Wombat.crawl do
30
28
  base_url "http://www.github.com"
31
29
  list_page "/"
32
30
 
@@ -47,14 +45,9 @@ class GithubCrawler
47
45
  end
48
46
  ```
49
47
 
50
- ###### Run it by calling the instance method ``crawl``:
48
+ ###### The code above is gonna return the following hash:
51
49
 
52
50
  ```ruby
53
- my_crawler = GithubCrawler.new
54
- my_crawler.crawl
55
-
56
- #=> the line above outputs:
57
-
58
51
  {
59
52
  "headline" => "1,316,633 people hosting over 3,951,378 git repositories",
60
53
  "what_is" => "GitHub is the best way to collaborate with others. Fork, send pull requests and manage all your <strong>public</strong> and <strong>private</strong> git repositories.",
@@ -68,7 +61,8 @@ my_crawler.crawl
68
61
  }
69
62
  ```
70
63
 
71
- ### For the documentation, please check the project [Wiki](http://github.com/felipecsl/wombat/wiki).
64
+ ### This is just a sneak peek of what Wombat can do. For the complete documentation, please check the [project Wiki](http://github.com/felipecsl/wombat/wiki).
65
+ ### [API Documentation](http://rubydoc.info/gems/wombat/0.4.0/frames).
72
66
 
73
67
 
74
68
  ## Contributing to Wombat
@@ -84,11 +78,20 @@ my_crawler.crawl
84
78
  ## Contributors
85
79
 
86
80
  * Felipe Lima ([@felipecsl](https://github.com/felipecsl))
87
- * [@sigi](https://github.com/sigi)
88
81
  * Daniel Naves de Carvalho ([@danielnc](https://github.com/danielnc))
82
+ * [@sigi](https://github.com/sigi)
89
83
 
90
84
  ## Changelog
91
85
 
86
+ ### version 1.0.0
87
+
88
+ * [Fixed a bug on malformed selectors](https://github.com/felipecsl/wombat/commit/e0f4eec20e1e2bb07a1813a1edd019933edeceaa)
89
+ * [Fixed a bug where multiple calls to #crawl would not clean up previously iterated array results and yield repeated results](https://github.com/felipecsl/wombat/commit/40b09a5bf8b9ba08aa51b6f41f706b7c3c4e4252)
90
+
91
+ ### version 0.4.0
92
+
93
+ * Added utility method ``Wombat.crawl`` that eliminates the need to have a ruby class instance to use Wombat. Now you can use just ``Wombat.crawl`` and start working. The class based format still works as before though.
94
+
92
95
  ### version 0.3.1
93
96
 
94
97
  * Added the ability to provide a block to Crawler#crawl and override the default crawler properties for a one off run (thanks to @danielnc)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
@@ -0,0 +1,290 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.github.com/
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ accept:
11
+ - ! '*/*'
12
+ user-agent:
13
+ - Mechanize/2.5.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
14
+ accept-encoding:
15
+ - gzip,deflate,identity
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.github.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.0.13
33
+ date:
34
+ - Mon, 25 Jun 2012 03:00:17 GMT
35
+ content-type:
36
+ - text/html
37
+ content-length:
38
+ - '185'
39
+ connection:
40
+ - keep-alive
41
+ location:
42
+ - http://github.com/
43
+ body:
44
+ encoding: US-ASCII
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.0.13</center>\r\n</body>\r\n</html>\r\n"
47
+ http_version: '1.1'
48
+ recorded_at: Mon, 25 Jun 2012 03:00:17 GMT
49
+ - request:
50
+ method: get
51
+ uri: http://github.com/
52
+ body:
53
+ encoding: US-ASCII
54
+ string: ''
55
+ headers:
56
+ accept:
57
+ - ! '*/*'
58
+ user-agent:
59
+ - Mechanize/2.5.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
60
+ accept-encoding:
61
+ - gzip,deflate,identity
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
+ - github.com
68
+ connection:
69
+ - keep-alive
70
+ keep-alive:
71
+ - 300
72
+ response:
73
+ status:
74
+ code: 301
75
+ message: Moved Permanently
76
+ headers:
77
+ server:
78
+ - nginx/1.0.13
79
+ date:
80
+ - Mon, 25 Jun 2012 03:00:17 GMT
81
+ content-type:
82
+ - text/html
83
+ content-length:
84
+ - '185'
85
+ connection:
86
+ - close
87
+ location:
88
+ - https://github.com/
89
+ body:
90
+ encoding: US-ASCII
91
+ string: ! "<html>\r\n<head><title>301 Moved Permanently</title></head>\r\n<body
92
+ bgcolor=\"white\">\r\n<center><h1>301 Moved Permanently</h1></center>\r\n<hr><center>nginx/1.0.13</center>\r\n</body>\r\n</html>\r\n"
93
+ http_version: '1.1'
94
+ recorded_at: Mon, 25 Jun 2012 03:00:17 GMT
95
+ - request:
96
+ method: get
97
+ uri: https://github.com/
98
+ body:
99
+ encoding: US-ASCII
100
+ string: ''
101
+ headers:
102
+ accept:
103
+ - ! '*/*'
104
+ user-agent:
105
+ - Mechanize/2.5.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
106
+ accept-encoding:
107
+ - gzip,deflate,identity
108
+ accept-charset:
109
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
110
+ accept-language:
111
+ - en-us,en;q=0.5
112
+ host:
113
+ - github.com
114
+ connection:
115
+ - keep-alive
116
+ keep-alive:
117
+ - 300
118
+ response:
119
+ status:
120
+ code: 200
121
+ message: OK
122
+ headers:
123
+ server:
124
+ - nginx/1.0.13
125
+ date:
126
+ - Mon, 25 Jun 2012 03:00:18 GMT
127
+ content-type:
128
+ - text/html; charset=utf-8
129
+ transfer-encoding:
130
+ - chunked
131
+ connection:
132
+ - keep-alive
133
+ status:
134
+ - 200 OK
135
+ x-frame-options:
136
+ - deny
137
+ set-cookie:
138
+ - _gh_sess=BAh7BzoPc2Vzc2lvbl9pZCIlZGQzNWQ4Y2UxNDlkZjU5MzUwNTA1MGZlOWIwZjFlOGY6EF9jc3JmX3Rva2VuIjFhK1dZYTVzcWsvQk9NMGswRzVUUy9TRmxCeUFPNEdLMTdxdDlOcmtyVzVRPQ%3D%3D--d259cb2a693e44292d72df7a3eb5d3ca6b6d4f9d;
139
+ path=/; expires=Sat, 01-Jan-2022 00:00:00 GMT; secure; HttpOnly
140
+ strict-transport-security:
141
+ - max-age=2592000
142
+ cache-control:
143
+ - private, max-age=0, must-revalidate
144
+ x-runtime:
145
+ - '9'
146
+ etag:
147
+ - ! '"cc8a653aa913eb5c43762432d5842b50"'
148
+ content-encoding:
149
+ - gzip
150
+ body:
151
+ encoding: ASCII-8BIT
152
+ string: !binary |-
153
+ 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
287
+ r5NddILultTV0KDP89E3OdTnU/8PJkLyeFZVAAA=
288
+ http_version: '1.1'
289
+ recorded_at: Mon, 25 Jun 2012 03:00:18 GMT
290
+ recorded_with: VCR 2.1.1
@@ -0,0 +1,609 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.terra.com.br/portal
6
+ body: ''
7
+ headers:
8
+ accept:
9
+ - ! '*/*'
10
+ user-agent:
11
+ - Mechanize/2.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
12
+ accept-encoding:
13
+ - gzip,deflate,identity
14
+ accept-charset:
15
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
16
+ accept-language:
17
+ - en-us,en;q=0.5
18
+ host:
19
+ - www.terra.com.br
20
+ connection:
21
+ - keep-alive
22
+ keep-alive:
23
+ - 300
24
+ response:
25
+ status:
26
+ code: 301
27
+ message: Moved Permanently
28
+ headers:
29
+ location:
30
+ - http://www.terra.com.br/portal/
31
+ cache-control:
32
+ - max-age=15
33
+ expires:
34
+ - Wed, 08 Feb 2012 08:29:13 GMT
35
+ vary:
36
+ - Accept-Encoding
37
+ content-encoding:
38
+ - gzip
39
+ content-type:
40
+ - text/html; charset=iso-8859-1
41
+ content-length:
42
+ - '196'
43
+ date:
44
+ - Wed, 08 Feb 2012 08:28:56 GMT
45
+ age:
46
+ - '0'
47
+ connection:
48
+ - keep-alive
49
+ body: !binary |-
50
+ H4sIAAAAAAAAA22OMQ+CMBCFd37FyW4PdTNnBwWjCShDHRwLnKkJtaRWif9e
51
+ wNXxvffde0ez9LxT1zKDgypyKC/b/LiDeI54zNQeMVXpL1mKBDE7xTIiE2wr
52
+ ybBuBhHuoWW5ShZQuDc3ULK3+sGP0H4If2FEOMFUueYz3i/kH3ZwI+qkMgyN
53
+ q192sMHoJ9gJJQ3G820TmxC6NWLf9yKw91rUzorKY+d80C3G0rBnQi0FYTdO
54
+ T6ND/fh09AWY7NsA7wAAAA==
55
+ http_version: '1.1'
56
+ recorded_at: Wed, 08 Feb 2012 08:28:58 GMT
57
+ - request:
58
+ method: get
59
+ uri: http://www.terra.com.br/portal/
60
+ body: ''
61
+ headers:
62
+ accept:
63
+ - ! '*/*'
64
+ user-agent:
65
+ - Mechanize/2.1 Ruby/1.9.3p0 (http://github.com/tenderlove/mechanize/)
66
+ accept-encoding:
67
+ - gzip,deflate,identity
68
+ accept-charset:
69
+ - ISO-8859-1,utf-8;q=0.7,*;q=0.7
70
+ accept-language:
71
+ - en-us,en;q=0.5
72
+ host:
73
+ - www.terra.com.br
74
+ connection:
75
+ - keep-alive
76
+ keep-alive:
77
+ - 300
78
+ response:
79
+ status:
80
+ code: 404
81
+ message: Not found
82
+ headers:
83
+ vary:
84
+ - Accept-Encoding
85
+ content-encoding:
86
+ - gzip
87
+ content-type:
88
+ - text/html
89
+ content-length:
90
+ - '22869'
91
+ date:
92
+ - Wed, 08 Feb 2012 08:28:59 GMT
93
+ age:
94
+ - '12'
95
+ connection:
96
+ - keep-alive
97
+ body: !binary |-
98
+ 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
606
+ /7JW741akwEA
607
+ http_version: '1.1'
608
+ recorded_at: Wed, 08 Feb 2012 08:28:59 GMT
609
+ recorded_with: VCR 2.0.0.rc1
@@ -10,7 +10,7 @@ module Wombat
10
10
  def parse
11
11
  raise ArgumentError.new('Must provide a block to locate property values') unless block_given?
12
12
 
13
- all_properties.each do |p|
13
+ all_properties.each do |p|
14
14
  p.result ||= []
15
15
  result = yield p
16
16
  if result
@@ -20,6 +20,10 @@ module Wombat
20
20
  end
21
21
  end
22
22
 
23
+ def reset
24
+ all_properties.each { |p| p.reset }
25
+ end
26
+
23
27
  def flatten(depth = nil)
24
28
  # determine the iterator length by the biggest property array that we have
25
29
  length = all_properties.map(&:result).sort { |a| a.length }.last.size
@@ -4,7 +4,7 @@ module Wombat
4
4
  return [selector.to_s] if selector.is_a? Symbol
5
5
  return context.xpath selector[6..-1], namespaces if selector.start_with? "xpath="
6
6
  return context.css selector[4..-1] if selector.start_with? "css="
7
- selector
7
+ [selector]
8
8
  end
9
9
  end
10
10
  end
data/lib/wombat/parser.rb CHANGED
@@ -1,4 +1,4 @@
1
- #coding: utf-8
1
+ #coding: utf-8
2
2
  require 'wombat/property_locator'
3
3
  require 'mechanize'
4
4
  require 'restclient'
@@ -6,7 +6,7 @@ require 'restclient'
6
6
  module Wombat
7
7
  module Parser
8
8
  include PropertyLocator
9
- attr_accessor :mechanize, :context
9
+ attr_accessor :mechanize, :context, :response_code
10
10
 
11
11
  def initialize
12
12
  @mechanize = Mechanize.new
@@ -17,6 +17,7 @@ module Wombat
17
17
  original_context = self.context
18
18
 
19
19
  metadata.iterators.each do |it|
20
+ it.reset # Clean up iterator results before starting
20
21
  select_nodes(it.selector).each do |node|
21
22
  self.context = node
22
23
  it.parse { |p| locate p }
@@ -30,14 +31,28 @@ module Wombat
30
31
  metadata.flatten
31
32
  end
32
33
 
33
- private
34
+ private
34
35
  def parser_for(metadata)
35
36
  url = "#{metadata[:base_url]}#{metadata[:list_page]}"
36
-
37
- if metadata[:format] == :html
38
- @mechanize.get(url).parser
39
- else
40
- Nokogiri::XML RestClient.get(url)
37
+ page = nil
38
+ parser = nil
39
+ begin
40
+ if metadata[:format] == :html
41
+ page = @mechanize.get(url)
42
+ parser = page.parser
43
+ else
44
+ page = RestClient.get(url)
45
+ parser = Nokogiri::XML page
46
+ end
47
+ self.response_code = page.code.to_i if page.respond_to? :code
48
+ parser
49
+ rescue
50
+ if $!.respond_to? :http_code
51
+ self.response_code = $!.http_code.to_i
52
+ elsif $!.respond_to? :response_code
53
+ self.response_code = $!.response_code.to_i
54
+ end
55
+ raise $!
41
56
  end
42
57
  end
43
58
  end
@@ -13,5 +13,9 @@ module Wombat
13
13
  def flatten(depth = nil)
14
14
  depth ? result[depth] : result
15
15
  end
16
+
17
+ def reset
18
+ self.result = nil
19
+ end
16
20
  end
17
21
  end
data/spec/crawler_spec.rb CHANGED
@@ -143,7 +143,7 @@ describe Wombat::Crawler do
143
143
 
144
144
  another_instance.crawl
145
145
  end
146
-
146
+
147
147
  it 'should remove created method missing' do
148
148
  @crawler.base_url "danielnc.com"
149
149
  @crawler.list_page "/itens"
@@ -175,5 +175,61 @@ describe Wombat::Crawler do
175
175
 
176
176
  @crawler_instance.instance_variables.index(:@metadata_dup).should be_nil
177
177
  end
178
+
179
+ context "response code" do
180
+ it "should have correct mechanize response code" do
181
+ VCR.use_cassette('basic_crawler_page') do
182
+
183
+ @crawler.base_url "http://www.terra.com.br"
184
+ @crawler.list_page '/portal'
185
+
186
+ @crawler.search "css=.btn-search"
187
+
188
+ @crawler_instance.crawl
189
+ @crawler_instance.response_code.should be(200)
190
+ end
191
+
192
+ end
193
+ it "should have correct rest client code" do
194
+ VCR.use_cassette('basic_crawler_page') do
195
+
196
+ @crawler.base_url "http://www.terra.com.br"
197
+ @crawler.list_page '/portal'
198
+
199
+ @crawler.search "css=.btn-search"
200
+ @crawler.format :xml
201
+
202
+ @crawler_instance.crawl
203
+ @crawler_instance.response_code.should be(200)
204
+ end
205
+ end
206
+
207
+ it "should have mechanize error response code" do
208
+ VCR.use_cassette('error_page') do
209
+
210
+ @crawler.base_url "http://www.terra.com.br"
211
+ @crawler.list_page '/portal'
212
+
213
+ @crawler.search "css=.btn-search"
214
+
215
+ lambda { @crawler_instance.crawl }.should raise_error("404 => Net::HTTPNotFound for http://www.terra.com.br/portal/ -- unhandled response")
216
+ @crawler_instance.response_code.should be(404)
217
+ end
218
+ end
219
+
220
+ it "should have rest client error response code" do
221
+ VCR.use_cassette('error_page') do
222
+
223
+ @crawler.base_url "http://www.terra.com.br"
224
+ @crawler.list_page '/portal'
225
+
226
+ @crawler.search "css=.btn-search"
227
+ @crawler.format :xml
228
+ lambda { @crawler_instance.crawl }.should raise_error(RestClient::ResourceNotFound)
229
+ @crawler_instance.response_code.should be(404)
230
+ end
231
+ end
232
+
233
+ end
178
234
  end
179
235
  end
@@ -34,6 +34,34 @@ describe 'basic crawler setup' do
34
34
  end
35
35
  end
36
36
 
37
+ it 'should clear iterators between multiple runs' do
38
+ crawler = Class.new
39
+ crawler.send(:include, Wombat::Crawler)
40
+
41
+ crawler.base_url "http://www.terra.com.br"
42
+ crawler.list_page '/portal'
43
+
44
+ crawler.for_each "css=.ctn-links" do
45
+ menu "css=a"
46
+ end
47
+
48
+ crawler_instance = crawler.new
49
+ result_hash = [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
50
+ results = nil
51
+
52
+ VCR.use_cassette('basic_crawler_page') do
53
+ results = crawler_instance.crawl
54
+ end
55
+
56
+ results["iterator0"].should == result_hash
57
+
58
+ VCR.use_cassette('basic_crawler_page') do
59
+ results = crawler_instance.crawl
60
+ end
61
+
62
+ results["iterator0"].should == result_hash
63
+ end
64
+
37
65
  it 'should crawl page through block to class instance crawl method' do
38
66
  VCR.use_cassette('basic_crawler_page') do
39
67
  crawler = Class.new
@@ -121,7 +149,7 @@ describe 'basic crawler setup' do
121
149
  end
122
150
  end
123
151
 
124
- it 'should crawl xml with namespaces' do
152
+ it 'should crawl xml with namespaces' do
125
153
  VCR.use_cassette('xml_with_namespace') do
126
154
  crawler = Class.new
127
155
  crawler.send(:include, Wombat::Crawler)
@@ -26,6 +26,15 @@ describe Wombat::Iterator do
26
26
  end
27
27
  end
28
28
 
29
+ context 'reset' do
30
+ it 'should clean up properties results' do
31
+ it.prop_1 'some_selector'
32
+ it['prop_1'].result = [1, 2]
33
+ it.reset
34
+ it['prop_1'].result.should be_nil
35
+ end
36
+ end
37
+
29
38
  it 'should flatten properties to plain hash format' do
30
39
  it.prop_1 "some_selector"
31
40
  it.prop_2 "another_selector"
data/spec/wombat_spec.rb CHANGED
@@ -4,4 +4,19 @@ describe Wombat do
4
4
  it 'should provide syntactic sugar method Wombat.crawl' do
5
5
  Wombat.should respond_to(:crawl)
6
6
  end
7
+
8
+ it 'should accept regular properties (non-selectors)' do
9
+ VCR.use_cassette('broken_selector') do
10
+ lambda {
11
+ Wombat.crawl do
12
+ base_url "http://www.github.com"
13
+ list_page "/"
14
+
15
+ source :obaoba
16
+ description 'Oba Oba'
17
+ website 'http://obaoba.com.br'
18
+ end
19
+ }.should_not raise_error
20
+ end
21
+ end
7
22
  end
data/wombat.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "wombat"
8
- s.version = "0.4.0"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Felipe Lima"]
12
- s.date = "2012-05-25"
12
+ s.date = "2012-06-25"
13
13
  s.description = "Generic Web crawler with a DSL that parses structured data from web pages"
14
14
  s.email = "felipe.lima@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -28,6 +28,8 @@ Gem::Specification.new do |s|
28
28
  "Rakefile",
29
29
  "VERSION",
30
30
  "fixtures/vcr_cassettes/basic_crawler_page.yml",
31
+ "fixtures/vcr_cassettes/broken_selector.yml",
32
+ "fixtures/vcr_cassettes/error_page.yml",
31
33
  "fixtures/vcr_cassettes/for_each_page.yml",
32
34
  "fixtures/vcr_cassettes/xml_with_namespace.yml",
33
35
  "lib/wombat.rb",
@@ -57,7 +59,7 @@ Gem::Specification.new do |s|
57
59
  s.licenses = ["MIT"]
58
60
  s.require_paths = ["lib"]
59
61
  s.required_ruby_version = Gem::Requirement.new(">= 1.9")
60
- s.rubygems_version = "1.8.18"
62
+ s.rubygems_version = "1.8.24"
61
63
  s.summary = "Ruby DSL to crawl web pages"
62
64
 
63
65
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wombat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-25 00:00:00.000000000 Z
12
+ date: 2012-06-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mechanize
@@ -190,6 +190,8 @@ files:
190
190
  - Rakefile
191
191
  - VERSION
192
192
  - fixtures/vcr_cassettes/basic_crawler_page.yml
193
+ - fixtures/vcr_cassettes/broken_selector.yml
194
+ - fixtures/vcr_cassettes/error_page.yml
193
195
  - fixtures/vcr_cassettes/for_each_page.yml
194
196
  - fixtures/vcr_cassettes/xml_with_namespace.yml
195
197
  - lib/wombat.rb
@@ -235,7 +237,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
235
237
  version: '0'
236
238
  requirements: []
237
239
  rubyforge_project:
238
- rubygems_version: 1.8.18
240
+ rubygems_version: 1.8.24
239
241
  signing_key:
240
242
  specification_version: 3
241
243
  summary: Ruby DSL to crawl web pages