wombat 2.8.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb1c11ccd6d54a4b1cdd9f9f4841803020bd56585feffd411a8d21813d811b27
4
- data.tar.gz: f77dc116067bddd1b01cb48de6d314b4285f929772b6546b9e6689cd6022f01b
3
+ metadata.gz: f1909fd5e86c31b2cf15c7ed6d64659c7da25137c161cfa67a9f39f4f2fd2de7
4
+ data.tar.gz: 5dbb06acbb4437ae8879a4994b885006fb7d0c4841005436e9566376e824f593
5
5
  SHA512:
6
- metadata.gz: 4892667469be2d4001b93d84e255b07bc7007f81dc8eb4630590388351cc9e6754e2887b9fbd61fc35f423e2db00bf58cab0141753d43cf4b5734dd1f23e951a
7
- data.tar.gz: 86a289188d0b12010157d0c979f4bbe3420a31a91cb8783b17286e01b23772085b832ae2c6a6dd0f2e5a253ec9a8a3cf666217fb74a5bf7f066c09e1ac4f2772
6
+ metadata.gz: 2afe281d0f9232398a349c3153c629bfe3a00c0a31be023fdc0a90a9573554123d84ac049e1898c44b0fc8cce24f3882f0ce4d441057622adbca4a3f1da41bf9
7
+ data.tar.gz: 2cc81b88d83a0719b0f37887b3047ddf22c67b6f1d7c0ba194bfaafc0fd1600308f410ae71d64ba171f3bbf571f90853727a7bf69dde08f8801b949e0540ed31
@@ -0,0 +1,11 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # # Please see the documentation for all configuration options:
4
+ # # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+ #
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "bundler" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "weekly"
@@ -0,0 +1,31 @@
1
+ name: Wombat CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [master]
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - name: Restore Bundler cache
14
+ uses: actions/cache@v2
15
+ id: cache
16
+ with:
17
+ path: vendor/bundle
18
+ key: ${{ runner.os }}-bundle-${{ hashFiles('**/Gemfile.lock') }}
19
+ restore-keys: |
20
+ ${{ runner.os }}-bundle-
21
+ - name: Set up Ruby
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ ruby-version: 3.1.2
25
+
26
+ - name: Install dependencies
27
+ run: |
28
+ bundle config path vendor/bundle
29
+ bundle install --jobs 4 --retry 3
30
+ - name: Run tests
31
+ run: bundle exec rake test
data/.travis.yml CHANGED
@@ -1,7 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.2
4
- - 2.3.0
5
- - 2.4.1
3
+ - 2.5.0
4
+ - 2.6.3
6
5
  notifications:
7
6
  webhooks: https://app.fossa.io/hooks/travisci
data/CHANGELOG.md CHANGED
@@ -1,4 +1,18 @@
1
- ### version 2.6.0 (2017-11-24)
1
+ ### version 2.10.0 (2019-09-02)
2
+
3
+ * Bump gem dependencies to address rest-client security vulnerability
4
+ * Minimum supported Ruby version is now v2.5.0
5
+
6
+ ### version 2.9.0 (2019-07-09)
7
+
8
+ * Bump all gem dependencies to address security vulnerabilities
9
+ * Minimum supported Ruby version is now v2.3.0
10
+
11
+ ### version 2.8.0 (2018-11-27)
12
+
13
+ * Bump rack to version 2.0.6
14
+
15
+ ### version 2.7.0 (2017-11-24)
2
16
 
3
17
  * Bump activesupport to version 5.1.4
4
18
 
data/Gemfile CHANGED
@@ -1,14 +1,14 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem 'mechanize'
3
+ gem 'mechanize', '~> 2.8.5'
4
4
  gem 'activesupport'
5
5
  gem 'rest-client'
6
6
 
7
7
  group :development, :test do
8
8
  gem 'bundler'
9
+ gem 'jeweler'
9
10
  gem 'rake'
10
11
  gem 'yard'
11
- gem 'jeweler'
12
12
  gem 'rspec'
13
13
  gem 'vcr'
14
14
  gem 'webmock'
