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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d256aaf841030823ef753d6c2b2726dd7e8e5306dbddae6b6079a26815df4224
4
- data.tar.gz: a747a8d9ed567ffa6373bd0d30dc9a99e5320cb03b75dd3feb5ef45465144375
3
+ metadata.gz: bf6591a8ede2c142fca7f433f3edceb407ed884c1dee6a98e3ca33efbae392e2
4
+ data.tar.gz: 7d7259da718adec21b8d749d04faf594fa926389e570be6c55bbe9ebf3695783
5
5
  SHA512:
6
- metadata.gz: '01997f86deda80383198be18ac9bca8309970fa38ea337a082093822838732038425b642a6806798fa35e2a891b63d679020fad33fd5f447efed00b426b85706'
7
- data.tar.gz: 2fd10653fdf594e8847d4ebe34cb66c30b3d79d2900bd741768a5d4742ffa50923092f2c8f2bd95e3215f505a073e040e27cad8e2d868ff5837e81078c7d6f95
6
+ metadata.gz: 90eed5f390d122ae58f9bd6c7553b7a1ff6bbca8e65c05406593f53b7a00a4ed160120ae62d0ce8289965810aaa3795287769ee9ef12f9404d805694a8ac0cff
7
+ data.tar.gz: 31a5b4fcd6199dfc75ca3e89c7bddcc82533ca171f86954e50d4ff44716d73f1ad014f921a05e9eb2fd38a83c5e603eec1fbbf9530b4c01153f6780877388501
@@ -4,7 +4,28 @@ Reverse Chronological Order:
4
4
 
5
5
  ## `master`
6
6
 
7
- * Add your description here
7
+ ...
8
+
9
+ ## `0.14.0` (2020-05-11)
10
+
11
+ * Add MTPro provider
12
+ * Add Proxypedia provider
13
+
14
+ ## `0.13.0` (2020-03-09)
15
+
16
+ * Fix GatherProxy provider
17
+ * Fix XRoxy provider
18
+ * Allow ability to load proxies from files
19
+ * Fix Proxy object comparators
20
+
21
+ ## `0.12.0` (2020-01-28)
22
+
23
+ * Fix XRoxy provider
24
+ * Fix multi-threading issues with config and adapter
25
+
26
+ ## `0.11.0` (2019-10-24)
27
+
28
+ * Big gem refactoring
8
29
 
9
30
  ## `0.10.2` (2019-03-15)
10
31
 
data/Gemfile CHANGED
@@ -1,11 +1,14 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
2
4
 
3
5
  gemspec
4
6
 
5
- gem 'nokogiri', '~> 1.8'
6
- gem 'oga', '~> 2.0'
7
+ gem "nokogiri", "~> 1.8"
8
+ gem "oga", "~> 3.2"
9
+ gem "rubocop", "~> 0.80"
7
10
 
8
11
  group :test do
9
- gem 'coveralls', require: false
10
- gem 'evil-proxy', '~> 0.2'
12
+ gem "coveralls", require: false
13
+ gem "evil-proxy", "~> 0.2"
11
14
  end
data/Rakefile CHANGED
@@ -1,6 +1,10 @@
1
- require 'bundler/gem_tasks'
1
+ # frozen_string_literal: true
2
2
 
3
- require 'rspec/core/rake_task'
4
- RSpec::Core::RakeTask.new(:spec)
3
+ require "bundler/gem_tasks"
4
+
5
+ require "rspec/core/rake_task"
6
+ RSpec::Core::RakeTask.new(:spec) do |t|
7
+ t.rspec_opts = '--tag "~unreliable"'
8
+ end
5
9
 
6
10
  task default: :spec
@@ -1,11 +1,13 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
2
 
3
- gemspec path: '../'
3
+ source "https://rubygems.org"
4
4
 
5
- gem 'nokogiri', '~> 1.8'
5
+ gemspec path: "../"
6
+
7
+ gem "nokogiri", "~> 1.8"
6
8
 
7
9
  group :test do
8
- gem 'coveralls', require: false
9
- gem 'evil-proxy', '~> 0.2'
10
- gem 'rspec', '~> 3.6'
10
+ gem "coveralls", require: false
11
+ gem "evil-proxy", "~> 0.2"
12
+ gem "rspec", "~> 3.9"
11
13
  end
