metainspector 5.14.0 → 5.15.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: 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