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
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