proxy_fetcher 0.10.2 → 0.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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -1
  3. data/Gemfile +8 -5
  4. data/Rakefile +7 -3
  5. data/gemfiles/nokogiri.gemfile +8 -6
  6. data/gemfiles/oga.gemfile +8 -6
  7. data/lib/proxy_fetcher.rb +46 -35
  8. data/lib/proxy_fetcher/client/client.rb +10 -3
  9. data/lib/proxy_fetcher/client/request.rb +4 -4
  10. data/lib/proxy_fetcher/configuration.rb +24 -19
  11. data/lib/proxy_fetcher/document.rb +0 -9
  12. data/lib/proxy_fetcher/document/adapters.rb +1 -1
  13. data/lib/proxy_fetcher/document/adapters/abstract_adapter.rb +3 -12
  14. data/lib/proxy_fetcher/document/adapters/nokogiri_adapter.rb +1 -1
  15. data/lib/proxy_fetcher/document/adapters/oga_adapter.rb +1 -1
  16. data/lib/proxy_fetcher/document/node.rb +2 -2
  17. data/lib/proxy_fetcher/exceptions.rb +6 -6
  18. data/lib/proxy_fetcher/manager.rb +42 -9
  19. data/lib/proxy_fetcher/providers/base.rb +43 -22
  20. data/lib/proxy_fetcher/providers/free_proxy_list.rb +9 -10
  21. data/lib/proxy_fetcher/providers/free_proxy_list_socks.rb +58 -0
  22. data/lib/proxy_fetcher/providers/free_proxy_list_ssl.rb +7 -15
  23. data/lib/proxy_fetcher/providers/free_proxy_list_us.rb +54 -0
  24. data/lib/proxy_fetcher/providers/http_tunnel.rb +11 -19
  25. data/lib/proxy_fetcher/providers/mtpro.rb +43 -0
  26. data/lib/proxy_fetcher/providers/proxy_list.rb +8 -16
  27. data/lib/proxy_fetcher/providers/proxypedia.rb +48 -0
  28. data/lib/proxy_fetcher/providers/proxyscrape_http.rb +65 -0
  29. data/lib/proxy_fetcher/providers/proxyscrape_socks4.rb +65 -0
  30. data/lib/proxy_fetcher/providers/proxyscrape_socks5.rb +65 -0
  31. data/lib/proxy_fetcher/providers/xroxy.rb +9 -17
  32. data/lib/proxy_fetcher/proxy.rb +16 -4
  33. data/lib/proxy_fetcher/utils/http_client.rb +7 -12
  34. data/lib/proxy_fetcher/utils/proxy_list_validator.rb +3 -1
  35. data/lib/proxy_fetcher/utils/proxy_validator.rb +21 -9
  36. data/lib/proxy_fetcher/version.rb +3 -3
  37. data/proxy_fetcher.gemspec +21 -16
  38. data/spec/fixtures/proxies.txt +14 -0
  39. data/spec/proxy_fetcher/client/client_spec.rb +72 -57
  40. data/spec/proxy_fetcher/configuration_spec.rb +11 -11
  41. data/spec/proxy_fetcher/document/adapters_spec.rb +8 -8
  42. data/spec/proxy_fetcher/document/node_spec.rb +4 -4
  43. data/spec/proxy_fetcher/manager_spec.rb +18 -0
  44. data/spec/proxy_fetcher/providers/base_spec.rb +9 -9
  45. data/spec/proxy_fetcher/providers/multiple_providers_spec.rb +4 -4
  46. data/spec/proxy_fetcher/providers/proxy_classes_spec.rb +28 -0
  47. data/spec/proxy_fetcher/proxy_spec.rb +14 -14
  48. data/spec/proxy_fetcher/version_spec.rb +2 -0
  49. data/spec/spec_helper.rb +10 -10
  50. data/spec/support/manager_examples.rb +21 -21
  51. metadata +27 -17
  52. data/lib/proxy_fetcher/providers/gather_proxy.rb +0 -58
  53. data/spec/proxy_fetcher/providers/free_proxy_list_spec.rb +0 -13
  54. data/spec/proxy_fetcher/providers/free_proxy_list_ssl_spec.rb +0 -11
  55. data/spec/proxy_fetcher/providers/gather_proxy_spec.rb +0 -11
  56. data/spec/proxy_fetcher/providers/http_tunnel_spec.rb +0 -11
  57. data/spec/proxy_fetcher/providers/proxy_list_spec.rb +0 -11
  58. data/spec/proxy_fetcher/providers/xroxy_spec.rb +0 -11