data/Gemfile.lock CHANGED
@@ -1,142 +1,180 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (5.2.0)
4
+ activesupport (7.0.3.1)
5
5
  concurrent-ruby (~> 1.0, >= 1.0.2)
6
- i18n (>= 0.7, < 2)
7
- minitest (~> 5.1)
8
- tzinfo (~> 1.1)
9
- addressable (2.4.0)
10
- builder (3.2.3)
11
- concurrent-ruby (1.0.5)
12
- connection_pool (2.2.2)
13
- coveralls (0.8.22)
6
+ i18n (>= 1.6, < 2)
7
+ minitest (>= 5.1)
8
+ tzinfo (~> 2.0)
9
+ addressable (2.8.1)
10
+ public_suffix (>= 2.0.2, < 6.0)
11
+ builder (3.2.4)
12
+ concurrent-ruby (1.1.10)
13
+ connection_pool (2.2.5)
14
+ coveralls (0.8.23)
14
15
  json (>= 1.8, < 3)
15
16
  simplecov (~> 0.16.1)
16
17
  term-ansicolor (~> 1.3)
17
- thor (~> 0.19.4)
18
+ thor (>= 0.19.4, < 2.0)
18
19
  tins (~> 1.6)
19
- crack (0.4.3)
20
- safe_yaml (~> 1.0.0)
20
+ crack (0.4.5)
21
+ rexml
21
22
  descendants_tracker (0.0.4)
22
23
  thread_safe (~> 0.3, >= 0.3.1)
23
- diff-lcs (1.3)
24
- docile (1.3.1)
25
- domain_name (0.5.20180417)
24
+ diff-lcs (1.5.0)
25
+ docile (1.4.0)
26
+ domain_name (0.5.20190701)
26
27
  unf (>= 0.0.5, < 1.0.0)
27
- faraday (0.9.2)
28
- multipart-post (>= 1.2, < 3)
29
- git (1.4.0)
30
- github_api (0.16.0)
31
- addressable (~> 2.4.0)
28
+ faraday (1.10.2)
29
+ faraday-em_http (~> 1.0)
30
+ faraday-em_synchrony (~> 1.0)
31
+ faraday-excon (~> 1.1)
32
+ faraday-httpclient (~> 1.0)
33
+ faraday-multipart (~> 1.0)
34
+ faraday-net_http (~> 1.0)
35
+ faraday-net_http_persistent (~> 1.0)
36
+ faraday-patron (~> 1.0)
37
+ faraday-rack (~> 1.0)
38
+ faraday-retry (~> 1.0)
39
+ ruby2_keywords (>= 0.0.4)
40
+ faraday-em_http (1.0.0)
41
+ faraday-em_synchrony (1.0.0)
42
+ faraday-excon (1.1.0)
43
+ faraday-httpclient (1.0.1)
44
+ faraday-multipart (1.0.4)
45
+ multipart-post (~> 2)
46
+ faraday-net_http (1.0.1)
47
+ faraday-net_http_persistent (1.2.0)
48
+ faraday-patron (1.0.0)
49
+ faraday-rack (1.0.0)
50
+ faraday-retry (1.0.3)
51
+ git (1.12.0)
52
+ addressable (~> 2.8)
53
+ rchardet (~> 1.8)
54
+ github_api (0.19.0)
55
+ addressable (~> 2.4)
32
56
  descendants_tracker (~> 0.0.4)
33
- faraday (~> 0.8, < 0.10)
34
- hashie (>= 3.4)
35
- mime-types (>= 1.16, < 3.0)
57
+ faraday (>= 0.8, < 2)
58
+ hashie (~> 3.5, >= 3.5.2)
36
59
  oauth2 (~> 1.0)
37
- hashdiff (0.3.7)
38
- hashie (3.5.7)
39
- highline (2.0.0)
40
- http-cookie (1.0.3)
60
+ hashdiff (1.0.1)
61
+ hashie (3.6.0)
62
+ highline (2.0.3)
63
+ http-accept (1.7.0)
64
+ http-cookie (1.0.5)
41
65
  domain_name (~> 0.5)
42
- i18n (1.0.1)
66
+ i18n (1.12.0)
43
67
  concurrent-ruby (~> 1.0)