@@ -1,11 +1,13 @@
1
- source 'https://rubygems.org'
1
+ # frozen_string_literal: true
2
2
 
3
- gemspec path: '../'
3
+ source "https://rubygems.org"
4
4
 
5
- gem 'oga', '~> 2.0'
5
+ gemspec path: "../"
6
+
7
+ gem "oga", "~> 3.0"
6
8
 
7
9
  group :test do
8
- gem 'coveralls', require: false
9
- gem 'evil-proxy', '~> 0.2'
10
- gem 'rspec', '~> 3.6'
10
+ gem "coveralls", require: false
11
+ gem "evil-proxy", "~> 0.2"
12
+ gem "rspec", "~> 3.9"
11
13
  end
@@ -1,46 +1,55 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'uri'
4
- require 'http'
5
- require 'logger'
3
+ require "uri"
4
+ require "http"
5
+ require "logger"
6
6
 
7
- require File.dirname(__FILE__) + '/proxy_fetcher/version'
7
+ require File.dirname(__FILE__) + "/proxy_fetcher/version"
8
8
 
9
- require File.dirname(__FILE__) + '/proxy_fetcher/exceptions'
10
- require File.dirname(__FILE__) + '/proxy_fetcher/configuration'
11
- require File.dirname(__FILE__) + '/proxy_fetcher/configuration/providers_registry'
12
- require File.dirname(__FILE__) + '/proxy_fetcher/proxy'
13
- require File.dirname(__FILE__) + '/proxy_fetcher/manager'
14
- require File.dirname(__FILE__) + '/proxy_fetcher/null_logger'
9
+ require File.dirname(__FILE__) + "/proxy_fetcher/exceptions"
10
+ require File.dirname(__FILE__) + "/proxy_fetcher/configuration"
11
+ require File.dirname(__FILE__) + "/proxy_fetcher/configuration/providers_registry"
12
+ require File.dirname(__FILE__) + "/proxy_fetcher/proxy"
13
+ require File.dirname(__FILE__) + "/proxy_fetcher/manager"
14
+ require File.dirname(__FILE__) + "/proxy_fetcher/null_logger"
15
15
 
16
- require File.dirname(__FILE__) + '/proxy_fetcher/utils/http_client'
17
- require File.dirname(__FILE__) + '/proxy_fetcher/utils/proxy_validator'
18
- require File.dirname(__FILE__) + '/proxy_fetcher/utils/proxy_list_validator'
19
- require File.dirname(__FILE__) + '/proxy_fetcher/client/client'
20
- require File.dirname(__FILE__) + '/proxy_fetcher/client/request'
21
- require File.dirname(__FILE__) + '/proxy_fetcher/client/proxies_registry'
16
+ require File.dirname(__FILE__) + "/proxy_fetcher/utils/http_client"
17
+ require File.dirname(__FILE__) + "/proxy_fetcher/utils/proxy_validator"
18
+ require File.dirname(__FILE__) + "/proxy_fetcher/utils/proxy_list_validator"
19
+ require File.dirname(__FILE__) + "/proxy_fetcher/client/client"
20
+ require File.dirname(__FILE__) + "/proxy_fetcher/client/request"
21
+ require File.dirname(__FILE__) + "/proxy_fetcher/client/proxies_registry"
22
22
 
23
- require File.dirname(__FILE__) + '/proxy_fetcher/document'
24
- require File.dirname(__FILE__) + '/proxy_fetcher/document/adapters'
25
- require File.dirname(__FILE__) + '/proxy_fetcher/document/node'
26
- require File.dirname(__FILE__) + '/proxy_fetcher/document/adapters/abstract_adapter'
27
- require File.dirname(__FILE__) + '/proxy_fetcher/document/adapters/nokogiri_adapter'
28
- require File.dirname(__FILE__) + '/proxy_fetcher/document/adapters/oga_adapter'
23
+ require File.dirname(__FILE__) + "/proxy_fetcher/document"
24
+ require File.dirname(__FILE__) + "/proxy_fetcher/document/adapters"
25
+ require File.dirname(__FILE__) + "/proxy_fetcher/document/node"
26
+ require File.dirname(__FILE__) + "/proxy_fetcher/document/adapters/abstract_adapter"
27
+ require File.dirname(__FILE__) + "/proxy_fetcher/document/adapters/nokogiri_adapter"
28
+ require File.dirname(__FILE__) + "/proxy_fetcher/document/adapters/oga_adapter"
29
29
 