@@ -1,26 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
5
  describe ProxyFetcher::Document::Adapters do
6
- describe '#lookup' do
7
- it 'returns predefined adapters if symbol or string passed' do
8
- expect(described_class.lookup('nokogiri')).to eq(ProxyFetcher::Document::NokogiriAdapter)
6
+ describe "#lookup" do
7
+ it "returns predefined adapters if symbol or string passed" do
8
+ expect(described_class.lookup("nokogiri")).to eq(ProxyFetcher::Document::NokogiriAdapter)
9
9
 
10
10
  expect(described_class.lookup(:oga)).to eq(ProxyFetcher::Document::OgaAdapter)
11
11
  end
12
12
 
13
- it 'returns self if class passed' do
13
+ it "returns self if class passed" do
14
14
  expect(described_class.lookup(Struct)).to eq(Struct)
15
15
  end
16
16
 
17
- it 'raises an exception if passed value is blank' do
17
+ it "raises an exception if passed value is blank" do
18
18
  expect { described_class.lookup(nil) }.to raise_error(ProxyFetcher::Exceptions::BlankAdapter)
19
- expect { described_class.lookup('') }.to raise_error(ProxyFetcher::Exceptions::BlankAdapter)
19
+ expect { described_class.lookup("") }.to raise_error(ProxyFetcher::Exceptions::BlankAdapter)
20
20
  end
21
21
 
22
22
  it "raises an exception if adapter doesn't exist" do
23
- expect { described_class.lookup('wrong') }.to raise_error(ProxyFetcher::Exceptions::UnknownAdapter)
23
+ expect { described_class.lookup("wrong") }.to raise_error(ProxyFetcher::Exceptions::UnknownAdapter)
24
24
  end
25
25
  end
26
26
  end
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
5
  describe ProxyFetcher::Document::Node do
6
- context 'overridable methods' do
7
- it 'raises an error' do
8
- node = ProxyFetcher::Document::Node.new('')
6
+ context "overridable methods" do
7
+ it "raises an error" do
8
+ node = ProxyFetcher::Document::Node.new("")
9
9
 
10
10
  %w[content html].each do |method|
11
11
  expect { node.public_send(method) }.to raise_error do |error|
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe ProxyFetcher::Manager do
6
+ it "can initialize with a proxies from file(s)" do
7
+ manager = described_class.new(refresh: false, file: "spec/fixtures/proxies.txt")
8
+
9
+ expect(manager.proxies.size).to be(14)
10
+
11
+ manager = described_class.new(
12
+ refresh: false,
13
+ file: ["spec/fixtures/proxies.txt", "spec/fixtures/proxies.txt"]
14
+ )
15
+
16
+ expect(manager.proxies.size).to be(14)
17
+ end
18
+ end
@@ -1,37 +1,37 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
5
  describe ProxyFetcher::Providers::Base do
6
6
  before { ProxyFetcher.config.reset! }
7
7
  after { ProxyFetcher.config.reset! }
8
8
 
9
- it 'does not allows to use not implemented methods' do
9
+ it "does not allows to use not implemented methods" do
10
10
  NotImplementedCustomProvider = Class.new(ProxyFetcher::Providers::Base)
11
11
 
12
12
  ProxyFetcher::Configuration.register_provider(:provider_without_methods, NotImplementedCustomProvider)
13
13
  ProxyFetcher.config.provider = :provider_without_methods
14
14
 
15
15
  expect { ProxyFetcher::Manager.new }.to raise_error(NotImplementedError) do |error|
16
- expect(error.message).to include('load_proxy_list')
16
+ expect(error.message).to include("provider_url")
17
17
  end
18
18
 
19
19
  # implement one of the methods
20
20
  NotImplementedCustomProvider.class_eval do
21
- def load_proxy_list(*)
22
- [1, 2, 3]
21
+ def provider_url
22
+ "http://provider.com"
23
23
  end
24
24
  end
25
25
 
26
26
  expect { ProxyFetcher::Manager.new }.to raise_error(NotImplementedError) do |error|
