proxied 0.2.6 → 0.2.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1efa52c524322a60a208bd12ebc9d8acdc5e9abeaa4f907cb77d4084ad5cd09c
4
- data.tar.gz: 16347e22feb2f9059bf52dc9806a7a40b1e2ab484f3bd5db4cbac8af830c3c45
3
+ metadata.gz: db12c4ace8bc64f321360c8e1a6157d07dbd7ee645b6736f38bd1b19e12ef952
4
+ data.tar.gz: a894a6f8b9ca8608bf1d09670fb3c41010f3fe2c4265645a6c7508564f4f31f1
5
5
  SHA512:
6
- metadata.gz: 7a53757a72afef8145b241569d2d2be729851a7a243321eb42bf991d2d1944ab260d8e8f6a3f360b06bf626ab36871c7ffd303ed161e3d263a1187d0f57bb344
7
- data.tar.gz: 26ebf333aa140ad846422482913834f52d2139bc8900900f8b5d2b66eee67443f3272adab13e2a7b97b9cfea908c6c83d5bfd6892cb5d8d8af8aabfbdd1946cb
6
+ metadata.gz: 4621888e60cfedd8dc04f923c57b2a0ed7cae70a642e9bfa9c2a3fcc23c209b03455fbe306e0f4c83ed1e04f82f8d49d46d49f3284563b64aa8a16b15a31663d
7
+ data.tar.gz: bcf9e6d50d2730c415a29a20d4bd27ef57e45bc4d814867715117e029cd667641bd7687baaef49627aaea0446781e5b49517532fcf1bebd5b58287bcc7dda8dd
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /spec/tmp/
9
+ /spec/fixtures/
9
10
  /spec/support/files/proxies.yml
10
11
  /tmp/
11
12
 
@@ -16,7 +17,7 @@
16
17
  .pry_history
17
18
 
18
19
  # appraisals
19
- /gemfiles/*.lock
20
+ /gemfiles/
20
21
 
21
22
  # RVM
22
23
  .ruby-version
data/Appraisals CHANGED
@@ -1,13 +1,20 @@
1
1
  appraise 'mongoid7' do
2
- gem "mongoid", "~> 7", require: "mongoid"
2
+ gem "mongoid", "~> 7.2", require: "mongoid"
3
3
  gem "bson_ext", platform: "ruby"
4
4
  end
5
5
 
6
6
  appraise 'activerecord5' do
7
7
  gem "activerecord", ">= 5.2", require: "active_record"
8
8
 
9
- # Ammeter dependencies:
10
9
  gem "actionpack", ">= 5.2"
11
10
  gem "activemodel", ">= 5.2"
12
11
  gem "railties", ">= 5.2"
13
12
  end
13
+
14
+ appraise 'activerecord6' do
15
+ gem "activerecord", ">= 6.1", require: "active_record"
16
+
17
+ gem "actionpack", ">= 6.1"
18
+ gem "activemodel", ">= 6.1"
19
+ gem "railties", ">= 6.1"
20
+ end
data/Gemfile CHANGED
@@ -5,4 +5,4 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
5
5
  # Specify your gem's dependencies in proxied.gemspec
6
6
  gemspec
7
7
 
8
- gem 'rails', '~> 6.0', '>= 6.0.3.2'
8
+ gem 'rails', '>= 6.0'
@@ -2,67 +2,71 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  proxied (0.2.6)
5
- faraday (~> 1.0, >= 1.0.1)
6
- net-ssh (~> 6.1)
5
+ faraday (>= 1.0)
6
+ net-ssh (>= 6.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actioncable (6.0.3.2)
12
- actionpack (= 6.0.3.2)
11
+ actioncable (6.1.0)
12
+ actionpack (= 6.1.0)
13
+ activesupport (= 6.1.0)
13
14
  nio4r (~> 2.0)
14
15
  websocket-driver (>= 0.6.1)
15
- actionmailbox (6.0.3.2)
16
- actionpack (= 6.0.3.2)
17
- activejob (= 6.0.3.2)
18
- activerecord (= 6.0.3.2)
19
- activestorage (= 6.0.3.2)
20
- activesupport (= 6.0.3.2)
16
+ actionmailbox (6.1.0)
17
+ actionpack (= 6.1.0)
18
+ activejob (= 6.1.0)
19
+ activerecord (= 6.1.0)
20
+ activestorage (= 6.1.0)
21
+ activesupport (= 6.1.0)
21
22
  mail (>= 2.7.1)
22
- actionmailer (6.0.3.2)
23
- actionpack (= 6.0.3.2)
24
- actionview (= 6.0.3.2)
25
- activejob (= 6.0.3.2)
23
+ actionmailer (6.1.0)
24
+ actionpack (= 6.1.0)
25
+ actionview (= 6.1.0)
26
+ activejob (= 6.1.0)
27
+ activesupport (= 6.1.0)
26
28
  mail (~> 2.5, >= 2.5.4)
27
29
  rails-dom-testing (~> 2.0)
28
- actionpack (6.0.3.2)
29
- actionview (= 6.0.3.2)
30
- activesupport (= 6.0.3.2)
31
- rack (~> 2.0, >= 2.0.8)
30
+ actionpack (6.1.0)
31
+ actionview (= 6.1.0)
32
+ activesupport (= 6.1.0)
33
+ rack (~> 2.0, >= 2.0.9)
32
34
  rack-test (>= 0.6.3)
33
35
  rails-dom-testing (~> 2.0)
34
36
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
35
- actiontext (6.0.3.2)
36
- actionpack (= 6.0.3.2)
37
- activerecord (= 6.0.3.2)
38
- activestorage (= 6.0.3.2)
39
- activesupport (= 6.0.3.2)
37
+ actiontext (6.1.0)
38
+ actionpack (= 6.1.0)
39
+ activerecord (= 6.1.0)
40
+ activestorage (= 6.1.0)
41
+ activesupport (= 6.1.0)
40
42
  nokogiri (>= 1.8.5)
41
- actionview (6.0.3.2)
42
- activesupport (= 6.0.3.2)
43
+ actionview (6.1.0)
44
+ activesupport (= 6.1.0)
43
45
  builder (~> 3.1)
44
46
  erubi (~> 1.4)
45
47
  rails-dom-testing (~> 2.0)
46
48
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
47
- activejob (6.0.3.2)
48
- activesupport (= 6.0.3.2)
49
+ activejob (6.1.0)
50
+ activesupport (= 6.1.0)
49
51
  globalid (>= 0.3.6)
50
- activemodel (6.0.3.2)
51
- activesupport (= 6.0.3.2)
52
- activerecord (6.0.3.2)
53
- activemodel (= 6.0.3.2)
54
- activesupport (= 6.0.3.2)
55
- activestorage (6.0.3.2)
56
- actionpack (= 6.0.3.2)
57
- activejob (= 6.0.3.2)
58
- activerecord (= 6.0.3.2)
52
+ activemodel (6.1.0)
53
+ activesupport (= 6.1.0)
54
+ activerecord (6.1.0)
55
+ activemodel (= 6.1.0)
56
+ activesupport (= 6.1.0)
57
+ activestorage (6.1.0)
58
+ actionpack (= 6.1.0)
59
+ activejob (= 6.1.0)
60
+ activerecord (= 6.1.0)
61
+ activesupport (= 6.1.0)
59
62
  marcel (~> 0.3.1)
60
- activesupport (6.0.3.2)
63
+ mimemagic (~> 0.3.2)
64
+ activesupport (6.1.0)
61
65
  concurrent-ruby (~> 1.0, >= 1.0.2)
62
- i18n (>= 0.7, < 2)
63
- minitest (~> 5.1)
64
- tzinfo (~> 1.1)
65
- zeitwerk (~> 2.2, >= 2.2.2)
66
+ i18n (>= 1.6, < 2)
67
+ minitest (>= 5.1)
68
+ tzinfo (~> 2.0)
69
+ zeitwerk (~> 2.3)
66
70
  addressable (2.7.0)
67
71
  public_suffix (>= 2.0.2, < 5.0)
68
72
  appraisal (2.3.0)
@@ -77,27 +81,28 @@ GEM
77
81
  coderay (1.1.3)
78
82
  coercible (1.0.0)
79
83
  descendants_tracker (~> 0.0.1)
80
- concurrent-ruby (1.1.6)
81
- crack (0.4.3)
82
- safe_yaml (~> 1.0.0)
84
+ concurrent-ruby (1.1.7)
85
+ crack (0.4.5)
86
+ rexml
83
87
  crass (1.0.6)
84
88
  descendants_tracker (0.0.4)
85
89
  thread_safe (~> 0.3, >= 0.3.1)
86
90
  diff-lcs (1.4.4)
87
91
  equalizer (0.0.11)
88
- erubi (1.9.0)
89
- faraday (1.0.1)
92
+ erubi (1.10.0)
93
+ faraday (1.2.0)
90
94
  multipart-post (>= 1.2, < 3)
95
+ ruby2_keywords
91
96
  generator_spec (0.9.4)
92
97
  activesupport (>= 3.0.0)
93
98
  railties (>= 3.0.0)
94
99
  globalid (0.4.2)
95
100
  activesupport (>= 4.2.0)
96
101
  hashdiff (1.0.1)
97
- i18n (1.8.3)
102
+ i18n (1.8.5)
98
103
  concurrent-ruby (~> 1.0)
99
104
  ice_nine (0.11.2)
100
- loofah (2.6.0)
105
+ loofah (2.8.0)
101
106
  crass (~> 1.0.2)
102
107
  nokogiri (>= 1.5.9)
103
108
  mail (2.7.1)
@@ -108,111 +113,112 @@ GEM
108
113
  mimemagic (0.3.5)
109
114
  mini_mime (1.0.2)
110
115
  mini_portile2 (2.4.0)
111
- minitest (5.14.1)
116
+ minitest (5.14.2)
112
117
  multipart-post (2.1.1)
113
118
  net-ssh (6.1.0)
114
- nio4r (2.5.2)
119
+ nio4r (2.5.4)
115
120
  nokogiri (1.10.10)
116
121
  mini_portile2 (~> 2.4.0)
117
122
  pry (0.13.1)
118
123
  coderay (~> 1.1)
119
124
  method_source (~> 1.0)
120
- public_suffix (4.0.5)
125
+ public_suffix (4.0.6)
121
126
  rack (2.2.3)
122
127
  rack-test (1.1.0)
123
128
  rack (>= 1.0, < 3)
124
- rails (6.0.3.2)
125
- actioncable (= 6.0.3.2)
126
- actionmailbox (= 6.0.3.2)
127
- actionmailer (= 6.0.3.2)
128
- actionpack (= 6.0.3.2)
129
- actiontext (= 6.0.3.2)
130
- actionview (= 6.0.3.2)
131
- activejob (= 6.0.3.2)
132
- activemodel (= 6.0.3.2)
133
- activerecord (= 6.0.3.2)
134
- activestorage (= 6.0.3.2)
135
- activesupport (= 6.0.3.2)
136
- bundler (>= 1.3.0)
137
- railties (= 6.0.3.2)
129
+ rails (6.1.0)
130
+ actioncable (= 6.1.0)
131
+ actionmailbox (= 6.1.0)
132
+ actionmailer (= 6.1.0)
133
+ actionpack (= 6.1.0)
134
+ actiontext (= 6.1.0)
135
+ actionview (= 6.1.0)
136
+ activejob (= 6.1.0)
137
+ activemodel (= 6.1.0)
138
+ activerecord (= 6.1.0)
139
+ activestorage (= 6.1.0)
140
+ activesupport (= 6.1.0)
141
+ bundler (>= 1.15.0)
142
+ railties (= 6.1.0)
138
143
  sprockets-rails (>= 2.0.0)
139
144
  rails-dom-testing (2.0.3)
140
145
  activesupport (>= 4.2.0)
141
146
  nokogiri (>= 1.6)
142
147
  rails-html-sanitizer (1.3.0)
143
148
  loofah (~> 2.3)
144
- railties (6.0.3.2)
145
- actionpack (= 6.0.3.2)
146
- activesupport (= 6.0.3.2)
149
+ railties (6.1.0)
150
+ actionpack (= 6.1.0)
151
+ activesupport (= 6.1.0)
147
152
  method_source
148
153
  rake (>= 0.8.7)
149
- thor (>= 0.20.3, < 2.0)
150
- rake (13.0.1)
151
- rdoc (6.2.1)
152
- rspec-core (3.9.2)
153
- rspec-support (~> 3.9.3)
154
- rspec-expectations (3.9.2)
154
+ thor (~> 1.0)
155
+ rake (13.0.3)
156
+ rdoc (6.3.0)
157
+ rexml (3.2.4)
158
+ rspec-core (3.10.0)
159
+ rspec-support (~> 3.10.0)
160
+ rspec-expectations (3.10.0)
155
161
  diff-lcs (>= 1.2.0, < 2.0)
156
- rspec-support (~> 3.9.0)
157
- rspec-mocks (3.9.1)
162
+ rspec-support (~> 3.10.0)
163
+ rspec-mocks (3.10.0)
158
164
  diff-lcs (>= 1.2.0, < 2.0)
159
- rspec-support (~> 3.9.0)
160
- rspec-rails (4.0.1)
165
+ rspec-support (~> 3.10.0)
166
+ rspec-rails (4.0.2)
161
167
  actionpack (>= 4.2)
162
168
  activesupport (>= 4.2)
163
169
  railties (>= 4.2)
164
- rspec-core (~> 3.9)
165
- rspec-expectations (~> 3.9)
166
- rspec-mocks (~> 3.9)
167
- rspec-support (~> 3.9)
168
- rspec-support (3.9.3)
169
- safe_yaml (1.0.5)
170
+ rspec-core (~> 3.10)
171
+ rspec-expectations (~> 3.10)
172
+ rspec-mocks (~> 3.10)
173
+ rspec-support (~> 3.10)
174
+ rspec-support (3.10.0)
175
+ ruby2_keywords (0.0.2)
170
176
  sprockets (4.0.2)
171
177
  concurrent-ruby (~> 1.0)
172
178
  rack (> 1, < 3)
173
- sprockets-rails (3.2.1)
179
+ sprockets-rails (3.2.2)
174
180
  actionpack (>= 4.0)
175
181
  activesupport (>= 4.0)
176
182
  sprockets (>= 3.0.0)
177
183
  thor (1.0.1)
178
184
  thread_safe (0.3.6)
179
- tzinfo (1.2.7)
180
- thread_safe (~> 0.1)
185
+ tzinfo (2.0.4)
186
+ concurrent-ruby (~> 1.0)
181
187
  vcr (6.0.0)
182
188
  virtus (1.0.5)
183
189
  axiom-types (~> 0.1)
184
190
  coercible (~> 1.0)
185
191
  descendants_tracker (~> 0.0, >= 0.0.3)
186
192
  equalizer (~> 0.0, >= 0.0.9)
187
- webmock (3.8.3)
193
+ webmock (3.11.0)
188
194
  addressable (>= 2.3.6)
189
195
  crack (>= 0.3.2)
190
196
  hashdiff (>= 0.4.0, < 2.0.0)
191
197
  websocket-driver (0.7.3)
192
198
  websocket-extensions (>= 0.1.0)
193
199
  websocket-extensions (0.1.5)
194
- zeitwerk (2.3.1)
200
+ zeitwerk (2.4.2)
195
201
 
196
202
  PLATFORMS
197
203
  ruby
198
204
 
199
205
  DEPENDENCIES
200
- appraisal (~> 2.3)
201
- bundler (~> 2.1, >= 2.1.4)
202
- generator_spec (~> 0.9.4)
206
+ appraisal (>= 2.3)
207
+ bundler (>= 2.0)
208
+ generator_spec (>= 0.9)
203
209
  proxied!
204
- pry (~> 0.13.1)
205
- rails (~> 6.0, >= 6.0.3.2)
206
- rake (~> 13.0, >= 13.0.1)
207
- rdoc (~> 6.2, >= 6.2.1)
208
- rspec-core (~> 3.9, >= 3.9.2)
209
- rspec-expectations (~> 3.9, >= 3.9.2)
210
- rspec-mocks (~> 3.9, >= 3.9.1)
211
- rspec-rails (~> 4.0, >= 4.0.1)
212
- rspec-support (~> 3.9, >= 3.9.3)
213
- vcr (~> 6.0)
214
- virtus (~> 1.0, >= 1.0.5)
215
- webmock (~> 3.8, >= 3.8.3)
210
+ pry (>= 0.13)
211
+ rails (>= 6.0)
212
+ rake (>= 13.0)
213
+ rdoc (>= 6.3)
214
+ rspec-core (>= 3.10)
215
+ rspec-expectations (>= 3.10)
216
+ rspec-mocks (>= 3.10)
217
+ rspec-rails (>= 4.0)
218
+ rspec-support (>= 3.10)
219
+ vcr (>= 6.0)
220
+ virtus (>= 1.0)
221
+ webmock (>= 3.11)
216
222
 
217
223
  BUNDLED WITH
218
224
  2.1.4
data/README.md CHANGED
@@ -62,16 +62,22 @@ Features:
62
62
 
63
63
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
64
64
 
65
+ ### Appraisals
66
+
67
+ Install appraisal dependencies (if not already done):
68
+ ```
69
+ bundle exec appraisal install
70
+ ```
71
+
65
72
  To test specific appraisals/gemfiles, you can do
66
73
 
67
- * ActiveRecord: bundle exec appraisal activerecord5 rake spec
74
+ * ActiveRecord: bundle exec appraisal activerecord6 rake spec
68
75
 
69
- In order to test specific specs: bundle exec appraisal activerecord5 rspec spec/lib/generators/activerecord_generator_spec.rb
76
+ In order to test specific specs: `bundle exec appraisal activerecord6 rspec spec/lib/generators/activerecord_generator_spec.rb`
70
77
 
71
78
  * Mongoid: bundle exec appraisal mongoid7 rake spec ADAPTER=mongoid
72
79
 
73
- In order to test specific specs: ADAPTER=mongoid bundle exec appraisal mongoid7 rspec spec/lib/generators/mongoid_generator_spec.rb
74
-
80
+ In order to test specific specs: `ADAPTER=mongoid bundle exec appraisal mongoid7 rspec spec/lib/generators/mongoid_generator_spec.rb`
75
81
 
76
82
  ## Contributing
77
83
 
@@ -8,7 +8,7 @@ require "proxied"
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
10
  require "pry"
11
- Pry.config.history.file = File.join(__FILE__, "../.pry_history")
11
+ Pry.config.history_file = File.join(__FILE__, "../.pry_history")
12
12
  Pry.start
13
13
 
14
14
  #require "irb"
@@ -16,7 +16,7 @@
16
16
  # The settings below are for configuring the proxy checker service
17
17
  config.faraday = {
18
18
  adapter: :net_http,
19
- user_agent: -> { "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.1 Safari/605.1.15" },
19
+ user_agent: -> { "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15" },
20
20
  verbose: false
21
21
  }
22
22
 
@@ -33,57 +33,79 @@ module Proxied
33
33
  ::Proxied::Jobs::CheckProxyJob.perform_async(proxy.id.to_s)
34
34
  end
35
35
  end
36
-
37
36
  else
38
37
  ::Proxied::Logger.log "Couldn't find any proxies to check!"
39
38
  end
40
39
  end
41
-
42
- def check_proxy(proxy, update: true)
40
+
41
+ def check_proxy(proxy, protocol: nil, update: true)
43
42
  ::Proxied::Logger.log "#{Time.now}: Will check if proxy #{proxy.proxy_address} is working."
43
+ protocol ||= proxy.protocol
44
44
 
45
- self.send("check_#{proxy.protocol}_proxy", proxy, update: update)
45
+ self.send("check_#{protocol}_proxy", proxy, update: update)
46
46
  end
47
-
48
- def check_socks_proxy(proxy, test_host: ::Proxied.configuration.socks_test[:hostname], test_port: ::Proxied.configuration.socks_test[:port], test_query: ::Proxied.configuration.socks_test[:query], timeout: ::Proxied.configuration.socks_test[:timeout], update: true)
47
+
48
+ def check_socks_proxy(
49
+ proxy,
50
+ test_host: ::Proxied.configuration.socks_test[:hostname],
51
+ test_port: ::Proxied.configuration.socks_test[:port],
52
+ test_query: ::Proxied.configuration.socks_test[:query],
53
+ timeout: ::Proxied.configuration.socks_test[:timeout],
54
+ update: true
55
+ )
49
56
  valid_proxy = false
50
57
 
51
58
  begin
52
59
  socks_proxy = ::Net::SSH::Proxy::SOCKS5.new(proxy.host, proxy.port, proxy.socks_proxy_credentials)
53
- client = socks_proxy.open(test_host, test_port, {timeout: timeout})
60
+ socket = socks_proxy.open(test_host, test_port, {timeout: timeout})
61
+
62
+ socket.write("#{test_query}\r\n")
63
+ response = socket.read
64
+ valid_proxy = !response.to_s.empty? && response.downcase.include?(test_query.gsub(/^=/, '').downcase)
65
+
66
+ socket.close
54
67
 
55
- client.write("#{test_query}\r\n")
56
- response = client.read
57
-
58
- valid_proxy = !response.to_s.empty?
59
-
60
- client.close
61
-
62
68
  rescue StandardError => e
63
69
  ::Proxied::Logger.log "Exception occured while trying to check proxy #{proxy.proxy_address}. Error Class: #{e.class}. Error Message: #{e.message}"
64
70
  valid_proxy = false
65
71
  end
66
-
72
+
67
73
  update_proxy(proxy, valid_proxy) if update
68
-
74
+
69
75
  return valid_proxy
70
76
  end
71
-
72
- def check_http_proxy(proxy, test_url: ::Proxied.configuration.http_test[:url], evaluate: ::Proxied.configuration.http_test[:evaluate], timeout: ::Proxied.configuration.http_test[:timeout], update: true)
73
- ::Proxied::Logger.log "#{Time.now}: Fetching #{::Proxied.configuration.http_test[:url]} with proxy #{proxy.proxy_address} (#{proxy.ip_address})."
77
+
78
+ def check_https_proxy(
79
+ proxy,
80
+ test_url: ::Proxied.configuration.http_test[:url],
81
+ evaluate: ::Proxied.configuration.http_test[:evaluate],
82
+ timeout: ::Proxied.configuration.http_test[:timeout],
83
+ update: true)
74
84
 
85
+ return check_http_proxy(proxy, test_url: test_url, evaluate: evaluate, timeout: timeout, update: update)
86
+ end
87
+
88
+ def check_http_proxy(
89
+ proxy,
90
+ test_url: ::Proxied.configuration.http_test[:url],
91
+ evaluate: ::Proxied.configuration.http_test[:evaluate],
92
+ timeout: ::Proxied.configuration.http_test[:timeout],
93
+ update: true)
94
+
95
+ ::Proxied::Logger.log "#{Time.now}: Fetching #{::Proxied.configuration.http_test[:url]} with proxy #{proxy.proxy_address} (#{proxy.ip_address})."
96
+
75
97
  response = request(test_url, proxy, options: {timeout: timeout})
76
98
  valid_proxy = evaluate.call(proxy, response)
77
99
 
78
100
  update_proxy(proxy, valid_proxy, response) if update
79
-
101
+
80
102
  return valid_proxy
81
103
  end
82
-
104
+
83
105
  def update_proxy(proxy, valid, response = nil)
84
106
  ::Proxied::Logger.info "#{Time.now}: Proxy #{proxy.proxy_address} (#{proxy.ip_address}) is #{valid ? "working" : "not working"}!"
85
107
  ::Proxied::Logger.debug "Response: #{response}" if !valid && response
86
-
108
+
87
109
  successful_attempts = proxy.successful_attempts || 0
88
110
  failed_attempts = proxy.failed_attempts || 0
89
111
 
@@ -94,30 +116,32 @@ module Proxied
94
116
  end
95
117
 
96
118
  is_valid = (successful_attempts >= self.minimum_successful_attempts && failed_attempts < self.maximum_failed_attempts)
97
-
119
+
98
120
  proxy.valid_proxy = is_valid
99
121
  proxy.successful_attempts = successful_attempts
100
122
  proxy.failed_attempts = failed_attempts
101
123
  proxy.last_checked_at = Time.now
102
124
  proxy.save
103
125
  end
104
-
126
+
105
127
  private
106
128
  def request(url, proxy, options: {})
107
129
  response = nil
108
130
 
109
131
  user_agent = options.fetch(:user_agent, ::Proxied.configuration.faraday.fetch(:user_agent, nil)&.call)
110
132
  timeout = options.fetch(:timeout, ::Proxied.configuration.http_test[:timeout])
111
-
133
+ auth_mode = proxy.respond_to?(:auth_mode) ? proxy.auth_mode : 'credentials'
134
+
112
135
  begin
113
136
  connection = ::Faraday.new(url: url) do |builder|
114
137
  builder.headers["User-Agent"] = user_agent if !user_agent.to_s.empty?
115
138
  builder.options[:timeout] = timeout if timeout
116
- builder.proxy = proxy.proxy_options_for_faraday
139
+ builder.proxy = proxy.proxy_options_for_faraday
140
+ #builder.basic_auth(proxy.username, proxy.password) if using_basic_auth?(auth_mode)
117
141
  builder.response :logger if ::Proxied.configuration.verbose_faraday?
118
142
  builder.adapter ::Proxied.configuration.faraday.fetch(:adapter, :net_http)
119
143
  end
120
-
144
+
121
145
  response = connection.get&.body
122
146
 
123
147
  rescue Faraday::TimeoutError, Faraday::Error => e
@@ -127,5 +151,13 @@ module Proxied
127
151
  return response
128
152
  end
129
153
 
154
+ def using_credentials?(mode)
155
+ mode.to_s.eql?('credentials')
156
+ end
157
+
158
+ def using_basic_auth?(mode)
159
+ mode.to_s.eql?('basic') || mode.to_s.eql?('basic_auth')
160
+ end
161
+
130
162
  end
131
163
  end
@@ -7,8 +7,6 @@ module Proxied
7
7
  attr_accessor :faraday
8
8
  attr_accessor :http_test, :socks_test
9
9
 
10
-
11
-
12
10
  def initialize
13
11
  # The ActiveRecord or Mongoid model that will be used for managing proxies - Must be set otherwise the gem won't work!
14
12
  self.proxy_class = nil
@@ -27,12 +25,12 @@ module Proxied
27
25
  # The settings below are for configuring the proxy checker service
28
26
  self.faraday = {
29
27
  adapter: :net_http,
30
- user_agent: -> { "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.1 Safari/605.1.15" },
28
+ user_agent: -> { "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15" },
31
29
  verbose: false
32
30
  }
33
31
 
34
32
  self.http_test = {
35
- url: "http://ipinfo.io/ip",
33
+ url: "https://ipinfo.io/ip",
36
34
  evaluate: -> (proxy, response) { !(response&.to_s&.strip&.downcase =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/i).nil? },
37
35
  timeout: 30,
38
36
  }
@@ -13,8 +13,8 @@ module Proxied
13
13
  end
14
14
 
15
15
  # Keep these for compatibility for now, they just wrap the utility functions
16
- def format_proxy_address(host, port = 80, include_http = false)
17
- ::Proxied::Utilities.format_proxy_address(host: host, port: port, include_http: include_http)
16
+ def format_proxy_address(host, port = 80, include_protocol = false)
17
+ ::Proxied::Utilities.format_proxy_address(host: host, port: port, include_protocol: include_protocol)
18
18
  end
19
19
 
20
20
  def format_proxy_credentials(username, password)
@@ -23,12 +23,12 @@ module Proxied
23
23
  end
24
24
 
25
25
  module InstanceMethods
26
- def proxy_address(include_http: false)
26
+ def proxy_address(include_protocol: false)
27
27
  case self.auth_mode.to_sym
28
28
  when :credentials
29
- ::Proxied::Utilities.format_proxy_address(host: self.host, port: self.port, include_http: include_http)
30
- when :basic_auth
31
- ::Proxied::Utilities.format_proxy_address(host: self.host, port: self.port, username: self.username, password: self.password, include_http: include_http)
29
+ ::Proxied::Utilities.format_proxy_address(host: self.host, port: self.port, protocol: self.protocol, include_protocol: include_protocol)
30
+ when :url
31
+ ::Proxied::Utilities.format_proxy_address(host: self.host, port: self.port, protocol: self.protocol, username: self.username, password: self.password, include_protocol: include_protocol)
32
32
  end
33
33
  end
34
34
 
@@ -41,7 +41,14 @@ module Proxied
41
41
  end
42
42
 
43
43
  def proxy_options_for_faraday
44
- ::Proxied::Utilities.proxy_options_for_faraday(host: self.host, port: self.port, username: self.username, password: self.password, auth_mode: self.auth_mode)
44
+ ::Proxied::Utilities.proxy_options_for_faraday(
45
+ host: self.host,
46
+ port: self.port,
47
+ protocol: self.protocol,
48
+ username: self.username,
49
+ password: self.password,
50
+ auth_mode: self.auth_mode
51
+ )
45
52
  end
46
53
 
47
54
  end
@@ -2,10 +2,11 @@ module Proxied
2
2
  class Utilities
3
3
  class << self
4
4
 
5
- def format_proxy_address(host:, port: 80, username: nil, password: nil, include_http: false)
5
+ def format_proxy_address(host:, port: 80, username: nil, password: nil, protocol: 'http', include_protocol: false)
6
+ protocol ||= 'http'
6
7
  address = "#{host.strip}:#{port}"
7
8
  address = "#{format_proxy_credentials(username, password)}@#{address}" if !username.to_s.empty? && !password.to_s.empty?
8
- address = (include_http && !address.start_with?("http://")) ? "http://#{address}" : address
9
+ address = include_protocol && address !~ /^http(s)?/i ? "#{protocol}://#{address}" : address
9
10
 
10
11
  return address
11
12
  end
@@ -27,14 +28,14 @@ module Proxied
27
28
  return credentials
28
29
  end
29
30
 
30
- def proxy_options_for_faraday(host:, port: 80, username: nil, password: nil, auth_mode: :credentials)
31
+ def proxy_options_for_faraday(host:, port: 80, username: nil, password: nil, auth_mode: :credentials, protocol: 'http')
31
32
  proxy_options = {}
32
33
  username = encode_credential(username)
33
34
  password = encode_credential(password)
34
35
 
35
- options = {host: host, port: port, include_http: true}
36
- options[:username] = username if !username.to_s.empty? && auth_mode&.to_sym&.eql?(:basic_auth)
37
- options[:password] = password if !password.to_s.empty? && auth_mode&.to_sym&.eql?(:basic_auth)
36
+ options = {host: host, port: port, protocol: protocol, include_protocol: true}
37
+ options[:username] = username if !username.to_s.empty? && auth_mode&.to_sym&.eql?(:url)
38
+ options[:password] = password if !password.to_s.empty? && auth_mode&.to_sym&.eql?(:url)
38
39
 
39
40
  proxy_options[:uri] = format_proxy_address(options)
40
41
  proxy_options[:user] = username if !username.to_s.empty? && auth_mode&.to_sym&.eql?(:credentials)
@@ -1,3 +1,3 @@
1
1
  module Proxied
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.7"
3
3
  end
@@ -23,25 +23,25 @@ Gem::Specification.new do |spec|
23
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
24
  spec.require_paths = ["lib"]
25
25
 
26
- spec.add_dependency 'faraday', '~> 1.0', '>= 1.0.1'
27
- spec.add_dependency 'net-ssh', '~> 6.1'
26
+ spec.add_dependency 'faraday', '>= 1.0'
27
+ spec.add_dependency 'net-ssh', '>= 6.0'
28
28
 
29
- spec.add_development_dependency 'bundler', '~> 2.1', '>= 2.1.4'
30
- spec.add_development_dependency 'rake', '~> 13.0', '>= 13.0.1'
31
- spec.add_development_dependency 'appraisal', '~> 2.3'
29
+ spec.add_development_dependency 'bundler', '>= 2.0'
30
+ spec.add_development_dependency 'rake', '>= 13.0'
31
+ spec.add_development_dependency 'appraisal', '>= 2.3'
32
32
 
33
- spec.add_development_dependency 'virtus', '~> 1.0', '>= 1.0.5'
33
+ spec.add_development_dependency 'virtus', '>= 1.0'
34
34
 
35
- spec.add_development_dependency 'rspec-rails', '~> 4.0', '>= 4.0.1'
36
- spec.add_development_dependency 'rspec-core', '~> 3.9', '>= 3.9.2'
37
- spec.add_development_dependency 'rspec-expectations', '~> 3.9', '>= 3.9.2'
38
- spec.add_development_dependency 'rspec-mocks', '~> 3.9', '>= 3.9.1'
39
- spec.add_development_dependency 'rspec-support', '~> 3.9', '>= 3.9.3'
40
- spec.add_development_dependency 'generator_spec', '~> 0.9.4'
35
+ spec.add_development_dependency 'rspec-rails', '>= 4.0'
36
+ spec.add_development_dependency 'rspec-core', '>= 3.10'
37
+ spec.add_development_dependency 'rspec-expectations', '>= 3.10'
38
+ spec.add_development_dependency 'rspec-mocks', '>= 3.10'
39
+ spec.add_development_dependency 'rspec-support', '>= 3.10'
40
+ spec.add_development_dependency 'generator_spec', '>= 0.9'
41
41
 
42
- spec.add_development_dependency 'rdoc', '~> 6.2', '>= 6.2.1'
43
- spec.add_development_dependency 'vcr', '~> 6.0'
44
- spec.add_development_dependency 'webmock', '~> 3.8', '>= 3.8.3'
42
+ spec.add_development_dependency 'rdoc', '>= 6.3'
43
+ spec.add_development_dependency 'vcr', '>= 6.0'
44
+ spec.add_development_dependency 'webmock', '>= 3.11'
45
45
 
46
- spec.add_development_dependency 'pry', '~> 0.13.1'
46
+ spec.add_development_dependency 'pry', '>= 0.13'
47
47
  end
metadata CHANGED
@@ -1,305 +1,239 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: proxied
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-12 00:00:00.000000000 Z
11
+ date: 2020-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
- version: 1.0.1
19
+ version: '1.0'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '1.0'
30
24
  - - ">="
31
25
  - !ruby/object:Gem::Version
32
- version: 1.0.1
26
+ version: '1.0'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: net-ssh
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
- - - "~>"
31
+ - - ">="
38
32
  - !ruby/object:Gem::Version
39
- version: '6.1'
33
+ version: '6.0'
40
34
  type: :runtime
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
- - - "~>"
38
+ - - ">="
45
39
  - !ruby/object:Gem::Version
46
- version: '6.1'
40
+ version: '6.0'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: bundler
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '2.1'
54
45
  - - ">="
55
46
  - !ruby/object:Gem::Version
56
- version: 2.1.4
47
+ version: '2.0'
57
48
  type: :development
58
49
  prerelease: false
59
50
  version_requirements: !ruby/object:Gem::Requirement
60
51
  requirements:
61
- - - "~>"
62
- - !ruby/object:Gem::Version
63
- version: '2.1'
64
52
  - - ">="
65
53
  - !ruby/object:Gem::Version
66
- version: 2.1.4
54
+ version: '2.0'
67
55
  - !ruby/object:Gem::Dependency
68
56
  name: rake
69
57
  requirement: !ruby/object:Gem::Requirement
70
58
  requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '13.0'
74
59
  - - ">="
75
60
  - !ruby/object:Gem::Version
76
- version: 13.0.1
61
+ version: '13.0'
77
62
  type: :development
78
63
  prerelease: false
79
64
  version_requirements: !ruby/object:Gem::Requirement
80
65
  requirements:
81
- - - "~>"
82
- - !ruby/object:Gem::Version
83
- version: '13.0'
84
66
  - - ">="
85
67
  - !ruby/object:Gem::Version
86
- version: 13.0.1
68
+ version: '13.0'
87
69
  - !ruby/object:Gem::Dependency
88
70
  name: appraisal
89
71
  requirement: !ruby/object:Gem::Requirement
90
72
  requirements:
91
- - - "~>"
73
+ - - ">="
92
74
  - !ruby/object:Gem::Version
93
75
  version: '2.3'
94
76
  type: :development
95
77
  prerelease: false
96
78
  version_requirements: !ruby/object:Gem::Requirement
97
79
  requirements:
98
- - - "~>"
80
+ - - ">="
99
81
  - !ruby/object:Gem::Version
100
82
  version: '2.3'
101
83
  - !ruby/object:Gem::Dependency
102
84
  name: virtus
103
85
  requirement: !ruby/object:Gem::Requirement
104
86
  requirements:
105
- - - "~>"
106
- - !ruby/object:Gem::Version
107
- version: '1.0'
108
87
  - - ">="
109
88
  - !ruby/object:Gem::Version
110
- version: 1.0.5
89
+ version: '1.0'
111
90
  type: :development
112
91
  prerelease: false
113
92
  version_requirements: !ruby/object:Gem::Requirement
114
93
  requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '1.0'
118
94
  - - ">="
119
95
  - !ruby/object:Gem::Version
120
- version: 1.0.5
96
+ version: '1.0'
121
97
  - !ruby/object:Gem::Dependency
122
98
  name: rspec-rails
123
99
  requirement: !ruby/object:Gem::Requirement
124
100
  requirements:
125
- - - "~>"
126
- - !ruby/object:Gem::Version
127
- version: '4.0'
128
101
  - - ">="
129
102
  - !ruby/object:Gem::Version
130
- version: 4.0.1
103
+ version: '4.0'
131
104
  type: :development
132
105
  prerelease: false
133
106
  version_requirements: !ruby/object:Gem::Requirement
134
107
  requirements:
135
- - - "~>"
136
- - !ruby/object:Gem::Version
137
- version: '4.0'
138
108
  - - ">="
139
109
  - !ruby/object:Gem::Version
140
- version: 4.0.1
110
+ version: '4.0'
141
111
  - !ruby/object:Gem::Dependency
142
112
  name: rspec-core
143
113
  requirement: !ruby/object:Gem::Requirement
144
114
  requirements:
145
- - - "~>"
146
- - !ruby/object:Gem::Version
147
- version: '3.9'
148
115
  - - ">="
149
116
  - !ruby/object:Gem::Version
150
- version: 3.9.2
117
+ version: '3.10'
151
118
  type: :development
152
119
  prerelease: false
153
120
  version_requirements: !ruby/object:Gem::Requirement
154
121
  requirements:
155
- - - "~>"
156
- - !ruby/object:Gem::Version
157
- version: '3.9'
158
122
  - - ">="
159
123
  - !ruby/object:Gem::Version
160
- version: 3.9.2
124
+ version: '3.10'
161
125
  - !ruby/object:Gem::Dependency
162
126
  name: rspec-expectations
163
127
  requirement: !ruby/object:Gem::Requirement
164
128
  requirements:
165
- - - "~>"
166
- - !ruby/object:Gem::Version
167
- version: '3.9'
168
129
  - - ">="
169
130
  - !ruby/object:Gem::Version
170
- version: 3.9.2
131
+ version: '3.10'
171
132
  type: :development
172
133
  prerelease: false
173
134
  version_requirements: !ruby/object:Gem::Requirement
174
135
  requirements:
175
- - - "~>"
176
- - !ruby/object:Gem::Version
177
- version: '3.9'
178
136
  - - ">="
179
137
  - !ruby/object:Gem::Version
180
- version: 3.9.2
138
+ version: '3.10'
181
139
  - !ruby/object:Gem::Dependency
182
140
  name: rspec-mocks
183
141
  requirement: !ruby/object:Gem::Requirement
184
142
  requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: '3.9'
188
143
  - - ">="
189
144
  - !ruby/object:Gem::Version
190
- version: 3.9.1
145
+ version: '3.10'
191
146
  type: :development
192
147
  prerelease: false
193
148
  version_requirements: !ruby/object:Gem::Requirement
194
149
  requirements:
195
- - - "~>"
196
- - !ruby/object:Gem::Version
197
- version: '3.9'
198
150
  - - ">="
199
151
  - !ruby/object:Gem::Version
200
- version: 3.9.1
152
+ version: '3.10'
201
153
  - !ruby/object:Gem::Dependency
202
154
  name: rspec-support
203
155
  requirement: !ruby/object:Gem::Requirement
204
156
  requirements:
205
- - - "~>"
206
- - !ruby/object:Gem::Version
207
- version: '3.9'
208
157
  - - ">="
209
158
  - !ruby/object:Gem::Version
210
- version: 3.9.3
159
+ version: '3.10'
211
160
  type: :development
212
161
  prerelease: false
213
162
  version_requirements: !ruby/object:Gem::Requirement
214
163
  requirements:
215
- - - "~>"
216
- - !ruby/object:Gem::Version
217
- version: '3.9'
218
164
  - - ">="
219
165
  - !ruby/object:Gem::Version
220
- version: 3.9.3
166
+ version: '3.10'
221
167
  - !ruby/object:Gem::Dependency
222
168
  name: generator_spec
223
169
  requirement: !ruby/object:Gem::Requirement
224
170
  requirements:
225
- - - "~>"
171
+ - - ">="
226
172
  - !ruby/object:Gem::Version
227
- version: 0.9.4
173
+ version: '0.9'
228
174
  type: :development
229
175
  prerelease: false
230
176
  version_requirements: !ruby/object:Gem::Requirement
231
177
  requirements:
232
- - - "~>"
178
+ - - ">="
233
179
  - !ruby/object:Gem::Version
234
- version: 0.9.4
180
+ version: '0.9'
235
181
  - !ruby/object:Gem::Dependency
236
182
  name: rdoc
237
183
  requirement: !ruby/object:Gem::Requirement
238
184
  requirements:
239
- - - "~>"
240
- - !ruby/object:Gem::Version
241
- version: '6.2'
242
185
  - - ">="
243
186
  - !ruby/object:Gem::Version
244
- version: 6.2.1
187
+ version: '6.3'
245
188
  type: :development
246
189
  prerelease: false
247
190
  version_requirements: !ruby/object:Gem::Requirement
248
191
  requirements:
249
- - - "~>"
250
- - !ruby/object:Gem::Version
251
- version: '6.2'
252
192
  - - ">="
253
193
  - !ruby/object:Gem::Version
254
- version: 6.2.1
194
+ version: '6.3'
255
195
  - !ruby/object:Gem::Dependency
256
196
  name: vcr
257
197
  requirement: !ruby/object:Gem::Requirement
258
198
  requirements:
259
- - - "~>"
199
+ - - ">="
260
200
  - !ruby/object:Gem::Version
261
201
  version: '6.0'
262
202
  type: :development
263
203
  prerelease: false
264
204
  version_requirements: !ruby/object:Gem::Requirement
265
205
  requirements:
266
- - - "~>"
206
+ - - ">="
267
207
  - !ruby/object:Gem::Version
268
208
  version: '6.0'
269
209
  - !ruby/object:Gem::Dependency
270
210
  name: webmock
271
211
  requirement: !ruby/object:Gem::Requirement
272
212
  requirements:
273
- - - "~>"
274
- - !ruby/object:Gem::Version
275
- version: '3.8'
276
213
  - - ">="
277
214
  - !ruby/object:Gem::Version
278
- version: 3.8.3
215
+ version: '3.11'
279
216
  type: :development
280
217
  prerelease: false
281
218
  version_requirements: !ruby/object:Gem::Requirement
282
219
  requirements:
283
- - - "~>"
284
- - !ruby/object:Gem::Version
285
- version: '3.8'
286
220
  - - ">="
287
221
  - !ruby/object:Gem::Version
288
- version: 3.8.3
222
+ version: '3.11'
289
223
  - !ruby/object:Gem::Dependency
290
224
  name: pry
291
225
  requirement: !ruby/object:Gem::Requirement
292
226
  requirements:
293
- - - "~>"
227
+ - - ">="
294
228
  - !ruby/object:Gem::Version
295
- version: 0.13.1
229
+ version: '0.13'
296
230
  type: :development
297
231
  prerelease: false
298
232
  version_requirements: !ruby/object:Gem::Requirement
299
233
  requirements:
300
- - - "~>"
234
+ - - ">="
301
235
  - !ruby/object:Gem::Version
302
- version: 0.13.1
236
+ version: '0.13'
303
237
  description: Manage HTTP(S) and SOCKS proxies for Rails apps. Supports ActiveRecord
304
238
  and Mongoid as ORM.
305
239
  email:
@@ -320,9 +254,6 @@ files:
320
254
  - Rakefile
321
255
  - bin/console
322
256
  - bin/setup
323
- - gemfiles/.bundle/config
324
- - gemfiles/activerecord5.gemfile
325
- - gemfiles/mongoid7.gemfile
326
257
  - lib/generators/active_record/proxied_generator.rb
327
258
  - lib/generators/active_record/templates/migration.rb
328
259
  - lib/generators/mongoid/proxied_generator.rb
@@ -364,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
364
295
  - !ruby/object:Gem::Version
365
296
  version: '0'
366
297
  requirements: []
367
- rubygems_version: 3.1.2
298
+ rubygems_version: 3.1.4
368
299
  signing_key:
369
300
  specification_version: 4
370
301
  summary: Proxied is a proxy management gem for Ruby/Rails.
@@ -1,2 +0,0 @@
1
- ---
2
- BUNDLE_RETRY: "1"
@@ -1,11 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails", "~> 5.2"
6
- gem "activerecord", ">= 5.2", require: "active_record"
7
- gem "actionpack", ">= 5.2"
8
- gem "activemodel", ">= 5.2"
9
- gem "railties", ">= 5.2"
10
-
11
- gemspec path: "../"
@@ -1,9 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "rails", "~> 5.2"
6
- gem "mongoid", "~> 7", require: "mongoid"
7
- gem "bson_ext", platform: "ruby"
8
-
9
- gemspec path: "../"