30
30
  ##
31
31
  # Ruby / JRuby lib for managing proxies
32
32
  module ProxyFetcher
33
33
  # ProxyFetcher providers namespace
34
34
  module Providers
35
- require File.dirname(__FILE__) + '/proxy_fetcher/providers/base'
36
- require File.dirname(__FILE__) + '/proxy_fetcher/providers/free_proxy_list'
37
- require File.dirname(__FILE__) + '/proxy_fetcher/providers/free_proxy_list_ssl'
38
- require File.dirname(__FILE__) + '/proxy_fetcher/providers/gather_proxy'
39
- require File.dirname(__FILE__) + '/proxy_fetcher/providers/http_tunnel'
40
- require File.dirname(__FILE__) + '/proxy_fetcher/providers/proxy_list'
41
- require File.dirname(__FILE__) + '/proxy_fetcher/providers/xroxy'
35
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/base"
36
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/free_proxy_list"
37
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/free_proxy_list_socks"
38
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/free_proxy_list_ssl"
39
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/free_proxy_list_us"
40
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/http_tunnel"
41
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/mtpro"
42
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/proxy_list"
43
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/proxypedia"
44
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/proxyscrape_http"
45
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/proxyscrape_socks4"
46
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/proxyscrape_socks5"
47
+ require File.dirname(__FILE__) + "/proxy_fetcher/providers/xroxy"
42
48
  end
43
49
 
50
+ @__config_access_lock__ = Mutex.new
51
+ @__config_definition_lock__ = Mutex.new
52
+
44
53
  # Main ProxyFetcher module.
45
54
  class << self
46
55
  ##
@@ -53,12 +62,14 @@ module ProxyFetcher
53
62
  # ProxyFetcher.config
54
63
  #
55
64
  # #=> #<ProxyFetcher::Configuration:0x0000000241eec8 @user_agent="Mozilla/5.0, ...", @pool_size=10,
56
- # @client_timeout=3, @proxy_validation_timeout=3, @provider_proxies_load_timeout=30,
57
- # @http_client=ProxyFetcher::HTTPClient, @proxy_validator=ProxyFetcher::ProxyValidator,
58
- # @providers=[:free_proxy_list, ...], @adapter=ProxyFetcher::Document::NokogiriAdapter>
65
+ # @client_timeout=3, @proxy_validation_timeout=3, @provider_proxies_load_timeout=30,
66
+ # @http_client=ProxyFetcher::HTTPClient, @proxy_validator=ProxyFetcher::ProxyValidator,
67
+ # @providers=[:free_proxy_list, ...], @adapter=ProxyFetcher::Document::NokogiriAdapter>
59
68
  #
60
69
  def config
61
- @config ||= ProxyFetcher::Configuration.new
70
+ @__config_definition_lock__.synchronize do
71
+ @config ||= ProxyFetcher::Configuration.new
72
+ end
62
73
  end
63
74
 
64
75
  ##
@@ -70,12 +81,12 @@ module ProxyFetcher
70
81
  # Configuration object.
71
82
  #
72
83
  def configure
73
- yield config
84
+ @__config_access_lock__.synchronize { yield config }
74
85
  end
75
86
 
76
87
  # Returns ProxyFetcher logger instance.
77
88
  #
78
- # @return [Logger, NullLogger] logger object
89
+ # @return [Logger, ProxyFetcher::NullLogger] logger object
79
90
  #
80
91
  def logger
81
92
  return @logger if defined?(@logger)
@@ -128,7 +128,11 @@ module ProxyFetcher
128
128
  #
129
129
  def request_with_payload(method, url, payload, headers, options)
130
130
  with_proxy_for(url, options.fetch(:max_retries, 1000)) do |proxy|
131
- opts = options.merge(payload: payload, proxy: options.fetch(:proxy, proxy), headers: default_headers.merge(headers))
131
+ opts = options.merge(
132
+ payload: payload,
133
+ proxy: options.fetch(:proxy, proxy),
134
+ headers: default_headers.merge(headers)
135
+ )
132
136
 
133
137
  Request.execute(url: url, method: method, **opts)
134
138
  end
@@ -138,7 +142,10 @@ module ProxyFetcher
138
142
  #