44
- jeweler (2.3.9)
68
+ jeweler (2.1.1)
45
69
  builder
46
- bundler
70
+ bundler (>= 1.0)
47
71
  git (>= 1.2.5)
48
- github_api (~> 0.16.0)
72
+ github_api
49
73
  highline (>= 1.6.15)
50
74
  nokogiri (>= 1.5.10)
51
- psych
52
75
  rake
53
76
  rdoc
54
- semver2
55
- json (2.1.0)
56
- jwt (1.5.6)
57
- mechanize (2.7.6)
58
- domain_name (~> 0.5, >= 0.5.1)
59
- http-cookie (~> 1.0)
60
- mime-types (>= 1.17.2)
61
- net-http-digest_auth (~> 1.1, >= 1.1.1)
62
- net-http-persistent (>= 2.5.2)
63
- nokogiri (~> 1.6)
64
- ntlm-http (~> 0.1, >= 0.1.1)
65
- webrobots (>= 0.0.9, < 0.2)
66
- mime-types (2.99.3)
67
- mini_portile2 (2.3.0)
68
- minitest (5.11.3)
69
- multi_json (1.13.1)
77
+ semver
78
+ json (2.6.2)
79
+ jwt (2.4.1)
80
+ mechanize (2.8.5)
81
+ addressable (~> 2.8)
82
+ domain_name (~> 0.5, >= 0.5.20190701)
83
+ http-cookie (~> 1.0, >= 1.0.3)
84
+ mime-types (~> 3.0)
85
+ net-http-digest_auth (~> 1.4, >= 1.4.1)
86
+ net-http-persistent (>= 2.5.2, < 5.0.dev)
87
+ nokogiri (~> 1.11, >= 1.11.2)
88
+ rubyntlm (~> 0.6, >= 0.6.3)
89
+ webrick (~> 1.7)
90
+ webrobots (~> 0.1.2)
91
+ mime-types (3.4.1)
92
+ mime-types-data (~> 3.2015)
93
+ mime-types-data (3.2022.0105)
94
+ minitest (5.16.3)
95
+ multi_json (1.15.0)
70
96
  multi_xml (0.6.0)
71
- multipart-post (2.0.0)
97
+ multipart-post (2.2.3)
72
98
  net-http-digest_auth (1.4.1)
73
- net-http-persistent (3.0.0)
99
+ net-http-persistent (4.0.1)
74
100
  connection_pool (~> 2.2)
75
101
  netrc (0.11.0)
76
- nokogiri (1.8.4)
77
- mini_portile2 (~> 2.3.0)
78
- ntlm-http (0.1.1)
79
- oauth2 (1.4.0)
80
- faraday (>= 0.8, < 0.13)
81
- jwt (~> 1.0)
102
+ nokogiri (1.13.8-x86_64-linux)
103
+ racc (~> 1.4)
104
+ oauth2 (1.4.10)
105
+ faraday (>= 0.17.3, < 3.0)
106
+ jwt (>= 1.0, < 3.0)
82
107
  multi_json (~> 1.3)
83
108
  multi_xml (~> 0.5)
84
109
  rack (>= 1.2, < 3)
85
- psych (3.0.2)
86
- rack (2.0.6)
87
- rake (12.3.1)
88
- rdoc (6.0.4)
89
- rest-client (2.0.2)
110
+ psych (4.0.4)
111
+ stringio
112
+ public_suffix (5.0.0)
113
+ racc (1.6.0)
114
+ rack (2.2.4)
115
+ rake (13.0.6)
116
+ rchardet (1.8.0)
117
+ rdoc (6.4.0)
118
+ psych (>= 4.0.0)
119
+ rest-client (2.1.0)
120
+ http-accept (>= 1.7.0, < 2.0)
90
121
  http-cookie (>= 1.0.2, < 2.0)
91
122
  mime-types (>= 1.16, < 4.0)
92
123
  netrc (~> 0.8)
