proxied 0.2.6 → 0.2.7

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.
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: "../"