api_client_base 1.10.0 → 1.11.0

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: d0d7688c1ef8b38a3f6dabd86884a22d199f06793b66ac821e83560bfb3c9a52
4
- data.tar.gz: 3ff78a2323c040fbac2c5b59963910c291273c1d096074b36af32333d943a616
3
+ metadata.gz: e748c8549dc84cfd16776fe9a92be6aafb043328916a80d88c5dbfd08e7b75d2
4
+ data.tar.gz: 145246c9dac0f31dace95aa41cf2b0183e706cfe112ba05831b7673f8ab8bd2e
5
5
  SHA512:
6
- metadata.gz: 32eefbc1cf3d275bf534fc68611baa123ef809da3d7fd90af4116beb4912e9fb1f57aaca902a41ef0509a82f27676d38f16f2ec2cd08b568efbf76ddbf0345a3
7
- data.tar.gz: c1eb95b14c639e6a29e23eb8a779a522fa6f7462239b2e35e0893de7d6d85a292665258715b73d3aebd2418abcf1f8222db38cd857399e6e42bf1723f07da7c7
6
+ metadata.gz: 418ac87d1b08d87a1f2931a977f88c7da8f4a2ddbe49d0d7d3933be3fc73a2f598358aa8eae468023b50ff677319f044efbf303dc0d246d4d6e6131affcedbcf
7
+ data.tar.gz: 3351c32d99bed922cb89e388ad815976819a09cf46bf8e995fd9fdfb0df1600fe5c88e13500401dca83c7c7d3203dbd224ec9a9d02287b2cb950386a4aec10cc
data/CHANGELOG.md CHANGED
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/)
5
5
  and this project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
+ ## [1.11.0] - 2021-11-26
8
+ ### Added
9
+ - `after_response` hook
10
+ - Add `#headers` and `#header(key)` methods to response for easy access to the headers
11
+
7
12
  ## [1.10.0] - 2021-06-15
8
13
  ### Added
9
14
  - `dry-validation` 1.x support (0.x support has not been dropped)
data/README.md CHANGED
@@ -42,6 +42,8 @@ MyGem.configure do |c|
42
42
  end
43
43
  ```
44
44
 
45
+ Note: there is a default configuration setting called `after_response`. See the "Response hooks" section for more details.
46
+
45
47
  - instantiate `MyGem::Client` by calling `MyGem.new(host: "https://api.com", username: "user", password: "password")`. If you do not specify an option, it will use the gem's default.
46
48
 
47
49
  ### Configuring the `Client`
@@ -240,7 +242,36 @@ module MyGem
240
242
  end
241
243
  ```
242
244
 
