wombat 2.9.0 → 2.10.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9ea56430f4d0d0b96967275b8ed4a4f2e9ff3328bfffcd28aa0eccfcc6c654bd
4
- data.tar.gz: 6792ea14758c23aad022e6cb2282e23f82d547e0925d3e0c7530c5518f222305
3
+ metadata.gz: 7114b5a602e08f1253f7af6fbdebf6c598cd4a714a0fc28d11725b2d393ca232
4
+ data.tar.gz: ed31a4692959b35534d66accd7538db66f80c320bb0cff1c1b0a1b72c63860dd
5
5
  SHA512:
6
- metadata.gz: f1d62406042a90c6b3dfa7d6e441a66a96053c77899e368e01a793f4dadcd3b235f5f69cc3e9a024945bb0db171772a87663faa718cd1854b5919776fcd18562
7
- data.tar.gz: 0c224f9f2ce4810a4234ea479f33919856dbe854396dbca38f2a32502235ba4d771042338295ac022351bd2d4715322ac9a9f26c91c98d2d356e99fbbb51eca1
6
+ metadata.gz: caa0ef5373883bb65ced56709a48fdf95dc0bd64053ca2f8402ec8c603cbd05bae46401b8360616b996d5e80d6473d1e407abad0004c4695c102bd41f22fbf86
7
+ data.tar.gz: 9ec8827f2989c035b6f9ca6dcd5ecb0c5905702cf140887c012ee9b39ba6211764fdb7d1118ba12ce583a0654ecd0c30b1758ea6fb5bb4e45c5b93276d78f950
@@ -1,7 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.3.0
4
- - 2.4.1
5
3
  - 2.5.0
6
4
  - 2.6.3
7
5
  notifications:
@@ -1,3 +1,8 @@
1
+ ### version 2.9.0 (2018-11-27)
2
+
3
+ * Bump all gem dependencies to address security vulnerabilities
4
+ * Minimum supported Ruby version is now v2.3.0
5
+
1
6
  ### version 2.8.0 (2018-11-27)
2
7
 
3
8
  * Bump rack to version 2.0.6
@@ -1,11 +1,12 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (5.2.3)
4
+ activesupport (6.0.0)
5
5
  concurrent-ruby (~> 1.0, >= 1.0.2)
6
6
  i18n (>= 0.7, < 2)
7
7
  minitest (~> 5.1)
8
8
  tzinfo (~> 1.1)
9
+ zeitwerk (~> 2.1, >= 2.1.8)
9
10
  addressable (2.4.0)
10
11
  builder (3.2.3)
11
12
  concurrent-ruby (1.1.5)
@@ -34,9 +35,10 @@ GEM
34
35
  hashie (>= 3.4)
35
36
  mime-types (>= 1.16, < 3.0)
36
37
  oauth2 (~> 1.0)
37
- hashdiff (0.4.0)
38
+ hashdiff (1.0.0)
38
39
  hashie (3.6.0)
39
40
  highline (2.0.2)
41
+ http-accept (1.7.0)
40
42
  http-cookie (1.0.3)
41
43
  domain_name (~> 0.5)
42
44
  i18n (1.6.0)
@@ -70,10 +72,10 @@ GEM
70
72
  multi_xml (0.6.0)
71
73
  multipart-post (2.1.1)
72
74
  net-http-digest_auth (1.4.1)
73
- net-http-persistent (3.0.1)
75
+ net-http-persistent (3.1.0)
74
76
  connection_pool (~> 2.2)
75
77
  netrc (0.11.0)
76
- nokogiri (1.10.3)
78
+ nokogiri (1.10.4)
77
79
  mini_portile2 (~> 2.4.0)
78
80
  ntlm-http (0.1.1)
79
81
  oauth2 (1.4.1)
@@ -84,9 +86,10 @@ GEM
84
86
  rack (>= 1.2, < 3)
85
87
  psych (3.1.0)
86
88
  rack (2.0.7)
87
- rake (12.3.2)
88
- rdoc (6.1.1)
89
- rest-client (2.0.2)
89
+ rake (12.3.3)
90
+ rdoc (6.2.0)
91
+ rest-client (2.1.0)
92
+ http-accept (>= 1.7.0, < 2.0)
90
93
  http-cookie (>= 1.0.2, < 2.0)