139
143
  def request_without_payload(method, url, headers, options)
140
144
  with_proxy_for(url, options.fetch(:max_retries, 1000)) do |proxy|
141
- opts = options.merge(proxy: options.fetch(:proxy, proxy), headers: default_headers.merge(headers))
145
+ opts = options.merge(
146
+ proxy: options.fetch(:proxy, proxy),
147
+ headers: default_headers.merge(headers)
148
+ )
142
149
 
143
150
  Request.execute(url: url, method: method, **opts)
144
151
  end
@@ -152,7 +159,7 @@ module ProxyFetcher
152
159
  #
153
160
  def default_headers
154
161
  {
155
- 'User-Agent' => ProxyFetcher.config.user_agent
162
+ "User-Agent" => ProxyFetcher.config.user_agent
156
163
  }
157
164
  end
158
165
 
@@ -50,7 +50,7 @@ module ProxyFetcher
50
50
  # @return [Request]
51
51
  #
52
52
  def initialize(args)
53
- raise ArgumentError, 'args must be a Hash!' unless args.is_a?(Hash)
53
+ raise ArgumentError, "args must be a Hash!" unless args.is_a?(Hash)
54
54
 
55
55
  @url = args.fetch(:url)
56
56
  @method = args.fetch(:method).to_s.downcase
@@ -86,9 +86,9 @@ module ProxyFetcher
86
86
  #
87
87
  def build_http_client
88
88
  HTTP.via(proxy.addr, proxy.port.to_i)
89
- .headers(headers)
90
- .timeout(connect: timeout, read: timeout)
91
- .follow(max_hops: max_redirects)
89
+ .headers(headers)
90
+ .timeout(connect: timeout, read: timeout)
91
+ .follow(max_hops: max_redirects)
92
92
  end
93
93
 
94
94
  # Default SSL options that will be used for connecting to resources
@@ -6,15 +6,20 @@ module ProxyFetcher
6
6
  #
7
7
  class Configuration
8
8
  # @!attribute client_timeout
9
- # @return [Integer] HTTP request timeout (connect / open) for [ProxyFetcher::Client]
9
+ # @return [Integer]
10
+ # HTTP request timeout (connect / open) for [ProxyFetcher::Client]
10
11
  attr_accessor :client_timeout
11
12
 
12
13
  # @!attribute provider_proxies_load_timeout
13
- # @return [Integer] HTTP request timeout (connect / open) for loading of proxies list by provider
14
+ # @return [Integer]
15
+ # HTTP request timeout (connect / open) for loading
16
+ # of proxies list by provider
14
17
  attr_accessor :provider_proxies_load_timeout
15
18
 
16
19
  # @!attribute proxy_validation_timeout
17
- # @return [Integer] HTTP request timeout (connect / open) for proxy validation with [ProxyFetcher::ProxyValidator]
20
+ # @return [Integer]
21
+ # HTTP request timeout (connect / open) for proxy
22
+ # validation with [ProxyFetcher::ProxyValidator]
18
23
  attr_accessor :proxy_validation_timeout
19
24
 
20
25
  # to save compatibility
@@ -30,16 +35,12 @@ module ProxyFetcher
30
35
  attr_accessor :user_agent
31
36
 
32
37
  # @!attribute [r] logger
33
- # @return [Object] Logger object
38
+ # @return [Logger] Logger object
34
39
  attr_accessor :logger
35
40
 
36
41
  # @!attribute [r] adapter
37
- # @return [Object] HTML parser adapter
38
- attr_accessor :adapter
39
-
40
- # @!attribute [r] adapter_class
41
- # @return [Object] HTML adapter class
42
- attr_reader :adapter_class
42
+ # @return [#to_s] HTML parser adapter
43
+ attr_reader :adapter
43
44
 
44
45
  # @!attribute [r] http_client
45
46
  # @return [Object] HTTP client class
@@ -50,7 +51,7 @@ module ProxyFetcher
50
51
  attr_reader :proxy_validator
51
52
 
52
53
  # @!attribute [r] providers
53
- # @return [Array<String>, Array<Symbol>] proxy providers list to be used
54
+ # @return [Array<String, Symbol>] proxy providers list to be used
54
55
  attr_reader :providers
55
56
 
56
57
  # User-Agent string that will be used by the ProxyFetcher HTTP client (to