243
- You can an example gem at https://github.com/imacchiato/bridge_client-ruby.
245
+ You can an example gem [here](https://github.com/bloom-solutions/binance_client-ruby).
246
+
247
+ #### Response hooks
248
+
249
+ If you want to give the applications access to the request and response objects after each response (useful when tracking rate limits that are reported in the response, for example), then:
250
+
251
+ ```ruby
252
+ MyGem.configure do |c|
253
+ c.after_request = ->(request, response) do
254
+ if response.header("remaining-requets") < 20
255
+ Rails.logger.warn "mayday!"
256
+ end
257
+ end
258
+ end
259
+ ```
260
+
261
+ Note: the request and response objects are the request and response instances such as:
262
+ - `GetUserResponse`
263
+ - `GetUserRequest`
264
+
265
+ You can assign any object that response to `call`:
266
+
267
+ ```ruby
268
+ class AfterMyGemResponse
269
+ def self.call(request, response)
270
+ end
271
+ end
272
+ ```
273
+
274
+ Note: avoid putting long running/expensive requests here because this will block the Ruby process.
244
275
 
245
276
  ## Development
246
277
 
@@ -250,7 +281,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
250
281
 
251
282
  ## Contributing
252
283
 
253
- Bug reports and pull requests are welcome on GitHub at https://github.com/imacchiato/api_client-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
284
+ Bug reports and pull requests are welcome on GitHub at https://github.com/bloom-solutions/api_client-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
254
285
 
255
286
  ## License
256
287
 
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = %q{Abstractions to help author API wrappers in Ruby.}
13
13
  spec.description = %q{Abstractions to help author API wrappers in Ruby.}
14
- spec.homepage = "https://github.com/imacchiato/api_client-ruby"
14
+ spec.homepage = "https://github.com/bloom-solutions/api_client-ruby"
15
15
  spec.license = "MIT"
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
@@ -21,6 +21,10 @@ module APIClientBase
21
21
 
22
22
  included do
23
23
  include GemConfig::Base
24
+
25
+ with_configuration do
26
+ has :after_response
27
+ end
24
28
  end
25
29
 
26
30
  end
@@ -10,7 +10,7 @@ module APIClientBase
10
10
  private
11
11
 
12
12
  def self.inherit_attributes!(klass)
13
- parent_module = klass.name.deconstantize.constantize
13
+ parent_module = _api_client_parent_module(klass)
14
14
  return unless parent_module.respond_to?(:configuration)
15
15
  parent_module.configuration.rules.each do |rule|
16
16
  self.inherit_attribute!(klass, rule)
@@ -21,6 +21,10 @@ module APIClientBase
21
21
  klass.attribute rule[0]
22
22
  end
23
23
 
24
+ def self._api_client_parent_module(klass)
25
+ klass.name.deconstantize.constantize
26
+ end
27
+
24
28
  end
25
29
  end
26
30
  end
@@ -28,7 +28,11 @@ module APIClientBase
28
28
 
29
29
  request = request_class.new(request_args)
30
30
  raw_response = request.()
31
- response_class.new(raw_response: raw_response)
31
+ response = response_class.new(raw_response: raw_response)
32
+
33
+ _api_client_call_hook_with request, response
34
+
35
+ response
32
36
  end
33
37
  end
34
38
 
@@ -22,6 +22,24 @@ module APIClientBase
22
22
  included do
23
23
  include APIClientBase::Client::Attributes
24
24
  extend APIClientBase::Client::ClassMethods
25
+
26
+ private
27
+
28
+ def _api_client_call_hook_with(request, response)
29
+ hook = _api_client_after_response
30
+ return if hook.nil?
31
+
32
+ hook.(request, response)
33
+ end
34
+
35
+ def _api_client_gem_module
36
+ @_api_client_gem_module ||= self.class.name.deconstantize.constantize
37
+ end
38
+
39
+ def _api_client_after_response
40
+ return nil if not _api_client_gem_module.respond_to?(:configuration)
41
+ _api_client_gem_module.configuration.after_response
42
+ end
25
43
  end
26
44
 
27
45
  end
@@ -26,6 +26,7 @@ module APIClientBase
26
26
  attribute :success, self::Boolean, lazy: true, default: :default_success
27
27
  attribute :code, Integer, lazy: true, default: :default_code
28
28
  attribute :body, String, lazy: true, default: :default_body
29
+ attribute :headers, Hash, lazy: true, default: :default_headers
29
30
  end
30
31
 
31
32
  def default_success
@@ -40,5 +41,13 @@ module APIClientBase
40
41
  raw_response.body
41
42
  end
42
43
 
44
+ def default_headers
45
+ (raw_response.headers || {}).transform_keys {|key| key.upcase }
46
+ end
47
+
48
+ def header(key)
49
+ headers[key.upcase]
50
+ end
51
+
43
52
  end
44
53
  end
@@ -1,3 +1,3 @@
1
1
  module APIClientBase
2
- VERSION = "1.10.0"
2
+ VERSION = "1.11.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_client_base
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.10.0
4
+ version: 1.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ramon Tayag
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-15 00:00:00.000000000 Z
11
+ date: 2021-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -200,7 +200,7 @@ files:
200
200
  - lib/api_client_base/services/build_typhoeus_options.rb
201
201
  - lib/api_client_base/services/validate.rb
202
202
  - lib/api_client_base/version.rb
203
- homepage: https://github.com/imacchiato/api_client-ruby
203
+ homepage: https://github.com/bloom-solutions/api_client-ruby
204
204
  licenses:
205
205
  - MIT
206
206
  metadata: