ezclient 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2eed245dc5cd1ca59aeda6408ae0b96747aa91fce6ba9770d37cb4cd68bced3b
4
- data.tar.gz: 0b2503d2655fbbafa14ce64ce109aca3408fdb9fdaa92511d7627931eb5018b5
3
+ metadata.gz: c4f9418b8f7468e16261c321cf17ea9ee34e8c2168fda6b936a56b8c88db20ad
4
+ data.tar.gz: a82af3a1afcd6baa5cdc8e04521db679670b854631843fe3171714f3f4900488
5
5
  SHA512:
6
- metadata.gz: 819359caed5c59b4865ec5785b8369c7f851ef8b7a313e618b52ee45d9001bc8d1e02405df2b1d846e7038eb3c8945db4ad2b72b5c2b069c4d3149bcb1ea8aaf
7
- data.tar.gz: c4374e5f61f5b76aa49f1c6d03fdaa9836bb67d08157ab99a8948c3a616229a96e024378ca102eda7b3fa37888ece5cca7af34ce233561166b7e47f6fd460ab3
6
+ metadata.gz: b0c28a22832ce80a471d1fa16483fb0fcbab35550879e8132b6ee4849633489ce49cac1c03dc377ee0936033c9db9d144892644a598313e6d6a20efbf8eda5e4
7
+ data.tar.gz: 60fc3ff9026c5984d9548a9f420e65d7c3bd223efb29fd96daafbbcb3d725ac3ddd680d94d3121a60fe5b0a21c9ea8d08fa14128ca6883305e921a151360f270
@@ -3,7 +3,7 @@ inherit_gem:
3
3
 
4
4
  AllCops:
5
5
  DisplayCopNames: true
6
- TargetRubyVersion: 2.4
6
+ TargetRubyVersion: 2.5
7
7
  Include:
8
8
  - bin/console
9
9
  - Gemfile
@@ -1,16 +1,17 @@
1
1
  language: ruby
2
2
 
3
- sudo: false
3
+ os: linux
4
4
 
5
- rvm:
6
- - 2.4
7
- - 2.5
8
- - 2.6
9
- - ruby-head
5
+ dist: xenial
10
6
 
11
7
  before_install: gem install bundler
12
8
 
13
- matrix:
9
+ jobs:
14
10
  fast_finish: true
11
+ include:
12
+ - rvm: 2.5
13
+ - rvm: 2.6
14
+ - rvm: 2.7
15
+ - rvm: ruby-head
15
16
  allow_failures:
16
- - rvm: ruby-head
17
+ - rvm: ruby-head
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rspec' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("bundle", __dir__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if /This file was generated by Bundler/.match?(File.read(bundle_binstub, 300))
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rspec-core", "rspec")
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require "ezclient/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.required_ruby_version = ">= 2.4.0"
8
+ spec.required_ruby_version = ">= 2.5.0"
9
9
 
10
10
  spec.name = "ezclient"
11
11
  spec.version = EzClient::VERSION
@@ -1,15 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "http"
4
- require "ezclient/version"
5
- require "ezclient/client"
6
- require "ezclient/request"
7
- require "ezclient/response"
8
- require "ezclient/errors"
9
- require "ezclient/check_options"
4
+
5
+ require_relative "ezclient/version"
6
+ require_relative "ezclient/client"
7
+ require_relative "ezclient/persistent_client"
8
+ require_relative "ezclient/persistent_client_registry"
9
+ require_relative "ezclient/request"
10
+ require_relative "ezclient/response"
11
+ require_relative "ezclient/errors"
12
+ require_relative "ezclient/check_options"
10
13
 
11
14
  module EzClient
12
15
  def self.new(*args)
13
16
  Client.new(*args)
14
17
  end
18
+
19
+ def self.get_time
20
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
21
+ end
15
22
  end
@@ -19,7 +19,6 @@ class EzClient::Client
19
19
 
20
20
  def initialize(options = {})
21
21
  self.request_options = options
22
- self.clients = {}
23
22
  EzClient::CheckOptions.call(options, REQUEST_OPTION_KEYS)
24
23
  end
25
24
 
@@ -30,7 +29,7 @@ class EzClient::Client
30
29
  api_auth = options.delete(:api_auth)
31
30
 
32
31
  if keep_alive_timeout
33
- client = persistent_client_for(url, timeout: keep_alive_timeout)
32
+ client = persistent_client_registry.for(url, timeout: keep_alive_timeout)
34
33
  else
35
34
  client = HTTP::Client.new
36
35
  end
@@ -40,20 +39,19 @@ class EzClient::Client
40
39
  end
41
40
  end
42
41
 