93
- rspec (3.7.0)
94
- rspec-core (~> 3.7.0)
95
- rspec-expectations (~> 3.7.0)
96
- rspec-mocks (~> 3.7.0)
97
- rspec-core (3.7.1)
98
- rspec-support (~> 3.7.0)
99
- rspec-expectations (3.7.0)
124
+ rexml (3.2.5)
125
+ rspec (3.11.0)
126
+ rspec-core (~> 3.11.0)
127
+ rspec-expectations (~> 3.11.0)
128
+ rspec-mocks (~> 3.11.0)
129
+ rspec-core (3.11.0)
130
+ rspec-support (~> 3.11.0)
131
+ rspec-expectations (3.11.0)
100
132
  diff-lcs (>= 1.2.0, < 2.0)
101
- rspec-support (~> 3.7.0)
102
- rspec-mocks (3.7.0)
133
+ rspec-support (~> 3.11.0)
134
+ rspec-mocks (3.11.1)
103
135
  diff-lcs (>= 1.2.0, < 2.0)
104
- rspec-support (~> 3.7.0)
105
- rspec-support (3.7.1)
106
- safe_yaml (1.0.4)
107
- semver2 (3.4.2)
136
+ rspec-support (~> 3.11.0)
137
+ rspec-support (3.11.0)
138
+ ruby2_keywords (0.0.5)
139
+ rubyntlm (0.6.3)
140
+ semver (1.0.1)
108
141
  simplecov (0.16.1)
109
142
  docile (~> 1.1)
110
143
  json (>= 1.8, < 3)
111
144
  simplecov-html (~> 0.10.0)
112
145
  simplecov-html (0.10.2)
113
- term-ansicolor (1.6.0)
146
+ stringio (3.0.2)
147
+ sync (0.5.0)
148
+ term-ansicolor (1.7.1)
114
149
  tins (~> 1.0)
115
- thor (0.19.4)
150
+ thor (1.2.1)
116
151
  thread_safe (0.3.6)
117
- tins (1.16.3)
118
- tzinfo (1.2.5)
119
- thread_safe (~> 0.1)
152
+ tins (1.31.1)
153
+ sync
154
+ tzinfo (2.0.5)
155
+ concurrent-ruby (~> 1.0)
120
156
  unf (0.1.4)
121
157
  unf_ext
122
- unf_ext (0.0.7.5)
123
- vcr (4.0.0)
124
- webmock (3.4.2)
125
- addressable (>= 2.3.6)
158
+ unf_ext (0.0.8.2)
159
+ vcr (6.1.0)
160
+ webmock (3.18.1)
161
+ addressable (>= 2.8.0)
126
162
  crack (>= 0.3.2)
127
- hashdiff
163
+ hashdiff (>= 0.4.0, < 2.0.0)
164
+ webrick (1.7.0)
128
165
  webrobots (0.1.2)
129
- yard (0.9.15)
166
+ yard (0.9.28)
167
+ webrick (~> 1.7.0)
130
168
 
131
169
  PLATFORMS
132
- ruby
170
+ x86_64-linux
133
171
 
134
172
  DEPENDENCIES
135
173
  activesupport
136
174
  bundler
137
175
  coveralls
138
176
  jeweler
139
- mechanize
177
+ mechanize (~> 2.8.5)
140
178
  rake
141
179
  rest-client
142
180
  rspec
@@ -145,4 +183,4 @@ DEPENDENCIES
145
183
  yard
146
184
 
147
185
  BUNDLED WITH