27
- expect(error.message).to include('to_proxy')
27
+ expect(error.message).to include("xpath")
28
28
  end
29
29
  end
30
30
 
31
- it 'logs failed to load proxy providers' do
31
+ it "logs failed to load proxy providers" do
32
32
  CustomProvider = Class.new(ProxyFetcher::Providers::Base) do
33
33
  def load_proxy_list(*)
34
- doc = load_document('https://google.com', {})
34
+ doc = load_document("https://google.com", {})
35
35
  doc.xpath('//table[contains(@class, "table")]/tr[(not(@id="proxy-table-header")) and (count(td)>2)]')
36
36
  end
37
37
  end
@@ -44,7 +44,7 @@ describe ProxyFetcher::Providers::Base do
44
44
 
45
45
  allow_any_instance_of(HTTP::Client).to receive(:get).and_raise(StandardError)
46
46
 
47
- expect(logger).to receive(:warn).with(/Failed to process request to http[s:\/]/)
47
+ expect(logger).to receive(:warn).with(%r{Failed to process request to http[s:/]})
48
48
 
49
49
  ProxyFetcher::Manager.new
50
50
  end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
- describe 'Multiple proxy providers' do
5
+ describe "Multiple proxy providers" do
6
6
  before { ProxyFetcher.config.reset! }
7
7
  after { ProxyFetcher.config.reset! }
8
8
 
9
- it 'combine proxies from multiple providers' do
10
- proxy_stub = ProxyFetcher::Proxy.new(addr: '192.168.1.1', port: 8080)
9
+ it "combine proxies from multiple providers" do
10
+ proxy_stub = ProxyFetcher::Proxy.new(addr: "192.168.1.1", port: 8080)
11
11
 
12
12
  # Each proxy provider will return 2 proxies
13
13
  ProxyFetcher::Configuration.providers_registry.providers.each do |_name, klass|
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Proxy classes" do
6
+ [
7
+ [:free_proxy_list, "FreeProxyList"],
8
+ [:free_proxy_list_socks, "FreeProxyListSocks"],
9
+ [:free_proxy_list_ssl, "FreeProxyListSSL"],
10
+ [:free_proxy_list_us, "FreeProxyListUS"],
11
+ [:http_tunnel, "HTTPTunnel"],
12
+ [:mtpro, "MTPro"],
13
+ [:proxy_list, "ProxyList"],
14
+ [:proxypedia, "Proxypedia"],
15
+ [:proxyscrape_http, "ProxyscrapeHTTP"],
16
+ [:proxyscrape_socks4, "ProxyscrapeSOCKS4"],
17
+ [:proxyscrape_socks5, "ProxyscrapeSOCKS5"],
18
+ [:xroxy, "XRoxy"]
19
+ ].each do |(provider_name, provider_klass)|
20
+ describe Object.const_get("ProxyFetcher::Providers::#{provider_klass}") do
21
+ before :all do
22
+ ProxyFetcher.config.provider = provider_name
23
+ end
24
+
25
+ it_behaves_like "a manager"
26
+ end
27
+ end
28
+ end
@@ -1,20 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'spec_helper'
3
+ require "spec_helper"
4
4
 
5
5
  describe ProxyFetcher::Proxy do
6
- let(:proxy) { described_class.new(addr: '192.169.1.1', port: 8080, type: 'HTTP') }
6
+ let(:proxy) { described_class.new(addr: "192.169.1.1", port: 8080, type: "HTTP") }
7
7
 
8
- it 'can initialize a new proxy object' do
9
- proxy = described_class.new(addr: '192.169.1.1', port: 8080, type: 'HTTP')
8
+ it "can initialize a new proxy object" do
9
+ proxy = described_class.new(addr: "192.169.1.1", port: 8080, type: "HTTP")
10
10
 
11
11
  expect(proxy).not_to be_nil
12
- expect(proxy.addr).to eq('192.169.1.1')
12
+ expect(proxy.addr).to eq("192.169.1.1")
13
13
  expect(proxy.port).to eq(8080)
14
- expect(proxy.type).to eq('HTTP')
14
+ expect(proxy.type).to eq("HTTP")
15
15
  end
16
16
 
17
- it 'checks schema' do
17
+ it "checks schema" do
18
18
  proxy.type = ProxyFetcher::Proxy::HTTP