@@ -58,8 +59,8 @@ module ProxyFetcher
58
59
  #
59
60
  # Default is Google Chrome 60, but can be changed in <code>ProxyFetcher.config</code>.
60
61
  #
61
- DEFAULT_USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 ' \
62
- '(KHTML, like Gecko) Chrome/60.0.3112 Safari/537.36'.freeze
62
+ DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 " \
63
+ "(KHTML, like Gecko) Chrome/60.0.3112 Safari/537.36"
63
64
 
64
65
  # HTML parser adapter name.
65
66
  #
@@ -67,6 +68,8 @@ module ProxyFetcher
67
68
  #
68
69
  DEFAULT_ADAPTER = :nokogiri
69
70
 
71
+ @__adapter_lock__ = Mutex.new
72
+
70
73
  class << self
71
74
  # Registry for handling proxy providers.
72
75
  #
@@ -92,7 +95,7 @@ module ProxyFetcher
92
95
 
93
96
  # Returns registered providers names.
94
97
  #
95
- # @return [Array<String>, Array<Symbol>]
98
+ # @return [Array<String, Symbol>]
96
99
  # registered providers names
97
100
  #
98
101
  def registered_providers
@@ -130,16 +133,18 @@ module ProxyFetcher
130
133
  end
131
134
 
132
135
  def adapter_class
133
- return @adapter_class if defined?(@adapter_class)
136
+ self.class.instance_variable_get(:@__adapter_lock__).synchronize do
137
+ return @adapter_class if defined?(@adapter_class)
134
138
 
135
- @adapter_class = ProxyFetcher::Document::Adapters.lookup(adapter)
136
- @adapter_class.setup!
137
- @adapter_class
139
+ @adapter_class = ProxyFetcher::Document::Adapters.lookup(adapter)
140
+ @adapter_class.setup!
141
+ @adapter_class
142
+ end
138
143
  end
139
144
 
140
145
  # Setups collection of providers that will be used to fetch proxies.
141
146
  #
142
- # @param value [String, Symbol, Array<String>, Array<Symbol>]
147
+ # @param value [String, Symbol, Array<String, Symbol>]
143
148
  # provider names
144
149
  #
145
150
  def providers=(value)
@@ -36,14 +36,5 @@ module ProxyFetcher
36
36
  def xpath(*args)
37
37
  backend.xpath(*args).map { |node| backend.proxy_node.new(node) }
38
38
  end
39
-
40
- # Searches elements by CSS selector.
41
- #
42
- # @return [Array<ProxyFetcher::Document::Node>]
43
- # collection of nodes
44
- #
45
- def css(*args)
46
- backend.css(*args).map { |node| backend.proxy_node.new(node) }
47
- end
48
39
  end
49
40
  end
@@ -13,7 +13,7 @@ module ProxyFetcher
13
13
  # <code>ProxyFetcher::Document::AbstractAdapter</code>.
14
14
  class Adapters
15
15
  # Adapters class name suffix
16
- ADAPTER = 'Adapter'.freeze
16
+ ADAPTER = "Adapter"
17
17
  private_constant :ADAPTER
18
18
 
19
19
  class << self
@@ -26,15 +26,6 @@ module ProxyFetcher
26
26
  document.xpath(selector)
27
27
  end
28
28
 
29
- # You can override this method in your own adapter class
30
- #
31
- # @param selector [String]
32
- # CSS selector
33
- #
34
- def css(selector)
35
- document.css(selector)
36
- end
37
-
38
29
  # Returns <code>Node</code> class that will handle HTML
39
30
  # nodes for particular adapter.
40
31
  #
@@ -42,7 +33,7 @@ module ProxyFetcher
42
33
  # node
43
34
  #
44
35
  def proxy_node
45
- self.class.const_get('Node')
36
+ self.class.const_get("Node")
46
37
  end
47
38
 
48
39
  # Installs adapter requirements.
@@ -53,8 +44,8 @@ module ProxyFetcher
53
44
  def self.setup!(*args)
54
45
  install_requirements!(*args)
55
46
  self
56
- rescue LoadError, StandardError => error
57
- raise Exceptions::AdapterSetupError.new(name, error.message)
47
+ rescue LoadError, StandardError => e
48
+ raise Exceptions::AdapterSetupError.new(name, e.message)
58
49
  end
59
50
  end
60
51
  end