43
- def perform(*args)
44
- request(*args).perform
42
+ def perform(*args, **kwargs)
43
+ request(*args, **kwargs).perform
45
44
  end
46
45
 
47
- def perform!(*args)
48
- request(*args).perform!
46
+ def perform!(*args, **kwargs)
47
+ request(*args, **kwargs).perform!
49
48
  end
50
49
 
51
50
  private
52
51
 
53
- attr_accessor :request_options, :clients
52
+ attr_accessor :request_options
54
53
 
55
- def persistent_client_for(url, timeout: 600)
56
- uri = HTTP::URI.parse(url)
57
- clients[uri.origin] ||= HTTP.persistent(uri.origin, timeout: timeout)
54
+ def persistent_client_registry
55
+ @persistent_client_registry ||= EzClient::PersistentClientRegistry.new
58
56
  end
59
57
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ class EzClient::PersistentClient
4
+ extend Forwardable
5
+
6
+ def_delegators :http_client, :build_request, :default_options, :timeout
7
+
8
+ attr_accessor :origin, :keep_alive_timeout, :last_request_at
9
+
10
+ def initialize(origin, keep_alive_timeout)
11
+ self.origin = origin
12
+ self.keep_alive_timeout = keep_alive_timeout
13
+ self.last_request_at = nil
14
+ end
15
+
16
+ def perform(*args)
17
+ http_client.perform(*args).tap do
18
+ self.last_request_at = EzClient.get_time
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def http_client
25
+ @http_client ||= HTTP.persistent(origin, timeout: keep_alive_timeout)
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ class EzClient::PersistentClientRegistry
4
+ def initialize
5
+ self.registry = {}
6
+ end
7
+
8
+ def for(url, timeout:)
9
+ cleanup_registry!
10
+ uri = HTTP::URI.parse(url)
11
+ registry[uri.origin] ||= EzClient::PersistentClient.new(uri.origin, timeout)
12
+ end
13
+
14
+ private
15
+
16
+ attr_accessor :registry
17
+
18
+ def cleanup_registry!
19
+ registry.delete_if do |_key, value|
20
+ EzClient.get_time - value.last_request_at >= value.keep_alive_timeout
21
+ end
22
+ end
23
+ end
@@ -103,7 +103,6 @@ class EzClient::Request
103
103
  def perform_request
104
104
  with_retry do
105
105
  # Use original client so that connection can be reused
106
- # client.perform(http_request, http_options)
107
106
  res = client.perform(http_request, http_options)
108
107
  return res unless follow
109
108
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module EzClient
4
- VERSION = "1.4.0"
4
+ VERSION = "1.5.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ezclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuri Smirnov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-28 00:00:00.000000000 Z
11
+ date: 2020-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -136,7 +136,7 @@ dependencies:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
- description:
139
+ description:
140
140
  email:
141
141
  - tycooon@yandex.ru
142
142
  - oss@umbrellio.biz
@@ -153,12 +153,15 @@ files:
153
153
  - README.md
154
154
  - Rakefile
155
155
  - bin/console
156
+ - bin/rspec
156
157
  - ezclient.gemspec
157
158
  - gemfiles/http3.gemfile
158
159
  - lib/ezclient.rb
159
160
  - lib/ezclient/check_options.rb
160
161
  - lib/ezclient/client.rb
161
162
  - lib/ezclient/errors.rb
163
+ - lib/ezclient/persistent_client.rb
164
+ - lib/ezclient/persistent_client_registry.rb
162
165
  - lib/ezclient/request.rb
163
166
  - lib/ezclient/response.rb
164
167
  - lib/ezclient/version.rb
@@ -166,7 +169,7 @@ homepage: https://github.com/umbrellio/ezclient
166
169
  licenses:
167
170
  - MIT
168
171
  metadata: {}
169
- post_install_message:
172
+ post_install_message:
170
173
  rdoc_options: []
171
174
  require_paths:
172
175
  - lib
@@ -174,15 +177,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
174
177
  requirements:
175
178
  - - ">="
176
179
  - !ruby/object:Gem::Version
177
- version: 2.4.0
180
+ version: 2.5.0
178
181
  required_rubygems_version: !ruby/object:Gem::Requirement
179
182
  requirements:
180
183
  - - ">="
181
184
  - !ruby/object:Gem::Version
182
185
  version: '0'
183
186
  requirements: []
184
- rubygems_version: 3.0.6
185
- signing_key:
187
+ rubygems_version: 3.1.2
188
+ signing_key:
186
189
  specification_version: 4
187
190
  summary: An HTTP gem wrapper for easy persistent connections and more.
188
191
  test_files: []