91
94
  mime-types (>= 1.16, < 4.0)
92
95
  netrc (~> 0.8)
@@ -114,19 +117,20 @@ GEM
114
117
  tins (~> 1.0)
115
118
  thor (0.20.3)
116
119
  thread_safe (0.3.6)
117
- tins (1.21.0)
120
+ tins (1.21.1)
118
121
  tzinfo (1.2.5)
119
122
  thread_safe (~> 0.1)
120
123
  unf (0.1.4)
121
124
  unf_ext
122
125
  unf_ext (0.0.7.6)
123
126
  vcr (5.0.0)
124
- webmock (3.6.0)
127
+ webmock (3.7.1)
125
128
  addressable (>= 2.3.6)
126
129
  crack (>= 0.3.2)
127
130
  hashdiff (>= 0.4.0, < 2.0.0)
128
131
  webrobots (0.1.2)
129
132
  yard (0.9.20)
133
+ zeitwerk (2.1.9)
130
134
 
131
135
  PLATFORMS
132
136
  ruby
@@ -145,4 +149,4 @@ DEPENDENCIES
145
149
  yard
146
150
 
147
151
  BUNDLED WITH
148
- 1.17.1
152
+ 2.0.2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.9.0
1
+ 2.10.0
@@ -3,24 +3,16 @@ http_interactions:
3
3
  - request:
4
4
  method: get
5
5
  uri: http://ws.audioscrobbler.com/2.0/?api_key=060decb474b73437d5bbec37f527ae7b&location=San%20Francisco&method=geo.getevents
6
- body: ''
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
7
9
  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
- - ws.audioscrobbler.com
20
- connection:
21
- - keep-alive
22
- keep-alive:
23
- - 300
10
+ Accept:
11
+ - "*/*"
12
+ User-Agent:
13
+ - rest-client/2.1.0 (darwin17.3.0 x86_64) ruby/2.5.0p0
14
+ Host:
15
+ - ws.audioscrobbler.com
24
16
  response:
25
17
  status:
26
18
  code: 200
@@ -49,7 +49,6 @@ module Wombat
49
49
  private
50
50
  def parser_for(metadata, url)
51
51
  url ||= "#{metadata[:base_url]}#{metadata[:path]}"
52
- page = nil
53
52
  parser = nil
54
53
  _method = method_from(metadata[:http_method])
55
54
  data = metadata[:data]
@@ -64,7 +63,7 @@ module Wombat
64
63
  parser.headers = @page.header
65
64
  else
66
65
  @page = RestClient.public_send(_method, *args) unless @page
67
- parser = Nokogiri::XML @page
66
+ parser = Nokogiri::XML(decode_body)
68
67
  parser.headers = @page.headers
69
68
  end
70
69
  @response_code = @page.code.to_i if @page.respond_to? :code
@@ -79,6 +78,15 @@ module Wombat
79
78
  end
80
79
  end
81
80
 
81
+ def decode_body
82
+ # Check if it's gzip encoded
83
+ if @page.body.start_with?("\x1F\x8B".b)
84
+ Zlib::GzipReader.new(StringIO.new(@page.body)).read
85
+ else
86
+ @page.body
87
+ end
88
+ end
89
+
82
90
  def method_from(_method)
83
91
  return :get if _method.nil?
84
92
  HTTP_METHODS.detect(->{:get}){ |i| i == _method.downcase.to_sym }
@@ -4,10 +4,10 @@ describe Wombat::DSL::Property do
4
4
  it 'should store property data' do
5
5
  callback = lambda { false }
6
6
  property = Wombat::DSL::Property.new("title", *["/some/selector", :html], &callback)
7
-
8
- property.wombat_property_name.should == "title"
9
- property.selector.should == "/some/selector"
10
- property.format.should == :html
11
- property.callback.should == callback
7
+
8
+ property.wombat_property_name.should eq "title"
9
+ property.selector.should eq "/some/selector"
10
+ property.format.should eq :html
11
+ property.callback.should eq callback
12
12
  end
13
13
  end
@@ -22,7 +22,7 @@ describe 'following pages referred by relative links' do
22
22
  results = crawler_instance.crawl
23
23
 
