metainspector 5.14.0 → 5.15.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: 71467ae16d368978ce8ee13d605c95a12be2fc207a7d7c28e5243658f70a0837
4
- data.tar.gz: f7774783e9c4e7282ce5c10683fdcd521ee483f0becb9c8bdce45d276920af30
3
+ metadata.gz: 5098979bb849154a0fde8f74483401c6fac1d07aec69ce4b1cc8c4abc4d9eb3d
4
+ data.tar.gz: 7c862c95f5b1a10faa25bf5346e2b3c6e26114fabf787e1ec061caa8f70f06d9
5
5
  SHA512:
6
- metadata.gz: b623421b6f265833566eba954bb1d3bae0a00032720950a0a97316fd2e493ec98b5de46b4a48c9c0a7b28158101e8aecd4991e0043ca2601e75d387df97a769e
7
- data.tar.gz: 84cb6be32451c083adfa5ccb01e1746485a67e55fa9a1d56b1b2d496fec6154bfbf60f947c72a8c9ec8ea48e616641dcc30dc3b3579d1ef953475cc85354e8da
6
+ metadata.gz: 21ca7857d9cd32d2e0b5bbd2f29af1438233174d008b1d7b68df324c25da3ff8ca5b86f496cccc1c15700360e17a4f0318021483e41fd1d8d6ec3fc35e0479bc
7
+ data.tar.gz: 84cf704542d0ca037ce46f9fbbca4f6c354928c5d50dbf56f22e6394413aabe087ed97ca51ad9de9279e7a621f4b38972370dd29b1a1a76645ef833e2af6f3b3
data/.circleci/config.yml CHANGED
@@ -38,6 +38,15 @@ jobs:
38
38
  - run:
39
39
  name: Run tests
40
40
  command: bundle exec rake
41
+ test_3_2:
42
+ docker:
43
+ - image: cimg/ruby:3.2.1
44
+ steps:
45
+ - checkout
46
+ - ruby/install-deps
47
+ - run:
48
+ name: Run tests
49
+ command: bundle exec rake
41
50
  workflows:
42
51
  version: 2
43
52
  deploy:
@@ -45,4 +54,5 @@ workflows:
45
54
  - test_2_6
46
55
  - test_2_7
47
56
  - test_3_0
48
- - test_3_1
57
+ - test_3_1
58
+ - test_3_2
data/CHANGELOG.md CHANGED
@@ -1,15 +1,15 @@
1
1
  # MetaInpector Changelog
2
2
 
3
- ## [Changes in 5.13.0](https://github.com/metainspector/metainspector/compare/v5.12.1...v5.13.0)
3
+ ## [Changes in 5.13.0](https://github.com/jaimeiniesta/metainspector/compare/v5.12.1...v5.13.0)
4
4
 
5
5
  * Remove support for #feed that was deprecated in 5.9
6
6
  * Add support for Ruby 3.1
7
7
 
8
- ## [Changes in 5.12.1](https://github.com/metainspector/metainspector/compare/v5.12.0...v5.12.1)
8
+ ## [Changes in 5.12.1](https://github.com/jaimeiniesta/metainspector/compare/v5.12.0...v5.12.1)
9
9
 
10
10
  * Update dependencies: rubocop, nokogiri
11
11
 
12
- ## [Changes in 5.12.0](https://github.com/metainspector/metainspector/compare/v5.11.2...v5.12.0)
12
+ ## [Changes in 5.12.0](https://github.com/jaimeiniesta/metainspector/compare/v5.11.2...v5.12.0)
13
13
 
14
14
  * Support Ruby 3.0
15
15
 
data/Gemfile.lock CHANGED
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- metainspector (5.14.0)
5
- addressable (~> 2.8)
4
+ metainspector (5.15.0)
5
+ addressable (~> 2.8.4)
6
6
  faraday (~> 2.5)
7
7
  faraday-cookie_jar (~> 0.0)
8
8
  faraday-encoding (~> 0.0)
9
9
  faraday-follow_redirects (~> 0.3)
10
10
  faraday-gzip (>= 0.1, < 2.0)
11
- faraday-http-cache (~> 2.4)
11
+ faraday-http-cache (~> 2.5)
12
12
  faraday-retry (~> 2.0)
13
13
  fastimage (~> 2.2)
14
14
  nesty (~> 1.0)
@@ -17,7 +17,7 @@ PATH
17
17
  GEM
18
18
  remote: http://rubygems.org/
19
19
  specs:
20
- addressable (2.8.1)
20
+ addressable (2.8.4)
21
21
  public_suffix (>= 2.0.2, < 6.0)
22
22
  ast (2.4.2)
23
23
  awesome_print (1.9.2)
@@ -40,10 +40,10 @@ GEM
40
40
  faraday-gzip (1.0.0)
41
41
  faraday (>= 1.0)
42
42
  zlib (~> 2.1)
43
- faraday-http-cache (2.4.1)
43
+ faraday-http-cache (2.5.0)
44
44
  faraday (>= 0.8)
45
45
  faraday-net_http (3.0.2)
46
- faraday-retry (2.0.0)
46
+ faraday-retry (2.1.0)
47
47
  faraday (~> 2.0)
48
48
  fastimage (2.2.6)
49
49
  hashdiff (1.0.1)
@@ -51,22 +51,33 @@ GEM
51
51
  domain_name (~> 0.5)
52
52
  json (2.6.3)
53
53
  method_source (1.0.0)
54
- mini_portile2 (2.8.1)
54
+ mini_portile2 (2.8.2)
55
+ mustermann (3.0.0)
56
+ ruby2_keywords (~> 0.0.1)
55
57
  nesty (1.0.2)
56
- nokogiri (1.14.2)
58
+ nio4r (2.5.9)
59
+ nokogiri (1.14.4)
57
60
  mini_portile2 (~> 2.8.0)
58
61
  racc (~> 1.4)
59
- parallel (1.22.1)
60
- parser (3.2.1.0)
62
+ nokogiri (1.14.4-arm64-darwin)
63
+ racc (~> 1.4)
64
+ parallel (1.23.0)
65
+ parser (3.2.2.1)
61
66
  ast (~> 2.4.1)
62
67
  pry (0.14.2)
63
68
  coderay (~> 1.1)
64
69
  method_source (~> 1.0)
65
70
  public_suffix (5.0.1)
71
+ puma (6.2.2)
72
+ nio4r (~> 2.0)
66
73
  racc (1.6.2)
74
+ rack (2.2.7)
75
+ rack-protection (3.0.6)
76
+ rack
67
77
  rainbow (3.1.1)
68
78
  rake (13.0.6)
69
- regexp_parser (2.7.0)
79
+ regexp_parser (2.8.0)
80
+ resolv (0.2.2)
70
81
  rexml (3.2.5)
71
82
  rspec (3.12.0)
72
83
  rspec-core (~> 3.12.0)
@@ -81,20 +92,26 @@ GEM
81
92
  diff-lcs (>= 1.2.0, < 2.0)
82
93
  rspec-support (~> 3.12.0)
83
94
  rspec-support (3.12.0)
84
- rubocop (1.46.0)
95
+ rubocop (1.51.0)
85
96
  json (~> 2.3)
86
97
  parallel (~> 1.10)
87
98
  parser (>= 3.2.0.0)
88
99
  rainbow (>= 2.2.2, < 4.0)
89
100
  regexp_parser (>= 1.8, < 3.0)
90
101
  rexml (>= 3.2.5, < 4.0)
91
- rubocop-ast (>= 1.26.0, < 2.0)
102
+ rubocop-ast (>= 1.28.0, < 2.0)
92
103
  ruby-progressbar (~> 1.7)
93
104
  unicode-display_width (>= 2.4.0, < 3.0)
94
- rubocop-ast (1.26.0)
105
+ rubocop-ast (1.28.1)
95
106
  parser (>= 3.2.1.0)
96
- ruby-progressbar (1.11.0)
107
+ ruby-progressbar (1.13.0)
97
108
  ruby2_keywords (0.0.5)
109
+ sinatra (3.0.6)
110
+ mustermann (~> 3.0)
111
+ rack (~> 2.2, >= 2.2.4)
112
+ rack-protection (= 3.0.6)
113
+ tilt (~> 2.0)
114
+ tilt (2.1.0)
98
115
  unf (0.1.4)
99
116
  unf_ext
100
117
  unf_ext (0.0.8.2)
@@ -106,15 +123,19 @@ GEM
106
123
  zlib (2.1.1)
107
124
 
108
125
  PLATFORMS
109
- ruby
126
+ arm64-darwin-22
127
+ x86_64-linux
110
128
 
111
129
  DEPENDENCIES
112
130
  awesome_print (~> 1.9)
113
131
  metainspector!
114
132
  pry (~> 0.14)
133
+ puma (~> 6.2.2)
115
134
  rake (~> 13.0)
135
+ resolv (~> 0.2.2)
116
136
  rspec (~> 3.11)
117
137
  rubocop (~> 1.34)
138
+ sinatra (~> 3.0.6)
118
139
  webmock (~> 3.17)
119
140
 
120
141
  BUNDLED WITH
data/README.md CHANGED
@@ -1,14 +1,10 @@
1
1
  # MetaInspector
2
- [![Gem Version](https://badge.fury.io/rb/metainspector.svg)](http://badge.fury.io/rb/metainspector) [![CircleCI](https://circleci.com/gh/metainspector/metainspector.svg?style=svg)](https://circleci.com/gh/metainspector/metainspector) [![Code Climate](https://codeclimate.com/github/jaimeiniesta/metainspector/badges/gpa.svg)](https://codeclimate.com/github/jaimeiniesta/metainspector) [![Mentioned in Awesome Ruby](https://awesome.re/mentioned-badge.svg)](https://github.com/markets/awesome-ruby)
2
+ [![Gem Version](https://badge.fury.io/rb/metainspector.svg)](http://badge.fury.io/rb/metainspector) [![CircleCI](https://circleci.com/gh/jaimeiniesta/metainspector.svg?style=svg)](https://circleci.com/gh/jaimeiniesta/metainspector) [![Code Climate](https://codeclimate.com/github/jaimeiniesta/metainspector/badges/gpa.svg)](https://codeclimate.com/github/jaimeiniesta/metainspector) [![Mentioned in Awesome Ruby](https://awesome.re/mentioned-badge.svg)](https://github.com/markets/awesome-ruby)
3
3
 
4
4
  MetaInspector is a gem for web scraping purposes.
5
5
 
6
6
  You give it an URL, and it lets you easily get its title, links, images, charset, description, keywords, meta tags...
7
7
 
8
- ## See it in action!
9
-
10
- You can try MetaInspector using this little demo: [https://github.com/metainspector/metainspectordemo](https://github.com/metainspector/metainspectordemo)
11
-
12
8
  ## Installation
13
9
 
14
10
  Install the gem from RubyGems:
@@ -309,6 +305,27 @@ If you want to disallow redirects, you can do it like this:
309
305
  page = MetaInspector.new('facebook.com', :allow_redirections => false)
310
306
  ```
311
307
 
308
+ You can also customize how many redirects you wish to allow:
309
+
310
+ ```ruby
311
+ page = MetaInspector.new('facebook.com', :faraday_options => { redirect: { limit: 5 } })
312
+ ```
313
+
314
+ And even customize what to do in between each redirect:
315
+
316
+ ```ruby
317
+ callback = proc do |previous_response, next_request|
318
+   ip_address = Resolv.getaddress(next_request.url.host)
319
+ raise 'Invalid address' if IPAddr.new(ip_address).private?
320
+ end
321
+
322
+ page = MetaInspector.new(url, faraday_options: { redirect: { callback: callback } })
323
+ ```
324
+
325
+
326
+ The `faraday_options[:redirect]` hash is passed to the `FollowRedirects` middleware used by `Faraday`, so that we can use all available options.
327
+ Check them [here](https://github.com/lostisland/faraday_middleware/blob/main/lib/faraday_middleware/response/follow_redirects.rb#L44).
328
+
312
329
  ### Headers
313
330
 
314
331
  By default, the following headers are set:
@@ -0,0 +1,42 @@
1
+ # A MetaInspector example that runs a callback in between redirects.
2
+ # The callback raises an exception if the redirection points to a URL that resolves into a private IP address.
3
+ # This is one way of triggering a known security exploit called server-side request forgery (SSRF).
4
+ #
5
+ # To properly run this example you need a server which redirects to a service like nip.io.
6
+ # The easiest way to achieve that is running the examples/redirect_web_server.rb server in one terminal window,
7
+ # and calling its address with this example in another terminal window.
8
+ #
9
+ # Usage example:
10
+ # In terminal #1:
11
+ # ruby redirect_web_server.rb
12
+ #
13
+ # In terminal #2:
14
+ # ruby faraday_redirect_options.rb http://127.0.0.1:4567
15
+
16
+ require 'resolv'
17
+ require '../lib/metainspector'
18
+ puts "Using MetaInspector #{MetaInspector::VERSION}"
19
+
20
+ # Get the starting URL
21
+ url = ARGV[0] || (puts "Enter an url"; gets.strip)
22
+
23
+ # redirect options to be passed along to Faraday::FollowRedirects::Middleware
24
+ redirects_opts = {
25
+ limit: 5,
26
+ callback: proc do |_old_response, new_response|
27
+ ip_address = Resolv.getaddress(new_response.url.host)
28
+ raise 'Invalid address' if IPAddr.new(ip_address).private?
29
+ end
30
+ }
31
+
32
+ begin
33
+ page = MetaInspector.new(url, faraday_options: { redirect: redirects_opts })
34
+ rescue StandardError => e
35
+ puts e.message
36
+ else
37
+ puts "\nScraping #{page.url} returned these results:"
38
+ puts "\nTITLE: #{page.title}"
39
+
40
+ puts "\nto_hash..."
41
+ puts page.to_hash
42
+ end
@@ -0,0 +1,5 @@
1
+ require 'sinatra'
2
+
3
+ get '/' do
4
+ redirect 'http://10.0.0.0.nip.io/'
5
+ end
@@ -58,6 +58,7 @@ module MetaInspector
58
58
  def fetch
59
59
  Timeout::timeout(fatal_timeout) do
60
60
  @faraday_options.merge!(:url => url)
61
+ follow_redirects_options = @faraday_options.delete(:redirect) || {}
61
62
 
62
63
  session = Faraday.new(@faraday_options) do |faraday|
63
64
  faraday.request :retry, max: @retries
@@ -65,7 +66,8 @@ module MetaInspector
65
66
  faraday.request :gzip
66
67
 
67
68
  if @allow_redirections
68
- faraday.use Faraday::FollowRedirects::Middleware, limit: 10
69
+ follow_redirects_options[:limit] ||= 10
70
+ faraday.use Faraday::FollowRedirects::Middleware, **follow_redirects_options
69
71
  faraday.use :cookie_jar
70
72
  end
71
73
 
@@ -84,7 +86,9 @@ module MetaInspector
84
86
  req.options.open_timeout = @read_timeout
85
87
  end
86
88
 
87
- @url.url = response.env.url.to_s
89
+ if @allow_redirections
90
+ @url.url = response.env.url.to_s
91
+ end
88
92
 
89
93
  response
90
94
  end
@@ -1,3 +1,3 @@
1
1
  module MetaInspector
2
- VERSION = '5.14.0'
2
+ VERSION = '5.15.0'
3
3
  end
@@ -5,7 +5,7 @@ Gem::Specification.new do |gem|
5
5
  gem.email = "jaimeiniesta@gmail.com"
6
6
  gem.description = %q{MetaInspector lets you scrape a web page and get its links, images, texts, meta tags...}
7
7
  gem.summary = %q{MetaInspector is a ruby gem for web scraping purposes, that returns metadata from a given URL}
8
- gem.homepage = "https://github.com/metainspector/metainspector"
8
+ gem.homepage = "https://github.com/jaimeiniesta/metainspector"
9
9
  gem.license = "MIT"
10
10
 
11
11
  gem.files = `git ls-files`.split("\n")
@@ -20,9 +20,9 @@ Gem::Specification.new do |gem|
20
20
  gem.add_dependency 'faraday-encoding', '~> 0.0'
21
21
  gem.add_dependency 'faraday-follow_redirects', '~> 0.3'
22
22
  gem.add_dependency 'faraday-gzip', '>= 0.1', '< 2.0'
23
- gem.add_dependency 'faraday-http-cache', '~> 2.4'
23
+ gem.add_dependency 'faraday-http-cache', '~> 2.5'
24
24
  gem.add_dependency 'faraday-retry', '~> 2.0'
25
- gem.add_dependency 'addressable', '~> 2.8'
25
+ gem.add_dependency 'addressable', '~> 2.8.4'
26
26
  gem.add_dependency 'fastimage', '~> 2.2'
27
27
  gem.add_dependency 'nesty', '~> 1.0'
28
28
 
@@ -31,5 +31,8 @@ Gem::Specification.new do |gem|
31
31
  gem.add_development_dependency 'awesome_print', '~> 1.9'
32
32
  gem.add_development_dependency 'rake', '~> 13.0'
33
33
  gem.add_development_dependency 'pry', '~> 0.14'
34
+ gem.add_development_dependency 'puma', '~> 6.2.2'
34
35
  gem.add_development_dependency 'rubocop', '~> 1.34'
36
+ gem.add_development_dependency 'resolv', '~> 0.2.2'
37
+ gem.add_development_dependency 'sinatra', '~> 3.0.6'
35
38
  end
@@ -130,11 +130,11 @@ describe MetaInspector::Document do
130
130
 
131
131
  describe 'url normalization' do
132
132
  it 'should normalize by default' do
133
- expect(MetaInspector.new('http://example.com/%EF%BD%9E').url).to eq('http://example.com/~')
133
+ expect(MetaInspector.new('http://example.com?name=joe martins', allow_redirections: false).url).to eq('http://example.com/?name=joe%20martins')
134
134
  end
135
135
 
136
136
  it 'should not normalize if the normalize_url option is false' do
137
- expect(MetaInspector.new('http://example.com/%EF%BD%9E', normalize_url: false).url).to eq('http://example.com/%EF%BD%9E')
137
+ expect(MetaInspector.new('http://example.com?name=joe martins', normalize_url: false, allow_redirections: false).url).to eq('http://example.com?name=joe martins')
138
138
  end
139
139
  end
140
140
 
@@ -108,7 +108,7 @@ describe MetaInspector do
108
108
 
109
109
  it "should handle links that have an invalid byte sequence" do
110
110
  m = MetaInspector.new('http://example.com/invalid_byte_seq')
111
- expect(m.links.all).to eq(["http://pagerankalert.posterous.com/", "http://element%B3wgarderoby.com/", "http://twitter.com/pagerankalert"])
111
+ expect(m.links.all).to eq(["http://pagerankalert.posterous.com/", "http://twitter.com/pagerankalert"])
112
112
  end
113
113
 
114
114
  end
@@ -1,4 +1,7 @@
1
1
  require 'spec_helper'
2
+ require 'resolv'
3
+
4
+ class PrivateIPAddressError < StandardError; end
2
5
 
3
6
  describe MetaInspector do
4
7
  describe "redirections" do
@@ -47,6 +50,25 @@ describe MetaInspector do
47
50
  expect(page.url).to eq("http://blogs.clarionledger.com/dechols/2014/03/24/digital-medicine/?nclick_check=1")
48
51
  end
49
52
  end
53
+
54
+ context "when there is a callback to be ran between redirects that blocks redirections to private IP addresses" do
55
+ it "raises an exception" do
56
+ stub_request(:get, "https://www.facebook.com/")
57
+ .to_return(:status => 302,
58
+ :headers => { "Location" => "http://10.0.0.0/" })
59
+
60
+ redirect_options = {
61
+ callback: proc do |_previous_response, next_request|
62
+ ip_address = Resolv.getaddress(next_request.url.host)
63
+ raise PrivateIPAddressError if IPAddr.new(ip_address).private?
64
+ end
65
+ }
66
+
67
+ expect {
68
+ MetaInspector.new("https://www.facebook.com/", faraday_options: { redirect: redirect_options })
69
+ }.to raise_error PrivateIPAddressError
70
+ end
71
+ end
50
72
  end
51
73
 
52
74
  private
data/spec/spec_helper.rb CHANGED
@@ -50,7 +50,8 @@ RSpec.configure do |config|
50
50
  stub_request(:get, "http://example.com/author_in_body").to_return(fixture_file("author_in_body.response"))
51
51
  stub_request(:get, "http://example.com/author_in_link").to_return(fixture_file("author_in_link.response"))
52
52
  stub_request(:get, "http://example.com/author_in_twitter").to_return(fixture_file("author_in_twitter.response"))
53
- stub_request(:get, "http://example.com/~").to_return(fixture_file("example.response"))
53
+ stub_request(:get, "http://example.com/?name=joe martins").to_return(fixture_file("example.response"))
54
+ stub_request(:get, "http://example.com/?name=joe+martins").to_return(fixture_file("example.response"))
54
55
  stub_request(:get, "http://facebook.com/").to_return(fixture_file("facebook.com.response"))
55
56
  stub_request(:get, "http://international.com").to_return(fixture_file("international.response"))
56
57
  stub_request(:get, "http://pagerankalert-shortcut-and-icon.com").to_return(fixture_file("pagerankalert-shortcut-and-icon.com.response"))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metainspector
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.14.0
4
+ version: 5.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jaime Iniesta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-27 00:00:00.000000000 Z
11
+ date: 2023-05-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -106,14 +106,14 @@ dependencies:
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '2.4'
109
+ version: '2.5'
110
110
  type: :runtime
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '2.4'
116
+ version: '2.5'
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: faraday-retry
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -134,14 +134,14 @@ dependencies:
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '2.8'
137
+ version: 2.8.4
138
138
  type: :runtime
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '2.8'
144
+ version: 2.8.4
145
145
  - !ruby/object:Gem::Dependency
146
146
  name: fastimage
147
147
  requirement: !ruby/object:Gem::Requirement
@@ -240,6 +240,20 @@ dependencies:
240
240
  - - "~>"
241
241
  - !ruby/object:Gem::Version
242
242
  version: '0.14'
243
+ - !ruby/object:Gem::Dependency
244
+ name: puma
245
+ requirement: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: 6.2.2
250
+ type: :development
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: 6.2.2
243
257
  - !ruby/object:Gem::Dependency
244
258
  name: rubocop
245
259
  requirement: !ruby/object:Gem::Requirement
@@ -254,6 +268,34 @@ dependencies:
254
268
  - - "~>"
255
269
  - !ruby/object:Gem::Version
256
270
  version: '1.34'
271
+ - !ruby/object:Gem::Dependency
272
+ name: resolv
273
+ requirement: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - "~>"
276
+ - !ruby/object:Gem::Version
277
+ version: 0.2.2
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - "~>"
283
+ - !ruby/object:Gem::Version
284
+ version: 0.2.2
285
+ - !ruby/object:Gem::Dependency
286
+ name: sinatra
287
+ requirement: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - "~>"
290
+ - !ruby/object:Gem::Version
291
+ version: 3.0.6
292
+ type: :development
293
+ prerelease: false
294
+ version_requirements: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - "~>"
297
+ - !ruby/object:Gem::Version
298
+ version: 3.0.6
257
299
  description: MetaInspector lets you scrape a web page and get its links, images, texts,
258
300
  meta tags...
259
301
  email: jaimeiniesta@gmail.com
@@ -275,7 +317,9 @@ files:
275
317
  - Rakefile
276
318
  - bin/console
277
319
  - examples/basic_scraping.rb
320
+ - examples/faraday_redirect_options.rb
278
321
  - examples/link_checker.rb
322
+ - examples/redirect_web_server.rb
279
323
  - examples/spider.rb
280
324
  - lib/meta_inspector.rb
281
325
  - lib/meta_inspector/document.rb
@@ -369,7 +413,7 @@ files:
369
413
  - spec/request_spec.rb
370
414
  - spec/spec_helper.rb
371
415
  - spec/url_spec.rb
372
- homepage: https://github.com/metainspector/metainspector
416
+ homepage: https://github.com/jaimeiniesta/metainspector
373
417
  licenses:
374
418
  - MIT
375
419
  metadata: {}
@@ -388,7 +432,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
388
432
  - !ruby/object:Gem::Version
389
433
  version: '0'
390
434
  requirements: []
391
- rubygems_version: 3.3.7
435
+ rubygems_version: 3.4.12
392
436
  signing_key:
393
437
  specification_version: 4
394
438
  summary: MetaInspector is a ruby gem for web scraping purposes, that returns metadata