148
- 1.17.1
186
+ 2.3.20
data/README.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # Wombat
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/wombat.svg)](https://badge.fury.io/rb/wombat)
4
- [![CI Build Status](https://secure.travis-ci.org/felipecsl/wombat.png?branch=master)][travis]
5
- [![Dependency Status](https://gemnasium.com/felipecsl/wombat.png?travis)][gemnasium]
6
- [![Code Climate](https://codeclimate.com/github/felipecsl/wombat.png)][codeclimate]
3
+ [![Gem Version](https://badge.fury.io/rb/wombat.svg)](https://badge.fury.io/rb/wombat)
4
+ [![CI Build Status](https://secure.travis-ci.org/felipecsl/wombat.png?branch=master)][travis]
5
+ [![Dependency Status](https://gemnasium.com/felipecsl/wombat.png?travis)][gemnasium]
6
+ [![Code Climate](https://codeclimate.com/github/felipecsl/wombat.png)][codeclimate]
7
7
  [![Coverage Status](https://coveralls.io/repos/felipecsl/wombat/badge.png?branch=master)][coveralls]
8
8
  [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Ffelipecsl%2Fwombat.svg?type=shield)][fossa]
9
9
 
@@ -70,7 +70,7 @@ end
70
70
  ### This is just a sneak peek of what Wombat can do. For the complete documentation, please check the links below:
71
71
 
72
72
  ### [Wiki](http://github.com/felipecsl/wombat/wiki)
73
- ### [API Documentation](http://rubydoc.info/gems/wombat/2.1.1/frames)
73
+ ### [API Documentation](https://rubydoc.info/gems/wombat)
74
74
  ### [Changelog](https://github.com/felipecsl/wombat/blob/master/CHANGELOG.md)
75
75
 
76
76
  ## Contributing to Wombat
@@ -90,7 +90,7 @@ end
90
90
 
91
91
  ## Copyright
92
92
 
93
- Copyright (c) 2012 Felipe Lima. See LICENSE.txt for further details.
93
+ Copyright (c) 2019 Felipe Lima. See LICENSE.txt for further details.
94
94
 
95
95
 
96
96
  ## License
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.8.0
1
+ 3.0.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
 
@@ -215,10 +215,8 @@ describe 'basic crawler setup' do
215
215
 
216
216
  crawler.document_format :xml
217
217
  crawler.base_url "http://ws.audioscrobbler.com"
218
- crawler.path "/2.0/?method=geo.getevents&location=#{URI.escape('San Francisco')}&api_key=060decb474b73437d5bbec37f527ae7b"
219
-
218
+ crawler.path "/2.0/?method=geo.getevents&location=#{URI.encode_www_form_component('San Francisco')}&api_key=060decb474b73437d5bbec37f527ae7b"
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
data/spec/wombat_spec.rb CHANGED
@@ -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
data/wombat.gemspec CHANGED
@@ -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.8.0 ruby lib
5
+ # stub: wombat 3.0.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "wombat".freeze
9
- s.version = "2.8.0"
9
+ s.version = "3.0.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 = "2018-11-28"
14
+ s.date = "2022-08-23"
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 = [
@@ -20,6 +20,8 @@ Gem::Specification.new do |s|
20
20
  ]
21
21
  s.files = [
22
22
  ".document",
23
+ ".github/dependabot.yml",
24
+ ".github/workflows/ci.yml",
23
25
  ".rspec",
24
26
  ".travis.yml",
25
27
  "CHANGELOG.md",
@@ -86,45 +88,33 @@ Gem::Specification.new do |s|
86
88
  s.homepage = "http://felipecsl.github.com/wombat".freeze
87
89
  s.licenses = ["MIT".freeze]
88
90
  s.required_ruby_version = Gem::Requirement.new(">= 1.9".freeze)
89
- s.rubygems_version = "2.7.3".freeze
91
+ s.rubygems_version = "3.3.7".freeze
90
92
  s.summary = "Ruby DSL to scrape web pages".freeze
91
93
 
92
94
  if s.respond_to? :specification_version then
93
95
  s.specification_version = 4
96
+ end
94
97
 
95
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
96
- s.add_runtime_dependency(%q<mechanize>.freeze, [">= 0"])
97
- s.add_runtime_dependency(%q<activesupport>.freeze, [">= 0"])
98
- s.add_runtime_dependency(%q<rest-client>.freeze, [">= 0"])
99
- s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
100
- s.add_development_dependency(%q<rake>.freeze, [">= 0"])
101
- s.add_development_dependency(%q<yard>.freeze, [">= 0"])
102
- s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
103
- s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
104
- s.add_development_dependency(%q<vcr>.freeze, [">= 0"])
105
- s.add_development_dependency(%q<webmock>.freeze, [">= 0"])
106
- s.add_development_dependency(%q<coveralls>.freeze, [">= 0"])
107
- else
108
- s.add_dependency(%q<mechanize>.freeze, [">= 0"])
109
- s.add_dependency(%q<activesupport>.freeze, [">= 0"])
110
- s.add_dependency(%q<rest-client>.freeze, [">= 0"])
111
- s.add_dependency(%q<bundler>.freeze, [">= 0"])
112
- s.add_dependency(%q<rake>.freeze, [">= 0"])
113
- s.add_dependency(%q<yard>.freeze, [">= 0"])
114
- s.add_dependency(%q<jeweler>.freeze, [">= 0"])
115
- s.add_dependency(%q<rspec>.freeze, [">= 0"])
116
- s.add_dependency(%q<vcr>.freeze, [">= 0"])
117
- s.add_dependency(%q<webmock>.freeze, [">= 0"])
118
- s.add_dependency(%q<coveralls>.freeze, [">= 0"])
119
- end
98
+ if s.respond_to? :add_runtime_dependency then
99
+ s.add_runtime_dependency(%q<mechanize>.freeze, ["~> 2.8.5"])
100
+ s.add_runtime_dependency(%q<activesupport>.freeze, [">= 0"])
101
+ s.add_runtime_dependency(%q<rest-client>.freeze, [">= 0"])
102
+ s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
103
+ s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
104
+ s.add_development_dependency(%q<rake>.freeze, [">= 0"])
105
+ s.add_development_dependency(%q<yard>.freeze, [">= 0"])
106
+ s.add_development_dependency(%q<rspec>.freeze, [">= 0"])
107
+ s.add_development_dependency(%q<vcr>.freeze, [">= 0"])
108
+ s.add_development_dependency(%q<webmock>.freeze, [">= 0"])
109
+ s.add_development_dependency(%q<coveralls>.freeze, [">= 0"])
120
110
  else
121
- s.add_dependency(%q<mechanize>.freeze, [">= 0"])
111
+ s.add_dependency(%q<mechanize>.freeze, ["~> 2.8.5"])
122
112
  s.add_dependency(%q<activesupport>.freeze, [">= 0"])
123
113
  s.add_dependency(%q<rest-client>.freeze, [">= 0"])
124
114
  s.add_dependency(%q<bundler>.freeze, [">= 0"])
115
+ s.add_dependency(%q<jeweler>.freeze, [">= 0"])
125
116
  s.add_dependency(%q<rake>.freeze, [">= 0"])
126
117
  s.add_dependency(%q<yard>.freeze, [">= 0"])
127
- s.add_dependency(%q<jeweler>.freeze, [">= 0"])
128
118
  s.add_dependency(%q<rspec>.freeze, [">= 0"])
129
119
  s.add_dependency(%q<vcr>.freeze, [">= 0"])
130
120
  s.add_dependency(%q<webmock>.freeze, [">= 0"])
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wombat
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felipe Lima
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-28 00:00:00.000000000 Z
11
+ date: 2022-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mechanize
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 2.8.5
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 2.8.5
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activesupport
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rake
70
+ name: jeweler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
@@ -81,7 +81,7 @@ dependencies:
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
- name: yard
84
+ name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">="
@@ -95,7 +95,7 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: jeweler
98
+ name: yard
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - ">="
@@ -173,6 +173,8 @@ extra_rdoc_files:
173
173
  - README.md
174
174
  files:
175
175
  - ".document"
176
+ - ".github/dependabot.yml"
177
+ - ".github/workflows/ci.yml"
176
178
  - ".rspec"
177
179
  - ".travis.yml"
178
180
  - CHANGELOG.md
@@ -239,7 +241,7 @@ homepage: http://felipecsl.github.com/wombat
239
241
  licenses:
240
242
  - MIT
241
243
  metadata: {}
242
- post_install_message:
244
+ post_install_message:
243
245
  rdoc_options: []
244
246
  require_paths:
245
247
  - lib
@@ -254,9 +256,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
254
256
  - !ruby/object:Gem::Version
255
257
  version: '0'
256
258
  requirements: []
257
- rubyforge_project:
258
- rubygems_version: 2.7.3
259
- signing_key:
259
+ rubygems_version: 3.3.7
260
+ signing_key:
260
261
  specification_version: 4
261
262
  summary: Ruby DSL to scrape web pages
262
263
  test_files: []