19
19
  expect(proxy.http?).to be_truthy
20
20
  expect(proxy.https?).to be_falsey
@@ -34,28 +34,28 @@ describe ProxyFetcher::Proxy do
34
34
  expect(proxy.ssl?).to be_truthy
35
35
  end
36
36
 
37
- it 'not connectable if IP addr is wrong' do
38
- proxy.addr = '192.168.1.0'
37
+ it "not connectable if IP addr is wrong" do
38
+ proxy.addr = "192.168.1.0"
39
39
  expect(proxy.connectable?).to be_falsey
40
40
  end
41
41
 
42
- it 'not connectable if there are some error during connection request' do
42
+ it "not connectable if there are some error during connection request" do
43
43
  allow_any_instance_of(HTTP::Client).to receive(:head).and_raise(HTTP::TimeoutError)
44
44
  expect(proxy.connectable?).to be_falsey
45
45
  end
46
46
 
47
- it 'returns URI::Generic' do
47
+ it "returns URI::Generic" do
48
48
  expect(proxy.uri).to be_a(URI::Generic)
49
49
 
50
50
  expect(proxy.uri.host).not_to be_empty
51
51
  expect(proxy.uri.port).not_to be_nil
52
52
  end
53
53
 
54
- it 'returns URL' do
54
+ it "returns URL" do
55
55
  expect(proxy.url).to be_a(String)
56
56
  end
57
57
 
58
- it 'returns URL with scheme' do
59
- expect(proxy.url(scheme: true)).to include('://')
58
+ it "returns URL with scheme" do
59
+ expect(proxy.url(scheme: true)).to include("://")
60
60
  end
61
61
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe ProxyFetcher::VERSION do
2
4
  it { expect(ProxyFetcher::VERSION::STRING).to match(/^\d+\.\d+\.\d+(\.\w+)?$/) }
3
5
  end
@@ -1,24 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'simplecov'
4
- SimpleCov.add_filter 'spec'
5
- SimpleCov.add_filter 'version'
3
+ require "simplecov"
4
+ SimpleCov.add_filter "spec"
5
+ SimpleCov.add_filter "version"
6
6
 
7
- if ENV['CI'] || ENV['TRAVIS'] || ENV['COVERALLS'] || ENV['JENKINS_URL']
8
- require 'coveralls'
7
+ if ENV["CI"] || ENV["TRAVIS"] || ENV["COVERALLS"] || ENV["JENKINS_URL"]
8
+ require "coveralls"
9
9
  Coveralls.wear!
10
10
  else
11
11
  SimpleCov.start
12
12
  end
13
13
 
14
- require 'bundler/setup'
14
+ require "bundler/setup"
15
15
  Bundler.setup
16
16
 
17
- require 'proxy_fetcher'
17
+ require "proxy_fetcher"
18
18
 
19
- Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
19
+ Dir["./spec/support/**/*.rb"].sort.each { |f| require f }
20
20
 
21
- adapter = ENV['BUNDLE_GEMFILE'][/.+\/(.+)\.gemfile/i, 1] || :nokogiri
21
+ adapter = ENV["BUNDLE_GEMFILE"][%r{.+/(.+)\.gemfile}i, 1] || :nokogiri
22
22
  puts "Configured adapter: '#{adapter}'"
23
23
 
24
24
  ProxyFetcher.configure do |config|
@@ -26,5 +26,5 @@ ProxyFetcher.configure do |config|
26
26
  end
27
27
 
28
28
  RSpec.configure do |config|
29
- config.order = 'random'
29
+ config.order = "random"
30
30
  end
@@ -1,9 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RSpec.shared_examples 'a manager' do
4
- it 'loads proxy list on initialization by default' do
5
- manager = ProxyFetcher::Manager.new
6
- expect(manager.proxies).not_to be_empty
3
+ RSpec.shared_examples "a manager" do
4
+ before :all do
5
+ @cached_manager = ProxyFetcher::Manager.new
6
+ end
7
+
8
+ it "loads proxy list on initialization by default" do
9
+ expect(@cached_manager.proxies).not_to be_empty
7
10
  end
8
11
 
9
12
  it "doesn't load proxy list on initialization if `refresh` argument was set to false" do