24
24
  # There are many entries. It's enough to check first three ones
25
- results["vocabulary"][0..2].should == [
25
+ results["vocabulary"][0..2].should eq [
26
26
  {"entry"=>{"word"=>"Dmoz", "description"=>"Dmoz - второй по популярности каталог сайтов после Яндекс-Каталога. Адрес каталога Dmoz - .\r\n\r\nЗаметка: Как вы думаете, мебель из Китая дорого стоит? Правильно, она недорогая. поставляет не только мебель, но и китайскую сантехнику, люстры, светильники и многое другое. Если вы хотите здорово съэкономить, то не пропустите такую возможность."}},
27
27
  {"entry"=>{"word"=>"PR", "description"=>"PR - PageRank - показатель Google для конкретной страницы сайта. Зависит от количества ссылок на страницу и от качества этих ссылок. Учитываются и ссылки с внутренних страниц сайта. PR влияет на выдачу в поисковой системе Google. Повысить PR сайту можно внутренней перелинковкой. PR бывает тулбарный и внутренний. Апдейт PR происходит, как правило, несколько раз в год. Сейчас у этого блога PR=2, а у сайта PR равен 3."}},
28
28
  {"entry"=>{"word"=>"Sape (сапа)", "description"=>"Sape (сапа) - это самая популярная в России биржа ссылок. Адрес: www.sape.ru. Веб-мастер может продать ссылки со своего сайта, а оптимизатор купить ссылки. Продажа ссылок осуществляется с ежемесячной оплатой. Цена на ссылки устанавливается веб-мастером для своего сайта. Для продажи ссылок на сайте размещается специальный код системы и в дальнейшем вся продажа происходит автоматически через веб-интерфейс Sape.\r\n\r\nЗаметка: Интересует монтаж и эксплуатация противопожарных металлических ДПМ или ? Читайте технологическую документацию и нормативные документы."}}
@@ -25,10 +25,10 @@ describe 'basic crawler setup' do
25
25
 
26
26
  results = crawler_instance.crawl
27
27
 
28
- results["search"].should == "Buscar"
29
- results["links"].should == [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
30
- results["subheader"].should == "Londres 2012"
31
- results["social"]["twitter"].should == "Verão"
28
+ results["search"].should eq "Buscar"
29
+ results["links"].should eq [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
30
+ results["subheader"].should eq "Londres 2012"
31
+ results["social"]["twitter"].should eq "Verão"
32
32
  end
33
33
  end
34
34
 
@@ -56,10 +56,10 @@ describe 'basic crawler setup' do
56
56
 
57
57
  results = crawler_instance.crawl
58
58
 
59
- results["search"].should == "Buscar"
60
- results["links"].should == [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
61
- results["subheader"].should == "Londres 2012"
62
- results["social"]["twitter"].should == "Verão"
59
+ results["search"].should eq "Buscar"
60
+ results["links"].should eq [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
61
+ results["subheader"].should eq "Londres 2012"
62
+ results["social"]["twitter"].should eq "Verão"
63
63
  end
64
64
  end
65
65
 
@@ -86,10 +86,10 @@ describe 'basic crawler setup' do
86
86
 
87
87
  results = crawler_instance.crawl
88
88
 
89
- results["search"].should == "Buscar"
90
- results["links"].should == [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
91
- results["subheader"].should == "Londres 2012"
92
- results["social"]["twitter"].should == "Verão"
89
+ results["search"].should eq "Buscar"
90
+ results["links"].should eq [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
91
+ results["subheader"].should eq "Londres 2012"
92
+ results["social"]["twitter"].should eq "Verão"
93
93
  end
94
94
  end
95
95
 
@@ -112,13 +112,13 @@ describe 'basic crawler setup' do
112
112
  results = crawler_instance.crawl
113
113
  end
114
114
 
115
- results["links"].should == result_hash
115
+ results["links"].should eq result_hash
116
116
 
117
117
  VCR.use_cassette('basic_crawler_page') do
118
118
  results = crawler_instance.crawl
119
119
  end
120
120
 
121
- results["links"].should == result_hash
121
+ results["links"].should eq result_hash
122
122
  end
123
123
 
124
124
  it 'should crawl page through block to class instance crawl method' do
@@ -145,10 +145,10 @@ describe 'basic crawler setup' do
145
145
  end
146
146
  end
147
147
 
148
- results["search"].should == "Buscar"
149
- results["links"].should == [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
150
- results["subheader"].should == "Londres 2012"
151
- results["social"]["twitter"].should == "Verão"
148
+ results["search"].should eq "Buscar"
149
+ results["links"].should eq [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
150
+ results["subheader"].should eq "Londres 2012"
151
+ results["social"]["twitter"].should eq "Verão"
152
152
  end
153
153
  end
154
154
 
@@ -173,10 +173,10 @@ describe 'basic crawler setup' do
173
173
  end
174
174
  end
175
175
 
176
- results["search"].should == "Buscar"
177
- results["links"].should == [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
178
- results["subheader"].should == "Londres 2012"
179
- results["social"]["twitter"].should == "Verão"
176
+ results["search"].should eq "Buscar"
177
+ results["links"].should eq [{"menu"=>"Agenda"}, {"menu"=>"Brasileiro"}, {"menu"=>"Brasil"}, {"menu"=>"Bolsas"}, {"menu"=>"Cinema"}, {"menu"=>"Galerias de Fotos"}, {"menu"=>"Beleza"}, {"menu"=>"Esportes"}, {"menu"=>"Assine o RSS"}]
178
+ results["subheader"].should eq "Londres 2012"
179
+ results["social"]["twitter"].should eq "Verão"
180
180
  end
181
181
  end
182
182
 
@@ -197,14 +197,14 @@ describe 'basic crawler setup' do
197
197
 
198
198
  results = crawler.new.crawl
199
199
 
200
- results.should == { "repos" => [
200
+ results.should eq({ "repos" => [
201
201
  { "project" => { "repo" => "jairajs89 / Touchy.js", "description" => "A simple light-weight JavaScript library dealing with touch events" } },
202
202
  { "project" => { "repo" => "mcavage / node-restify", "description" => "node.js REST framework specifically meant web service APIs" } },
203
203
  { "project" => { "repo" => "notlion / streetview-stereographic", "description" => "Shader Toy + Google Map + Panoramic Explorer" } },
204
204
  { "project" => { "repo" => "twitter / bootstrap", "description" => "HTML, CSS, and JS toolkit from Twitter" } },
205
205
  { "project" => { "repo" => "stolksdorf / Parallaxjs", "description" => "a Library Javascript that allows easy page parallaxing" } },
206
206
  { "project" => { "repo" => nil, "description" => nil}}
207
- ]}
207
+ ]})
208
208
  end
209
209
  end
210
210
 
@@ -216,9 +216,7 @@ describe 'basic crawler setup' do
216
216
  crawler.document_format :xml
217
217
  crawler.base_url "http://ws.audioscrobbler.com"
218
218
  crawler.path "/2.0/?method=geo.getevents&location=#{URI.escape('San Francisco')}&api_key=060decb474b73437d5bbec37f527ae7b"
219
-
220
219
  crawler.artist "xpath=//title", :list
221
-
222
220
  crawler.location 'xpath=//event', :iterator do
223
221
  latitude "xpath=./venue/location/geo:point/geo:lat", :text, { 'geo' => 'http://www.w3.org/2003/01/geo/wgs84_pos#' }
224
222
  longitude "xpath=./venue/location/geo:point/geo:long", :text, { 'geo' => 'http://www.w3.org/2003/01/geo/wgs84_pos#' }
@@ -228,7 +226,7 @@ describe 'basic crawler setup' do
228
226
  results = crawler_instance.crawl
229
227
  iterator = results['location']
230
228
 
231
- iterator.should == [
229
+ iterator.should eq([
232
230
  {"latitude"=>"37.807775", "longitude"=>"-122.272736"},
233
231
  {"latitude"=>"37.807717", "longitude"=>"-122.270059"},
234
232
  {"latitude"=>"37.869784", "longitude"=>"-122.267701"},
@@ -239,7 +237,7 @@ describe 'basic crawler setup' do
239
237
  {"latitude"=>"37.771079", "longitude"=>"-122.412604"},
240
238
  {"latitude"=>"37.784963", "longitude"=>"-122.418871"},
241
239
  {"latitude"=>"37.788978", "longitude"=>"-122.40664"}
242
- ]
240
+ ])
243
241
 
244
242
  results["artist"].should =~ ["Davka", "Digitalism (DJ Set)", "Gary Clark Jr.", "Lenny Kravitz", "Little Muddy", "Michael Schenker Group", "The Asteroids Galaxy Tour", "When Indie Attacks", "When Indie Attacks", "YOB"]
245
243
  end
@@ -260,7 +258,7 @@ describe 'basic crawler setup' do
260
258
  crawler_instance = crawler.new
261
259
  results = crawler_instance.crawl
262
260
 
263
- results.should == {
261
+ results.should eq({
264
262
  "github" => [
265
263
  { "heading"=>"GitHub helps people build software together." },
266
264
  { "heading"=>nil },
@@ -270,7 +268,7 @@ describe 'basic crawler setup' do
270
268
  { "heading"=>"GitHub on Your Servers" },
271
269
  { "heading"=>"Loading..." }
272
270
  ]
273
- }
271
+ })
274
272
  end
275
273
  end
276
274
 
@@ -46,7 +46,7 @@ describe Wombat::Processing::Parser do
46
46
  @metadata.http_method :get
47
47
 
48
48
  fake_document = double :document
49
- fake_parser = double :parser
49
+ fake_parser = double(:parser, body: 'foo')
50
50
  fake_header = double :header
51
51
  fake_document.should_receive(:parser).and_return(fake_parser)
52
52
  fake_document.should_receive(:header).and_return(fake_header)
@@ -58,13 +58,13 @@ describe Wombat::Processing::Parser do
58
58
  end
59
59
 
60
60
  it 'should correctly parse xml documents' do
61
- fake_document = double :xml
61
+ fake_document = double(:xml, body: 'foo')
62
62
  fake_parser = double :parser
63
63
  fake_headers = double :headers
64
64
  @metadata.document_format :xml
65
65
  @parser.mechanize.should_not_receive(:get)
66
66
  RestClient.should_receive(:get).and_return fake_document
67
- Nokogiri.should_receive(:XML).with(fake_document).and_return fake_parser
67
+ Nokogiri.should_receive(:XML).with('foo').and_return fake_parser
68
68
  fake_document.should_receive(:headers).and_return(fake_headers)
69
69
  fake_parser.should_receive(:headers=)
70
70
 
@@ -7,20 +7,15 @@ describe Wombat::Property::Locators::Html do
7
7
  fake_elem.stub inner_html: "Something cool "
8
8
  context.stub(:xpath).with("/abc", nil).and_return [fake_elem]
9
9
  property = Wombat::DSL::Property.new('data1', 'xpath=/abc', :html)
10
-
11
10
  locator = Wombat::Property::Locators::Html.new(property)
12
-
13
- locator.locate(context).should == { "data1" => "Something cool" }
11
+ locator.locate(context).should eq({ "data1" => "Something cool" })
14
12
  end
15
13
 
16
14
  it 'should return null if the property cannot be found' do
17
- fake_elem = double :element
18
15
  context = double :context
19
16
  context.stub(:xpath).with("/abc", nil).and_return []
20
17
  property = Wombat::DSL::Property.new('data1', 'xpath=/abc', :html)
21
-
22
18
  locator = Wombat::Property::Locators::Html.new(property)
23
-
24
- locator.locate(context).should == { "data1" => nil }
19
+ locator.locate(context).should eq({ "data1" => nil })
25
20
  end
26
21
  end
@@ -8,6 +8,6 @@ describe Wombat::Property::Locators::List do
8
8
 
9
9
  locator = Wombat::Property::Locators::List.new(property)
10
10
 
11
- locator.locate(context).should == { "data1" => %w(1 2 3 4 5) }
11
+ locator.locate(context).should eq({ "data1" => %w(1 2 3 4 5) })
12
12
  end
13
13
  end
@@ -10,7 +10,7 @@ describe Wombat::Property::Locators::Text do
10
10
 
11
11
  locator = Wombat::Property::Locators::Text.new(property)
12
12
 
13
- locator.locate(context).should == { "data1" => "Something cool" }
13
+ locator.locate(context).should eq({ "data1" => "Something cool" })
14
14
  end
15
15
 
16
16
  it 'should locate text property with xpath selector using xpath functions' do
@@ -20,7 +20,7 @@ describe Wombat::Property::Locators::Text do
20
20
 
21
21
  locator = Wombat::Property::Locators::Text.new(property)
22
22
 
23
- locator.locate(context).should == { "data1" => "Something" }
23
+ locator.locate(context).should eq({ "data1" => "Something" })
24
24
  end
25
25
 
26
26
  it 'should locate text property with css selector' do
@@ -32,17 +32,16 @@ describe Wombat::Property::Locators::Text do
32
32
 
33
33
  locator = Wombat::Property::Locators::Text.new(property)
34
34
 
35
- locator.locate(context).should == { "data1" => "My name" }
35
+ locator.locate(context).should eq({ "data1" => "My name" })
36
36
  end
37
37
 
38
38
  it 'should return plain symbols as strings' do
39
- fake_elem = double :element
40
39
  context = double :context
41
40
  property = Wombat::DSL::Property.new('data_2', :hardcoded_value, :text)
42
41
 
43
42
  locator = Wombat::Property::Locators::Text.new(property)
44
43
 
45
- locator.locate(context).should == { "data_2" => "hardcoded_value" }
44
+ locator.locate(context).should eq({ "data_2" => "hardcoded_value" })
46
45
  end
47
46
 
48
47
  it 'should invoke property callback' do
@@ -54,6 +53,6 @@ describe Wombat::Property::Locators::Text do
54
53
 
55
54
  locator = Wombat::Property::Locators::Text.new(property)
56
55
 
57
- locator.locate(context).should == { "data1" => "My ass" }
56
+ locator.locate(context).should eq({ "data1" => "My ass" })
58
57
  end
59
58
  end
@@ -8,7 +8,7 @@ describe SampleCrawler do
8
8
 
9
9
  it 'should correctly assign event metadata' do
10
10
  @sample_crawler.should_receive(:parse) do |args|
11
- args['event_group'].wombat_property_selector.should == "css=div.title-agenda"
11
+ args['event_group'].wombat_property_selector.should eq "css=div.title-agenda"
12
12
  it = args['event_group']
13
13
  expect(it["event"]["title"].wombat_property_selector).to eq("xpath=.")
14
14
  expect(it["event"]["date"].wombat_property_selector).to(
@@ -16,8 +16,8 @@ describe SampleCrawler do
16
16
  expect(it["event"]["type"].wombat_property_selector).to eq("xpath=.type")
17
17
  expect(it["venue"]["name"].wombat_property_selector).to eq("xpath=.")
18
18
 
19
- args[:base_url].should == 'http://www.obaoba.com.br'
20
- args[:path].should == '/porto-alegre/agenda'
19
+ args[:base_url].should eq 'http://www.obaoba.com.br'
20
+ args[:path].should eq '/porto-alegre/agenda'
21
21
  end
22
22
 
23
23
  @sample_crawler.crawl
@@ -23,9 +23,9 @@ describe Wombat do
23
23
  config.set_user_agent "Wombat"
24
24
  config.set_user_agent_alias 'Mac Safari'
25
25
  end
26
- Wombat.proxy_args.should == ["10.0.0.1", 8080]
27
- Wombat.user_agent.should == 'Wombat'
28
- Wombat.user_agent_alias.should == 'Mac Safari'
26
+ Wombat.proxy_args.should eq ["10.0.0.1", 8080]
27
+ Wombat.user_agent.should eq 'Wombat'
28
+ Wombat.user_agent_alias.should eq 'Mac Safari'
29
29
  end
30
30
 
31
31
  it 'should accept regular properties (non-selectors)' do
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: wombat 2.9.0 ruby lib
5
+ # stub: wombat 2.10.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "wombat".freeze
9
- s.version = "2.9.0"
9
+ s.version = "2.10.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Felipe Lima".freeze]
14
- s.date = "2019-07-10"
14
+ s.date = "2019-09-03"
15
15
  s.description = "Generic Web crawler with a DSL that parses structured data from web pages".freeze
16
16
  s.email = "felipe.lima@gmail.com".freeze
17
17
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wombat
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.0
4
+ version: 2.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felipe Lima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-10 00:00:00.000000000 Z
11
+ date: 2019-09-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mechanize