proxied 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,41 @@
1
+ module Proxied
2
+ class Configuration
3
+ attr_accessor :proxy_class
4
+ attr_accessor :minimum_successful_attempts, :maximum_failed_attempts
5
+ attr_accessor :faraday
6
+ attr_accessor :http_test, :socks_test
7
+ attr_accessor :logger
8
+
9
+ def initialize
10
+ self.proxy_class = nil # Must be set to the ActiveRecord or Mongoid model that will be used for managing proxies
11
+
12
+ self.minimum_successful_attempts = 1
13
+ self.maximum_failed_attempts = 10
14
+
15
+ self.faraday = {
16
+ adapter: :net_http,
17
+ 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",
18
+ verbose: true
19
+ }
20
+
21
+ self.http_test = {
22
+ url: "http://www.google.com/robots.txt",
23
+ timeout: 10,
24
+ }
25
+
26
+ self.socks_test = {
27
+ hostname: "whois.verisign-grs.com",
28
+ port: 43,
29
+ query: "=google.com",
30
+ timeout: 10
31
+ }
32
+
33
+ self.logger = defined?(Rails) ? -> (message) { Rails.logger.info(message) } : -> (message) { puts(message) }
34
+ end
35
+
36
+ def verbose_faraday?
37
+ self.faraday.fetch(:verbose, false)
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,12 @@
1
+ module Proxied
2
+ module Jobs
3
+ class CheckProxiesJob
4
+ include ::Sidekiq::Worker
5
+ sidekiq_options queue: :proxies
6
+
7
+ def perform(protocol = :all, proxy_type = :all, mode = :synchronous)
8
+ ::Proxied::Checker.new.check_proxies(protocol: protocol.to_sym, proxy_type: proxy_type.to_sym, mode: mode.to_sym)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ module Proxied
2
+ module Jobs
3
+ class CheckProxyJob
4
+ include ::Sidekiq::Worker
5
+ sidekiq_options queue: :proxies
6
+
7
+ def perform(proxy_id)
8
+ proxy_object = ::Proxy.where(id: proxy_id).first
9
+
10
+ if proxy_object
11
+ checker = ::Proxied::Checker.new
12
+ checker.check_proxy(proxy_object)
13
+ checker.update_proxies
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,9 @@
1
+ module Proxied
2
+ class Logger
3
+
4
+ def self.log(message)
5
+ ::Proxied.configuration.logger.call(message)
6
+ end
7
+
8
+ end
9
+ end
@@ -0,0 +1,60 @@
1
+ module Proxied
2
+ module Nosql
3
+
4
+ module ProxyMethods
5
+
6
+ def self.included(base)
7
+ base.send :extend ::Proxied::Shared::ClassMethods
8
+ base.send :extend, ClassMethods
9
+
10
+ base.send :include ::Proxied::Shared::InstanceMethods
11
+ end
12
+
13
+ module ClassMethods
14
+ def should_be_checked(protocol: :all, proxy_type: :all, date: Time.now, limit: 10, maximum_failed_attempts: 10)
15
+ proxies = get_proxies_for_protocol_and_proxy_type(protocol, proxy_type)
16
+
17
+ proxies = proxies.any_of(
18
+ {:last_checked_at.exists => false},
19
+ {:last_checked_at.ne => nil},
20
+ {:last_checked_at.exists => true, :last_checked_at.ne => nil, :last_checked_at.lt => date}
21
+ )
22
+
23
+ proxies = proxies.any_of(
24
+ {:failed_attempts.exists => false},
25
+ {:failed_attempts.in => ["", nil]},
26
+ {:failed_attempts.exists => true, :failed_attempts.nin => ["", nil], :failed_attempts.lte => maximum_failed_attempts}
27
+ )
28
+
29
+ proxies = proxies.order_by([[:valid_proxy, :asc], [:failed_attempts, :asc], [:last_checked_at, :asc]])
30
+ proxies = proxies.limit(limit)
31
+
32
+ return proxies
33
+ end
34
+
35
+ def get_valid_proxies(protocol: :all, proxy_type: :all, maximum_failed_attempts: nil, retries: 3)
36
+ proxies = get_proxies_for_protocol_and_proxy_type(protocol, proxy_type)
37
+ proxies = proxies.where(valid_proxy: true)
38
+ proxies = proxies.where(:failed_attempts.lte => maximum_failed_attempts) if maximum_failed_attempts
39
+ end
40
+
41
+ def get_random_proxy(protocol: :all, proxy_type: :all, maximum_failed_attempts: nil, retries: 3)
42
+ proxies = get_valid_proxies(protocol: protocol, proxy_type: proxy_type, maximum_failed_attempts: maximum_failed_attempts)
43
+ proxy = nil
44
+
45
+ begin
46
+ proxy = proxies.skip(rand(proxies.count)).first
47
+
48
+ rescue StandardError
49
+ retries -= 1
50
+ retry if retries > 0
51
+ end
52
+
53
+ return proxy
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,11 @@
1
+ require 'rails'
2
+
3
+ module Proxied
4
+ class Railtie < Rails::Railtie
5
+
6
+ rake_tasks do
7
+ Dir[File.join(File.dirname(__FILE__), '../tasks/*.rake')].each { |ext| load ext }
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,54 @@
1
+ module Proxied
2
+ module Shared
3
+
4
+ module ClassMethods
5
+ def get_proxies_for_protocol_and_proxy_type(protocol, proxy_type)
6
+ proxies = ::Proxy.where(nil)
7
+ proxies = proxies.where(protocol: protocol) if (protocol && !protocol.downcase.to_sym.eql?(:all))
8
+ proxies = proxies.where(proxy_type: proxy_type) if (proxy_type && !proxy_type.downcase.to_sym.eql?(:all))
9
+
10
+ return proxies
11
+ end
12
+
13
+ def format_proxy_address(proxy_host, proxy_port = 80, include_http = false)
14
+ proxy_address = "#{proxy_host}:#{proxy_port}"
15
+ proxy_address.insert(0, "http://") if (include_http && !proxy_address.start_with?("http://"))
16
+ return proxy_address
17
+ end
18
+
19
+ def format_proxy_credentials(username, password)
20
+ return "#{username}:#{password}"
21
+ end
22
+ end
23
+
24
+ module InstanceMethods
25
+ def proxy_address(include_http = false)
26
+ return self.class.format_proxy_address(self.host, self.port, include_http)
27
+ end
28
+
29
+ def proxy_credentials
30
+ return self.class.format_proxy_credentials(self.username, self.password)
31
+ end
32
+
33
+ def socks_proxy_credentials
34
+ credentials = {}
35
+
36
+ credentials[:user] = self.username if !self.username.to_s.empty?
37
+ credentials[:password] = self.password if !self.password.to_s.empty?
38
+
39
+ return credentials
40
+ end
41
+
42
+ def proxy_options_for_faraday
43
+ proxy_options = {}
44
+
45
+ proxy_options[:uri] = self.class.format_proxy_address(self.host, self.port, true)
46
+ proxy_options[:user] = self.username if !self.username.to_s.empty?
47
+ proxy_options[:password] = self.password if !self.password.to_s.empty?
48
+
49
+ return proxy_options
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,61 @@
1
+ module Proxied
2
+ module Sql
3
+
4
+ module ProxyMethods
5
+
6
+ def self.included(base)
7
+ base.send :extend ::Proxied::Shared::ClassMethods
8
+ base.send :extend, ClassMethods
9
+
10
+ base.send :include ::Proxied::Shared::InstanceMethods
11
+ end
12
+
13
+ module ClassMethods
14
+ def should_be_checked(protocol: :all, proxy_type: :all, date: Time.now, limit: 10, maximum_failed_attempts: 10)
15
+ proxies = get_proxies_for_protocol_and_proxy_type(protocol, proxy_type)
16
+ proxies = proxies.where(["(last_checked_at IS NULL OR last_checked_at < ?)", date])
17
+ proxies = proxies.where(["failed_attempts <= ?", maximum_failed_attempts])
18
+ proxies = proxies.order("valid_proxy ASC, failed_attempts ASC, last_checked_at ASC")
19
+ proxies = proxies.limit(limit)
20
+
21
+ return proxies
22
+ end
23
+
24
+ def get_valid_proxies(protocol: :all, proxy_type: :all, maximum_failed_attempts: nil)
25
+ proxies = get_proxies_for_protocol_and_proxy_type(protocol, proxy_type)
26
+ proxies = proxies.where(["valid_proxy = ? AND last_checked_at IS NOT NULL", true])
27
+ proxies = proxies.where(["failed_attempts <= ?", maximum_failed_attempts]) if maximum_failed_attempts
28
+
29
+ return proxies
30
+ end
31
+
32
+ def get_random_proxy(protocol: :all, proxy_type: :all, maximum_failed_attempts: nil)
33
+ proxies = get_valid_proxies(protocol: protocol, proxy_type: proxy_type, maximum_failed_attempts: maximum_failed_attempts)
34
+
35
+ order_clause = case ActiveRecord::Base.connection.class.name
36
+ when "ActiveRecord::ConnectionAdapters::MysqlAdapter", "ActiveRecord::ConnectionAdapters::Mysql2Adapter"
37
+ "RAND() DESC"
38
+ when "ActiveRecord::ConnectionAdapters::PostgreSQLAdapter"
39
+ "RANDOM() DESC"
40
+ when "ActiveRecord::ConnectionAdapters::SQLite3Adapter"
41
+ "RANDOM() DESC"
42
+ else
43
+ "RAND() DESC"
44
+ end
45
+
46
+ proxies = proxies.order(order_clause)
47
+
48
+ proxy = nil
49
+
50
+ uncached do
51
+ proxy = proxies.limit(1).first
52
+ end
53
+
54
+ return proxy
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,3 @@
1
+ module Proxied
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,13 @@
1
+ namespace :proxied do
2
+ task :check_proxies, [:protocol, :proxy_type, :mode, :maximum_failed_attempts] => :environment do |task, args|
3
+ args.with_defaults(protocol: :http, proxy_type: :public, mode: :synchronous, maximum_failed_attempts: 10)
4
+
5
+ checker = ::Proxied::Checker.new
6
+ checker.check_proxies(
7
+ protocol: args.protocol.to_sym,
8
+ proxy_type: args.proxy_type.to_sym,
9
+ mode: args.mode.to_sym,
10
+ maximum_failed_attempts: args.maximum_failed_attempts.to_i
11
+ )
12
+ end
13
+ end
data/proxied.gemspec ADDED
@@ -0,0 +1,47 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "proxied/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "proxied"
8
+ spec.version = Proxied::VERSION
9
+ spec.authors = ["Sebastian"]
10
+ spec.email = ["sebastian.johnsson@gmail.com"]
11
+
12
+ spec.summary = %q{Proxied is a proxy management gem for Ruby/Rails.}
13
+ spec.description = %q{Manage HTTP(S) and SOCKS proxies for Rails apps. Supports ActiveRecord and Mongoid as ORM.}
14
+ spec.homepage = "https://github.com/SebastianJ/proxied"
15
+ spec.license = "MIT"
16
+
17
+ # Specify which files should be added to the gem when it is released.
18
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ end
22
+ spec.bindir = "exe"
23
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.require_paths = ["lib"]
25
+
26
+ spec.add_dependency "faraday", "~> 0.15.2"
27
+ spec.add_dependency "net-ssh", "~> 5.0.2"
28
+
29
+ spec.add_development_dependency "bundler", "~> 1.16.2"
30
+ spec.add_development_dependency "rake", "~> 12.3.1"
31
+ spec.add_development_dependency "appraisal", "~> 2.2"
32
+
33
+ spec.add_development_dependency "virtus", "~> 1.0", ">= 1.0.5"
34
+
35
+ spec.add_development_dependency "rspec-rails", '~> 3.7', '>= 3.7.2'
36
+ spec.add_development_dependency "rspec-core", '~> 3.7', '>= 3.7.1'
37
+ spec.add_development_dependency "rspec-expectations", '~> 3.7'
38
+ spec.add_development_dependency "rspec-mocks", '~> 3.7'
39
+ spec.add_development_dependency "rspec-support", '~> 3.7', '>= 3.7.1'
40
+ spec.add_development_dependency "generator_spec", "~> 0.9.4"
41
+
42
+ spec.add_development_dependency "rdoc", "~> 6.0.4"
43
+ spec.add_development_dependency "vcr", "~> 4.0"
44
+ spec.add_development_dependency "webmock", "~> 3.4.2"
45
+
46
+ spec.add_development_dependency "pry", "~> 0.11.3"
47
+ end
metadata ADDED
@@ -0,0 +1,332 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: proxied
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sebastian
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-06-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.15.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.15.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: net-ssh
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 5.0.2
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 5.0.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.16.2
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.16.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 12.3.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 12.3.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: appraisal
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: virtus
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.0'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 1.0.5
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.0'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.0.5
103
+ - !ruby/object:Gem::Dependency
104
+ name: rspec-rails
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3.7'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 3.7.2
113
+ type: :development
114
+ prerelease: false
115
+ version_requirements: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '3.7'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 3.7.2
123
+ - !ruby/object:Gem::Dependency
124
+ name: rspec-core
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '3.7'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 3.7.1
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '3.7'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 3.7.1
143
+ - !ruby/object:Gem::Dependency
144
+ name: rspec-expectations
145
+ requirement: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '3.7'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - "~>"
155
+ - !ruby/object:Gem::Version
156
+ version: '3.7'
157
+ - !ruby/object:Gem::Dependency
158
+ name: rspec-mocks
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - "~>"
162
+ - !ruby/object:Gem::Version
163
+ version: '3.7'
164
+ type: :development
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '3.7'
171
+ - !ruby/object:Gem::Dependency
172
+ name: rspec-support
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - "~>"
176
+ - !ruby/object:Gem::Version
177
+ version: '3.7'
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: 3.7.1
181
+ type: :development
182
+ prerelease: false
183
+ version_requirements: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '3.7'
188
+ - - ">="
189
+ - !ruby/object:Gem::Version
190
+ version: 3.7.1
191
+ - !ruby/object:Gem::Dependency
192
+ name: generator_spec
193
+ requirement: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - "~>"
196
+ - !ruby/object:Gem::Version
197
+ version: 0.9.4
198
+ type: :development
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - "~>"
203
+ - !ruby/object:Gem::Version
204
+ version: 0.9.4
205
+ - !ruby/object:Gem::Dependency
206
+ name: rdoc
207
+ requirement: !ruby/object:Gem::Requirement
208
+ requirements:
209
+ - - "~>"
210
+ - !ruby/object:Gem::Version
211
+ version: 6.0.4
212
+ type: :development
213
+ prerelease: false
214
+ version_requirements: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - "~>"
217
+ - !ruby/object:Gem::Version
218
+ version: 6.0.4
219
+ - !ruby/object:Gem::Dependency
220
+ name: vcr
221
+ requirement: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - "~>"
224
+ - !ruby/object:Gem::Version
225
+ version: '4.0'
226
+ type: :development
227
+ prerelease: false
228
+ version_requirements: !ruby/object:Gem::Requirement
229
+ requirements:
230
+ - - "~>"
231
+ - !ruby/object:Gem::Version
232
+ version: '4.0'
233
+ - !ruby/object:Gem::Dependency
234
+ name: webmock
235
+ requirement: !ruby/object:Gem::Requirement
236
+ requirements:
237
+ - - "~>"
238
+ - !ruby/object:Gem::Version
239
+ version: 3.4.2
240
+ type: :development
241
+ prerelease: false
242
+ version_requirements: !ruby/object:Gem::Requirement
243
+ requirements:
244
+ - - "~>"
245
+ - !ruby/object:Gem::Version
246
+ version: 3.4.2
247
+ - !ruby/object:Gem::Dependency
248
+ name: pry
249
+ requirement: !ruby/object:Gem::Requirement
250
+ requirements:
251
+ - - "~>"
252
+ - !ruby/object:Gem::Version
253
+ version: 0.11.3
254
+ type: :development
255
+ prerelease: false
256
+ version_requirements: !ruby/object:Gem::Requirement
257
+ requirements:
258
+ - - "~>"
259
+ - !ruby/object:Gem::Version
260
+ version: 0.11.3
261
+ description: Manage HTTP(S) and SOCKS proxies for Rails apps. Supports ActiveRecord
262
+ and Mongoid as ORM.
263
+ email:
264
+ - sebastian.johnsson@gmail.com
265
+ executables: []
266
+ extensions: []
267
+ extra_rdoc_files: []
268
+ files:
269
+ - ".gitignore"
270
+ - ".rspec"
271
+ - ".ruby-gemset"
272
+ - ".ruby-version"
273
+ - ".travis.yml"
274
+ - Appraisals
275
+ - CODE_OF_CONDUCT.md
276
+ - Gemfile
277
+ - Gemfile.lock
278
+ - LICENSE.txt
279
+ - README.md
280
+ - Rakefile
281
+ - bin/console
282
+ - bin/setup
283
+ - gemfiles/.bundle/config
284
+ - gemfiles/activerecord5.gemfile
285
+ - gemfiles/mongoid7.gemfile
286
+ - lib/.DS_Store
287
+ - lib/generators/active_record/proxied_generator.rb
288
+ - lib/generators/active_record/templates/migration.rb
289
+ - lib/generators/mongoid/proxied_generator.rb
290
+ - lib/generators/proxied/install_generator.rb
291
+ - lib/generators/proxied/orm_helpers.rb
292
+ - lib/generators/proxied/proxied_generator.rb
293
+ - lib/generators/templates/proxied.rb
294
+ - lib/proxied.rb
295
+ - lib/proxied/.DS_Store
296
+ - lib/proxied/checker.rb
297
+ - lib/proxied/configuration.rb
298
+ - lib/proxied/jobs/check_proxies_job.rb
299
+ - lib/proxied/jobs/check_proxy_job.rb
300
+ - lib/proxied/logger.rb
301
+ - lib/proxied/nosql/proxy_methods.rb
302
+ - lib/proxied/railtie.rb
303
+ - lib/proxied/shared.rb
304
+ - lib/proxied/sql/proxy_methods.rb
305
+ - lib/proxied/version.rb
306
+ - lib/tasks/tasks.rake
307
+ - proxied.gemspec
308
+ homepage: https://github.com/SebastianJ/proxied
309
+ licenses:
310
+ - MIT
311
+ metadata: {}
312
+ post_install_message:
313
+ rdoc_options: []
314
+ require_paths:
315
+ - lib
316
+ required_ruby_version: !ruby/object:Gem::Requirement
317
+ requirements:
318
+ - - ">="
319
+ - !ruby/object:Gem::Version
320
+ version: '0'
321
+ required_rubygems_version: !ruby/object:Gem::Requirement
322
+ requirements:
323
+ - - ">="
324
+ - !ruby/object:Gem::Version
325
+ version: '0'
326
+ requirements: []
327
+ rubyforge_project:
328
+ rubygems_version: 2.7.7
329
+ signing_key:
330
+ specification_version: 4
331
+ summary: Proxied is a proxy management gem for Ruby/Rails.
332
+ test_files: []