@@ -11,11 +14,10 @@ RSpec.shared_examples 'a manager' do
11
14
  expect(manager.proxies).to be_empty
12
15
  end
13
16
 
14
- it 'returns valid Proxy objects' do
15
- manager = ProxyFetcher::Manager.new
16
- expect(manager.proxies).to all(be_a(ProxyFetcher::Proxy))
17
+ it "returns valid Proxy objects" do
18
+ expect(@cached_manager.proxies).to all(be_a(ProxyFetcher::Proxy))
17
19
 
18
- manager.proxies.each do |proxy|
20
+ @cached_manager.proxies.each do |proxy|
19
21
  expect(proxy.addr).to match(/\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/i)
20
22
  expect(proxy.port).to be_a_kind_of(Numeric)
21
23
  expect(proxy.type).not_to be_empty
@@ -25,12 +27,11 @@ RSpec.shared_examples 'a manager' do
25
27
  end
26
28
  end
27
29
 
28
- it 'returns raw proxies (HOST:PORT)' do
29
- manager = ProxyFetcher::Manager.new
30
- expect(manager.raw_proxies).to all(be_a(String))
30
+ it "returns raw proxies (HOST:PORT)" do
31
+ expect(@cached_manager.raw_proxies).to all(be_a(String))
31
32
  end
32
33
 
33
- it 'cleanup proxy list from dead servers' do
34
+ it "cleanup proxy list from dead servers" do
34
35
  allow_any_instance_of(ProxyFetcher::Proxy).to receive(:connectable?).and_return(false)
35
36
 
36
37
  manager = ProxyFetcher::Manager.new
@@ -45,7 +46,7 @@ RSpec.shared_examples 'a manager' do
45
46
  expect(manager.inspect).to eq(manager.to_s)
46
47
  end
47
48
 
48
- it 'returns first proxy' do
49
+ it "returns first proxy" do
49
50
  manager = ProxyFetcher::Manager.new
50
51
 
51
52
  first_proxy = manager.proxies.first
@@ -54,16 +55,16 @@ RSpec.shared_examples 'a manager' do
54
55
  expect(manager.proxies.first).not_to eq(first_proxy)
55
56
  end
56
57
 
57
- it 'returns first valid proxy' do
58
+ it "returns first valid proxy" do
58
59
  manager = ProxyFetcher::Manager.new(refresh: false)
59
60
 
60
- proxies = Array.new(5) { instance_double('ProxyFetcher::Proxy', connectable?: false) }
61
+ proxies = Array.new(5) { instance_double("ProxyFetcher::Proxy", connectable?: false) }
61
62
  manager.instance_variable_set(:@proxies, proxies)
62
63
 
63
- connectable_proxy = instance_double('ProxyFetcher::Proxy')
64
+ connectable_proxy = instance_double("ProxyFetcher::Proxy")
64
65
  allow(connectable_proxy).to receive(:connectable?).and_return(true)
65
66
 
66
- manager.proxies[0..2].each { |proxy| proxy.instance_variable_set(:@addr, '192.168.1.1') }
67
+ manager.proxies[0..2].each { |proxy| proxy.instance_variable_set(:@addr, "192.168.1.1") }
67
68
  manager.proxies[2] = connectable_proxy
68
69
 
69
70
  expect(manager.get!).to eq(connectable_proxy)
@@ -73,15 +74,14 @@ RSpec.shared_examples 'a manager' do
73
74
  expect(manager.proxies.size).to be(1)
74
75
  end
75
76
 
76
- it 'returns nothing if proxy list is empty' do
77
+ it "returns nothing if proxy list is empty" do
77
78
  manager = ProxyFetcher::Manager.new(refresh: false)
78
79
 
79
80
  expect(manager.get).to be_nil
80
81
  expect(manager.get!).to be_nil
81
82
  end
82
83
 
83
- it 'returns random proxy' do
84
- manager = ProxyFetcher::Manager.new
85
- expect(manager.random).to be_an_instance_of(ProxyFetcher::Proxy)
84
+ it "returns random proxy" do
85
+ expect(@cached_manager.random).to be_an_instance_of(ProxyFetcher::Proxy)
86
86
  end
87
87
  end
metadata CHANGED
@@ -1,29 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxy_fetcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.2
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nikita Bulai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-15 00:00:00.000000000 Z
11
+ date: 2021-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ - - "<"
18
21
  - !ruby/object:Gem::Version
