proxy_fetcher 0.10.2 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
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