nxt_http_client 0.2.9 → 0.3.4

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: d0f3125c7163d56e5656ded82aeb30d4d52982f6a4f7cccfdc0fab3c43114af3
4
- data.tar.gz: 4a818011bbf91ad2a9240b8f16bf0224c6b009b8147e5430972762ac0a9bd964
3
+ metadata.gz: 89185b814fea114ee2d74dd8e05afd3cf4773cdef8fb908cdf5e954775b4e885
4
+ data.tar.gz: 2d940e5c42051c09ca776d57901535a7a3d18bf8facb116b742f04a46b91e2ae
5
5
  SHA512:
6
- metadata.gz: 145ccc07ab888597f7dca77c568cab3117580d97bd47bd343119a0b89d302e5c8263fe4513544595f48cf0944648d7dc2a8e51933cb62a8a720c2c0569d03210
7
- data.tar.gz: 030f4cdd69ed052bcafe85e246ac580a1468c96d6f6c70c567c4d918aa0a36048316ccb9ebf04f95d06ecea74ea9279a04506da4bd1b4992c35b47366f9bada5
6
+ metadata.gz: 2dea66682adbebf9800a68cbb3f9962d4b17623bc022163b7765fd1b4a889a78fc610dfc12719d137605e9e3b7c98b254e6f8f5ec80eca947318795b66dd48a2
7
+ data.tar.gz: 8f04ddb779773c29db1a6f1af0cc73065b4da4e19e7e1a0b43eb5e1c6ec09d94acefb47ca0bdff0880377e2366354a631bc6751adad2ab73c31161108d2fa540
@@ -0,0 +1,57 @@
1
+ # Ruby CircleCI 2.0 configuration file
2
+ #
3
+ # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
+ #
5
+ version: 2
6
+ jobs:
7
+ build:
8
+ docker:
9
+ - image: circleci/ruby:2.7.0-node
10
+ - image: circleci/redis:5.0.4
11
+ environment:
12
+ BUNDLER_VERSION: 2.1.4
13
+
14
+ working_directory: ~/repo
15
+
16
+ steps:
17
+ - checkout
18
+
19
+ # Download and cache dependencies
20
+ - restore_cache:
21
+ keys:
22
+ - v1-dependencies-{{ checksum "Gemfile.lock" }}
23
+
24
+ - run: gem install bundler --version $BUNDLER_VERSION
25
+
26
+ - run:
27
+ name: install dependencies
28
+ command: |
29
+ bundle install --jobs=4 --retry=3 --path vendor/bundle
30
+
31
+ - save_cache:
32
+ paths:
33
+ - ./vendor/bundle
34
+ key: v1-dependencies-{{ checksum "Gemfile.lock" }}
35
+
36
+ # run tests!
37
+ - run:
38
+ name: run tests
39
+ command: |
40
+ mkdir /tmp/test-results
41
+ TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
42
+ circleci tests split --split-by=timings)"
43
+
44
+ bundle exec rspec \
45
+ --format progress \
46
+ --format RspecJunitFormatter \
47
+ --out /tmp/test-results/rspec.xml \
48
+ --format progress \
49
+ $TEST_FILES
50
+
51
+ # collect reports
52
+ - store_artifacts:
53
+ path: /tmp/rspec/
54
+ destination: rspec
55
+
56
+ - store_test_results:
57
+ path: /tmp/rspec/
@@ -0,0 +1,20 @@
1
+ # v0.3.4 2021-01-05
2
+
3
+ ### Updated
4
+
5
+ - Loosen ActiveSupport version requirement to allow 6.1
6
+
7
+ # v0.3.3 2020-09-30
8
+
9
+ ### Updated NxtRegistry
10
+
11
+ [Compare v0.3.2...v0.3.3](https://github.com/nxt-insurance/nxt_http_client/compare/v0.3.2...v0.3.3)
12
+
13
+ # v0.2.10 2020-03-10
14
+
15
+ ### Refactored
16
+
17
+ - [internal] Added CHANGELOG.MD
18
+ - Refactored a bit
19
+
20
+ [Compare v0.2.9...v0.3.0](https://github.com/nxt-insurance/nxt_http_client/compare/v0.2.9...v0.2.10)
@@ -1,71 +1,72 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nxt_http_client (0.2.9)
5
- activesupport (~> 6.0.0)
4
+ nxt_http_client (0.3.4)
5
+ activesupport (~> 6.0)
6
6
  nxt_registry
7
7
  typhoeus
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- activesupport (6.0.2.1)
12
+ activesupport (6.1.0)
13
13
  concurrent-ruby (~> 1.0, >= 1.0.2)
14
- i18n (>= 0.7, < 2)
15
- minitest (~> 5.1)
16
- tzinfo (~> 1.1)
17
- zeitwerk (~> 2.2)
14
+ i18n (>= 1.6, < 2)
15
+ minitest (>= 5.1)
16
+ tzinfo (~> 2.0)
17
+ zeitwerk (~> 2.3)
18
18
  addressable (2.7.0)
19
19
  public_suffix (>= 2.0.2, < 5.0)
20
- coderay (1.1.2)
21
- concurrent-ruby (1.1.5)
22
- crack (0.4.3)
23
- safe_yaml (~> 1.0.0)
24
- diff-lcs (1.3)
20
+ coderay (1.1.3)
21
+ concurrent-ruby (1.1.7)
22
+ crack (0.4.5)
23
+ rexml
24
+ diff-lcs (1.4.4)
25
25
  ethon (0.12.0)
26
26
  ffi (>= 1.3.0)
27
- ffi (1.12.1)
28
- hashdiff (1.0.0)
29
- i18n (1.8.2)
27
+ ffi (1.13.1)
28
+ hashdiff (1.0.1)
29
+ i18n (1.8.7)
30
30
  concurrent-ruby (~> 1.0)
31
- method_source (0.9.2)
32
- minitest (5.14.0)
33
- nxt_registry (0.1.4)
31
+ method_source (1.0.0)
32
+ minitest (5.14.2)
33
+ nxt_registry (0.3.6)
34
34
  activesupport
35
- nxt_vcr_harness (0.1.3)
35
+ nxt_vcr_harness (0.1.4)
36
36
  rspec (~> 3.0)
37
- vcr (~> 5.0)
38
- pry (0.12.2)
39
- coderay (~> 1.1.0)
40
- method_source (~> 0.9.0)
41
- public_suffix (4.0.1)
42
- rake (10.5.0)
43
- redis (4.1.3)
44
- rspec (3.9.0)
45
- rspec-core (~> 3.9.0)
46
- rspec-expectations (~> 3.9.0)
47
- rspec-mocks (~> 3.9.0)
48
- rspec-core (3.9.0)
49
- rspec-support (~> 3.9.0)
50
- rspec-expectations (3.9.0)
37
+ vcr (~> 6.0)
38
+ pry (0.13.1)
39
+ coderay (~> 1.1)
40
+ method_source (~> 1.0)
41
+ public_suffix (4.0.6)
42
+ rake (13.0.3)
43
+ redis (4.2.5)
44
+ rexml (3.2.4)
45
+ rspec (3.10.0)
46
+ rspec-core (~> 3.10.0)
47
+ rspec-expectations (~> 3.10.0)
48
+ rspec-mocks (~> 3.10.0)
49
+ rspec-core (3.10.1)
50
+ rspec-support (~> 3.10.0)
51
+ rspec-expectations (3.10.1)
51
52
  diff-lcs (>= 1.2.0, < 2.0)
52
- rspec-support (~> 3.9.0)
53
- rspec-mocks (3.9.0)
53
+ rspec-support (~> 3.10.0)
54
+ rspec-mocks (3.10.1)
54
55
  diff-lcs (>= 1.2.0, < 2.0)
55
- rspec-support (~> 3.9.0)
56
- rspec-support (3.9.0)
57
- safe_yaml (1.0.5)
58
- thread_safe (0.3.6)
59
- typhoeus (1.3.1)
56
+ rspec-support (~> 3.10.0)
57
+ rspec-support (3.10.1)
58
+ rspec_junit_formatter (0.4.1)
59
+ rspec-core (>= 2, < 4, != 2.12.0)
60
+ typhoeus (1.4.0)
60
61
  ethon (>= 0.9.0)
61
- tzinfo (1.2.6)
62
- thread_safe (~> 0.1)
63
- vcr (5.0.0)
64
- webmock (3.7.6)
62
+ tzinfo (2.0.4)
63
+ concurrent-ruby (~> 1.0)
64
+ vcr (6.0.0)
65
+ webmock (3.11.0)
65
66
  addressable (>= 2.3.6)
66
67
  crack (>= 0.3.2)
67
68
  hashdiff (>= 0.4.0, < 2.0.0)
68
- zeitwerk (2.2.2)
69
+ zeitwerk (2.4.2)
69
70
 
70
71
  PLATFORMS
71
72
  ruby
@@ -75,9 +76,10 @@ DEPENDENCIES
75
76
  nxt_http_client!
76
77
  nxt_vcr_harness
77
78
  pry
78
- rake (~> 10.0)
79
+ rake (~> 13.0)
79
80
  redis
80
81
  rspec (~> 3.0)
82
+ rspec_junit_formatter
81
83
  vcr
82
84
  webmock
83
85
 
data/README.md CHANGED
@@ -26,40 +26,43 @@ Or install it yourself as:
26
26
  ```ruby
27
27
  class MyClient < NxtHttpClient
28
28
 
29
+ # In your subclasses you probably want to deep_merge options in order to not overwrite options inherited
30
+ # from the parent class. Of course this will not influence the parent class and you can also reset them
31
+ # to a new hash here.
32
+
33
+ # Also be aware that the result of x_request_id_proc will be hashed into the cache key and thus might cause
34
+ # your request not to be cached if not used properly
35
+
29
36
  configure do |config|
30
37
  config.base_url = 'www.example.com'
31
- # In your subclasses you probably want to deep_merge options in order to not overwrite options inherited
32
- # from the parent class. Of course this will not influence the parent class and you can also reset them
33
- # to a new hash here.
34
38
  config.request_options.deep_merge!(
35
39
  headers: { API_KEY: '1993' },
36
40
  method: :get,
37
41
  followlocation: true
38
42
  )
39
- # Be aware that the result of x_request_id_proc will be hashed into the cache key and thus might cause
40
- # your request not to be cached if not used properly
41
43
  config.x_request_id_proc = -> { ('a'..'z').to_a.shuffle.take(10).join }
42
44
  end
43
45
 
44
46
  register_response_handler do |handler|
45
47
  handler.on(:error) do |response|
48
+ Raven.extra_context(error_details: error.to_h) # call error.to_h to inspect request and response
46
49
  raise StandardError, "I can't handle this: #{response.code}"
47
50
  end
48
51
  end
49
52
 
53
+ # Will be called before fire so you can reconfigure your handler before fire
50
54
  before_fire do |client, request, handler|
51
- # Will be called before fire
52
55
  handler.on!(200) do |response|
53
- # reconfigure your handler before fire
56
+ # ...
54
57
  end
55
58
  end
56
59
 
60
+ # Will be called after fire. You probably want to return the result here in order for your code
61
+ # to be able to access the result from the response handler from before.
62
+ # In case one of the response handler callbacks raises an error
63
+ # after fire will has access to it and you may want to reraise the error in that case.
64
+
57
65
  after_fire do |client, request, response, result, error|
58
- # Will be called after fire. You probably want to return the result here in order for your code
59
- # to be able to access the result from the response handler from before.
60
-
61
- # In case one of the response handler callbacks raises an error
62
- # after fire will has access to it and you may want to reraise the error in that case.
63
66
  if error
64
67
  raise error
65
68
  else
@@ -84,15 +87,51 @@ class MyClient < NxtHttpClient
84
87
  end
85
88
  end
86
89
 
90
+ # there are also convenience methods for all http verbs (get post patch put delete head)
87
91
  def update
88
- # there are also convenience methods for all http verbs (get post patch put delete head)
89
92
  post(params: { my: 'payload' }) do |handler|
90
- # would post to the base_url
93
+ # ...
94
+ end
95
+ end
96
+ end
97
+ ```
98
+
99
+ ### HTTP Methods
100
+
101
+ Instead of fire you can simply use the http verbs as methods
102
+
103
+ ```ruby
104
+ class MyClient < NxtHttpClient
105
+
106
+ def initialize(url)
107
+ @url = url
108
+ end
109
+
110
+ attr_reader :url
111
+
112
+ def fetch
113
+ get(url) do
114
+ handler.on(:success) { |response| response.body }
115
+ end
116
+ end
117
+
118
+ def create(params)
119
+ post(url, params: params) do
120
+ handler.on(:success) { |response| response.body }
121
+ end
122
+ end
123
+
124
+ def update(params)
125
+ put(url, params: params) do
126
+ handler.on(:success) { |response| response.body }
91
127
  end
92
128
  end
129
+
130
+ # ... there are others as you know ...
93
131
  end
94
132
  ```
95
133
 
134
+
96
135
  ### configure
97
136
 
98
137
  Register default request options on the class level. Available options are `request_options` that are passed directly to
@@ -11,5 +11,4 @@ require 'nxt_http_client/error'
11
11
 
12
12
  module NxtHttpClient
13
13
  class Error < StandardError; end
14
- # Your code goes here...
15
14
  end
@@ -1,80 +1,48 @@
1
1
  module NxtHttpClient
2
2
  class Client
3
3
  extend ClientDsl
4
- CACHE_STRATEGIES = %w[global thread]
4
+ CACHE_STRATEGIES = %w[global thread].freeze
5
+ HTTP_METHODS = %w[get post patch put delete head].freeze
5
6
 
6
7
  def build_request(url, **opts)
7
- base_url = opts.delete(:base_url) || default_config.base_url
8
- url = [base_url, url].reject(&:blank?).join('/')
9
-
10
- duplicated_slashes = url.match(/([^:]\/{2,})/)
11
- duplicated_slashes && duplicated_slashes.captures.each do |capture|
12
- url.gsub!(capture, "#{capture[0]}/")
13
- end
14
-
15
- opts = default_config.request_options.with_indifferent_access.deep_merge(opts.with_indifferent_access)
16
- opts[:headers] ||= {}
17
-
18
- if default_config.x_request_id_proc
19
- opts[:headers]['X-Request-ID'] ||= default_config.x_request_id_proc.call
20
- end
21
-
22
- if opts[:cache] ||= false
23
- strategy = opts.delete(:cache)
24
-
25
- case strategy.to_s
26
- when 'thread'
27
- cache_key = Thread.current[:nxt_http_client_cache_key] ||= "#{SecureRandom.base58}::#{DateTime.current}"
28
- opts[:headers].reverse_merge!(cache_key: cache_key)
29
- when 'global'
30
- opts[:headers].delete(:cache_key)
31
- else
32
- raise ArgumentError, "Cache strategy unknown: #{strategy}. Options are #{CACHE_STRATEGIES}"
33
- end
34
- end
8
+ url = build_url(opts, url)
9
+ opts = build_headers(opts)
35
10
 
36
11
  Typhoeus::Request.new(url, **opts.symbolize_keys)
37
12
  end
38
13
 
39
- def fire(url = '', **opts, &block)
40
- # calling_method = caller_locations(1,1)[0].label
41
- response_handler = opts.fetch(:response_handler) do
42
- dup_handler_from_class || NxtHttpClient::ResponseHandler.new
43
- end
14
+ delegate :before_fire_callback, :after_fire_callback, to: :class
44
15
 
16
+ def fire(url = '', **opts, &block)
17
+ response_handler = opts.fetch(:response_handler) { dup_handler_from_class || NxtHttpClient::ResponseHandler.new }
45
18
  response_handler.configure(&block) if block_given?
46
- request = build_request(url, opts.except(:response_handler))
47
-
48
- before_fire_callback = self.class.before_fire_callback
19
+ request = build_request(url, **opts.except(:response_handler))
49
20
  before_fire_callback && instance_exec(self, request, response_handler, &before_fire_callback)
50
21
 
51
- if response_handler.callbacks['headers']
22
+ if response_handler.callbacks.resolve('headers')
52
23
  request.on_headers do |response|
53
24
  response_handler.eval_callback(self, 'headers', response)
54
25
  end
55
26
  end
56
27
 
57
- if response_handler.callbacks['body']
28
+ if response_handler.callbacks.resolve('body')
58
29
  request.on_body do |response|
59
30
  response_handler.eval_callback(self, 'body', response)
60
31
  end
61
32
  end
62
33
 
63
34
  result = nil
64
- error = nil
35
+ current_error = nil
65
36
 
66
37
  request.on_complete do |response|
67
- callback = response_handler.callback_for_response(response)
68
- result = callback && instance_exec(response, &callback) || response
69
- rescue StandardError => e
70
- error = e
38
+ result = callback_or_response(response, response_handler)
39
+ rescue StandardError => error
40
+ current_error = error
71
41
  ensure
72
- after_fire_callback = self.class.after_fire_callback
73
-
74
42
  if after_fire_callback
75
- result = instance_exec(self, request, response, result, error, &after_fire_callback)
43
+ result = instance_exec(self, request, response, result, current_error, &after_fire_callback)
76
44
  else
77
- result || (raise error)
45
+ result || (raise current_error)
78
46
  end
79
47
  end
80
48
 
@@ -83,10 +51,32 @@ module NxtHttpClient
83
51
  result
84
52
  end
85
53
 
86
- %w[get post patch put delete head].each do |method|
54
+ HTTP_METHODS.each do |method|
87
55
  define_method method do |url = '', **opts, &block|
88
- fire(url, opts.reverse_merge(method: method), &block)
56
+ fire(url, **opts.reverse_merge(method: method), &block)
57
+ end
58
+ end
59
+
60
+ private
61
+
62
+ def build_url(opts, url)
63
+ base_url = opts.delete(:base_url) || default_config.base_url
64
+ url = [base_url, url].reject(&:blank?).join('/')
65
+
66
+ url_without_duplicated_hashes(url)
67
+ url
68
+ end
69
+
70
+ def build_headers(opts)
71
+ opts = default_config.request_options.with_indifferent_access.deep_merge(opts.with_indifferent_access)
72
+ opts[:headers] ||= {}
73
+
74
+ if default_config.x_request_id_proc
75
+ opts[:headers]['X-Request-ID'] ||= default_config.x_request_id_proc.call
89
76
  end
77
+
78
+ build_cache_header(opts)
79
+ opts
90
80
  end
91
81
 
92
82
  def dup_handler_from_class
@@ -96,5 +86,35 @@ module NxtHttpClient
96
86
  def default_config
97
87
  self.class.default_config
98
88
  end
89
+
90
+ def build_cache_header(opts)
91
+ if opts[:cache] ||= false
92
+ strategy = opts.delete(:cache)
93
+
94
+ case strategy.to_s
95
+ when 'thread'
96
+ cache_key = Thread.current[:nxt_http_client_cache_key] ||= "#{SecureRandom.base58}::#{DateTime.current}"
97
+ opts[:headers].reverse_merge!(cache_key: cache_key)
98
+ when 'global'
99
+ opts[:headers].delete(:cache_key)
100
+ else
101
+ raise ArgumentError, "Cache strategy unknown: #{strategy}. Options are #{CACHE_STRATEGIES}"
102
+ end
103
+ end
104
+ end
105
+
106
+ def url_without_duplicated_hashes(url)
107
+ duplicated_slashes = url.match(/([^:]\/{2,})/)
108
+ duplicated_slashes && duplicated_slashes.captures.each do |capture|
109
+ url.gsub!(capture, "#{capture[0]}/")
110
+ end
111
+
112
+ url
113
+ end
114
+
115
+ def callback_or_response(response, response_handler)
116
+ callback = response_handler.callback_for_response(response)
117
+ callback && instance_exec(response, &callback) || response
118
+ end
99
119
  end
100
120
  end
@@ -1,9 +1,7 @@
1
1
  module NxtHttpClient
2
2
  module ClientDsl
3
3
  def configure(opts = {}, &block)
4
- opts.each do |k,v|
5
- default_config.send(k, v)
6
- end
4
+ opts.each { |k, v| default_config.send(k, v) }
7
5
  default_config.tap { |d| block.call(d) }
8
6
  default_config
9
7
  end
@@ -13,7 +11,7 @@ module NxtHttpClient
13
11
  end
14
12
 
15
13
  def before_fire_callback
16
- @before_fire ||= dup_instance_variable_from_ancestor_chain(:@before_fire_callback)
14
+ @before_fire_callback ||= dup_instance_variable_from_ancestor_chain(:@before_fire_callback)
17
15
  end
18
16
 
19
17
  def after_fire(&block)
@@ -44,21 +42,16 @@ module NxtHttpClient
44
42
  end
45
43
 
46
44
  def instance_variable_from_ancestor_chain(instance_variable_name)
47
- client = client_ancestors.find do |client|
48
- client.instance_variable_get(instance_variable_name)
49
- end
45
+ client = client_ancestors.find { |c| c.instance_variable_get(instance_variable_name) }
50
46
 
51
47
  client.instance_variable_get(instance_variable_name)
52
48
  end
53
49
 
54
50
  def dup_instance_variable_from_ancestor_chain(instance_variable_name)
55
51
  result = instance_variable_from_ancestor_chain(instance_variable_name).dup
52
+ return result unless block_given?
56
53
 
57
- if block_given?
58
- result || yield
59
- else
60
- result
61
- end
54
+ result || yield
62
55
  end
63
56
  end
64
57
  end
@@ -1,5 +1,5 @@
1
1
  module NxtHttpClient
2
- CONFIGURABLE_OPTIONS = %i[request_options base_url x_request_id_proc]
2
+ CONFIGURABLE_OPTIONS = %i[request_options base_url x_request_id_proc].freeze
3
3
 
4
4
  DefaultConfig = Struct.new('DefaultConfig', *CONFIGURABLE_OPTIONS) do
5
5
  def initialize(request_options: ActiveSupport::HashWithIndifferentAccess.new, base_url: '', x_request_id_proc: nil)
@@ -1,17 +1,24 @@
1
1
  module NxtHttpClient
2
2
  class Error < StandardError
3
- def initialize(response)
3
+ def initialize(response, message = nil)
4
4
  @response = response.blank? ? Typhoeus::Response.new : response
5
+ @id = SecureRandom.uuid
6
+ @message = message || default_message
7
+
8
+ super(@message)
5
9
  end
6
10
 
7
- attr_reader :response
11
+ attr_reader :response, :id, :message
12
+
13
+ alias_method :to_s, :message
8
14
 
9
- def to_s
15
+ def default_message
10
16
  "NxtHttpClient::Error::#{response_code}"
11
17
  end
12
18
 
13
19
  def to_h
14
20
  {
21
+ id: id,
15
22
  url: url,
16
23
  response_code: response_code,
17
24
  request_options: request_options,
@@ -21,7 +28,7 @@ module NxtHttpClient
21
28
  end
22
29
 
23
30
  def body
24
- if response_content_type == 'application/json'
31
+ if response_content_type&.starts_with?('application/json')
25
32
  JSON.parse(response.body)
26
33
  else
27
34
  response.body
@@ -4,20 +4,14 @@ module NxtHttpClient
4
4
  include NxtRegistry
5
5
 
6
6
  def initialize
7
- @callbacks = registry(
8
- :callbacks,
9
- call: false,
10
- on_key_already_registered: ->(key) { raise_callback_already_registered(key) }
11
- )
12
-
13
7
  @result = nil
14
8
  end
15
9
 
16
10
  attr_accessor :result
17
- attr_reader :callbacks
18
11
 
19
12
  def eval_callback(target, key, response)
20
13
  return unless callbacks.resolve!(key)
14
+
21
15
  target.instance_exec(response, &callbacks.resolve(key))
22
16
  end
23
17
 
@@ -37,23 +31,31 @@ module NxtHttpClient
37
31
  register_callback(code, overwrite: true, &block)
38
32
  end
39
33
 
40
- alias_method :on, :register_callback
41
- alias_method :on!, :register_callback!
34
+ alias on register_callback
35
+ alias on! register_callback!
42
36
 
43
37
  def callback_for_response(response)
44
38
  key_from_response = response.code.to_s
45
- return callbacks['any'] if callbacks['any'].present?
39
+ return callbacks.resolve('any') if callbacks.resolve('any').present?
46
40
 
47
41
  first_matching_key = callbacks.keys.sort.reverse.find do |key|
48
42
  regex_key = key.gsub('*', '[0-9]{1}')
49
43
  key_from_response =~ /\A#{regex_key}\z/
50
44
  end
51
45
 
52
- first_matching_key && callbacks[first_matching_key] ||
53
- response.success? && callbacks['success'] ||
54
- response.timed_out? && callbacks['timed_out'] ||
55
- !response.success? && callbacks['error'] ||
56
- callbacks['others']
46
+ first_matching_key && callbacks.resolve(first_matching_key) ||
47
+ response.success? && callbacks.resolve('success') ||
48
+ response.timed_out? && callbacks.resolve('timed_out') ||
49
+ !response.success? && callbacks.resolve('error') ||
50
+ callbacks.resolve('others')
51
+ end
52
+
53
+ def callbacks
54
+ @callbacks ||= NxtRegistry::Registry.new(
55
+ :callbacks,
56
+ call: false,
57
+ on_key_already_registered: ->(key) { raise_callback_already_registered(key) }
58
+ )
57
59
  end
58
60
 
59
61
  private
@@ -1,3 +1,3 @@
1
1
  module NxtHttpClient
2
- VERSION = "0.2.9"
2
+ VERSION = "0.3.4"
3
3
  end
@@ -36,15 +36,16 @@ Gem::Specification.new do |spec|
36
36
  spec.require_paths = ['lib']
37
37
 
38
38
  spec.add_dependency 'typhoeus'
39
- spec.add_dependency 'activesupport', '~> 6.0.0'
39
+ spec.add_dependency 'activesupport', '~> 6.0'
40
40
  spec.add_dependency 'nxt_registry'
41
41
 
42
42
  spec.add_development_dependency 'bundler', '~> 1.17'
43
- spec.add_development_dependency 'rake', '~> 10.0'
43
+ spec.add_development_dependency 'rake', '~> 13.0'
44
44
  spec.add_development_dependency 'rspec', '~> 3.0'
45
45
  spec.add_development_dependency 'pry'
46
46
  spec.add_development_dependency 'vcr'
47
47
  spec.add_development_dependency 'webmock'
48
48
  spec.add_development_dependency 'nxt_vcr_harness'
49
49
  spec.add_development_dependency 'redis'
50
+ spec.add_development_dependency 'rspec_junit_formatter'
50
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nxt_http_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Robecke
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: exe
13
13
  cert_chain: []
14
- date: 2020-01-15 00:00:00.000000000 Z
14
+ date: 2021-01-05 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: typhoeus
@@ -33,14 +33,14 @@ dependencies:
33
33
  requirements:
34
34
  - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: 6.0.0
36
+ version: '6.0'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: 6.0.0
43
+ version: '6.0'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: nxt_registry
46
46
  requirement: !ruby/object:Gem::Requirement
@@ -75,14 +75,14 @@ dependencies:
75
75
  requirements:
76
76
  - - "~>"
77
77
  - !ruby/object:Gem::Version
78
- version: '10.0'
78
+ version: '13.0'
79
79
  type: :development
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
83
  - - "~>"
84
84
  - !ruby/object:Gem::Version
85
- version: '10.0'
85
+ version: '13.0'
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: rspec
88
88
  requirement: !ruby/object:Gem::Requirement
@@ -167,6 +167,20 @@ dependencies:
167
167
  - - ">="
168
168
  - !ruby/object:Gem::Version
169
169
  version: '0'
170
+ - !ruby/object:Gem::Dependency
171
+ name: rspec_junit_formatter
172
+ requirement: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ type: :development
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
170
184
  description: NxtHttpClinet allows you to easily create and configure http clients.
171
185
  email:
172
186
  - a.robecke@getsafe.de
@@ -174,9 +188,11 @@ executables: []
174
188
  extensions: []
175
189
  extra_rdoc_files: []
176
190
  files:
191
+ - ".circleci/config.yml"
177
192
  - ".gitignore"
178
193
  - ".rspec"
179
194
  - ".travis.yml"
195
+ - CHANGELOG.md
180
196
  - Gemfile
181
197
  - Gemfile.lock
182
198
  - LICENSE.txt
@@ -214,7 +230,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
214
230
  - !ruby/object:Gem::Version
215
231
  version: '0'
216
232
  requirements: []
217
- rubygems_version: 3.0.6
233
+ rubygems_version: 3.0.3
218
234
  signing_key:
219
235
  specification_version: 4
220
236
  summary: NxtHttpClinet is a simple DSL on top the typhoeus http gem