19
- version: '3.0'
22
+ version: '5'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '3'
30
+ - - "<"
25
31
  - !ruby/object:Gem::Version
26
- version: '3.0'
32
+ version: '5'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -44,14 +50,14 @@ dependencies:
44
50
  requirements:
45
51
  - - "~>"
46
52
  - !ruby/object:Gem::Version
47
- version: '3.5'
53
+ version: '3.9'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
- version: '3.5'
60
+ version: '3.9'
55
61
  description: This gem can help your Ruby application to make HTTP(S) requests using
56
62
  proxies by fetching and validating proxy lists from the different providers.
57
63
  email: bulajnikita@gmail.com
@@ -88,10 +94,16 @@ files:
88
94
  - lib/proxy_fetcher/null_logger.rb
89
95
  - lib/proxy_fetcher/providers/base.rb
90
96
  - lib/proxy_fetcher/providers/free_proxy_list.rb
97
+ - lib/proxy_fetcher/providers/free_proxy_list_socks.rb
91
98
  - lib/proxy_fetcher/providers/free_proxy_list_ssl.rb
92
- - lib/proxy_fetcher/providers/gather_proxy.rb
99
+ - lib/proxy_fetcher/providers/free_proxy_list_us.rb
93
100
  - lib/proxy_fetcher/providers/http_tunnel.rb
101
+ - lib/proxy_fetcher/providers/mtpro.rb
94
102
  - lib/proxy_fetcher/providers/proxy_list.rb
103
+ - lib/proxy_fetcher/providers/proxypedia.rb
104
+ - lib/proxy_fetcher/providers/proxyscrape_http.rb
105
+ - lib/proxy_fetcher/providers/proxyscrape_socks4.rb
106
+ - lib/proxy_fetcher/providers/proxyscrape_socks5.rb
95
107
  - lib/proxy_fetcher/providers/xroxy.rb
96
108
  - lib/proxy_fetcher/proxy.rb
97
109
  - lib/proxy_fetcher/utils/http_client.rb
@@ -99,18 +111,15 @@ files:
99
111
  - lib/proxy_fetcher/utils/proxy_validator.rb
100
112
  - lib/proxy_fetcher/version.rb
101
113
  - proxy_fetcher.gemspec
114
+ - spec/fixtures/proxies.txt
102
115
  - spec/proxy_fetcher/client/client_spec.rb
103
116
  - spec/proxy_fetcher/configuration_spec.rb
104
117
  - spec/proxy_fetcher/document/adapters_spec.rb
105
118
  - spec/proxy_fetcher/document/node_spec.rb
119
+ - spec/proxy_fetcher/manager_spec.rb
106
120
  - spec/proxy_fetcher/providers/base_spec.rb
107
- - spec/proxy_fetcher/providers/free_proxy_list_spec.rb
108
- - spec/proxy_fetcher/providers/free_proxy_list_ssl_spec.rb
109
- - spec/proxy_fetcher/providers/gather_proxy_spec.rb
110
- - spec/proxy_fetcher/providers/http_tunnel_spec.rb
111
121
  - spec/proxy_fetcher/providers/multiple_providers_spec.rb
112
- - spec/proxy_fetcher/providers/proxy_list_spec.rb
113
- - spec/proxy_fetcher/providers/xroxy_spec.rb
122
+ - spec/proxy_fetcher/providers/proxy_classes_spec.rb
114
123
  - spec/proxy_fetcher/proxy_spec.rb
115
124
  - spec/proxy_fetcher/version_spec.rb
116
125
  - spec/spec_helper.rb
@@ -127,14 +136,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
136
  requirements:
128
137
  - - ">="
129
138
  - !ruby/object:Gem::Version
130
- version: 2.0.0
139
+ version: 2.3.0
131
140
  required_rubygems_version: !ruby/object:Gem::Requirement
132
141
  requirements:
133
142
  - - ">="
134
143
  - !ruby/object:Gem::Version
135
144
  version: '0'
136
145
  requirements: []
137
- rubygems_version: 3.0.2
146
+ rubyforge_project:
147
+ rubygems_version: 2.7.9
138
148
  signing_key:
139
149
  specification_version: 4
140
150
  summary: Ruby gem for dealing with proxy lists from different providers