dhc 2.4.0 → 3.0.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: 9547c0b934f2ac6841be72e6f63213dc50d005c6f8559909869dd2ecb12e1e60
4
- data.tar.gz: 3b7335a60aaffe92da269dd0a8fb7a51e66471136a506f0ae4de651a2ac95d8d
3
+ metadata.gz: 38b1300c7240268c0d2d3d571d86dc70e1d9015440a9a600c65fcf4bb2532cce
4
+ data.tar.gz: 3aff5b7adbd2d7150cc4aa68f28fe728d248a53c3a4fd2db7875ea3919bc45c3
5
5
  SHA512:
6
- metadata.gz: 39ed2e1baec1153872532441114157e7c7170f76746c4f8e9f77b585c36d0999f3047298d05daee2128dd13b74f21c87ba7b3822bbc703c5aa0c4da390511f4f
7
- data.tar.gz: 9a6ae9ca323bf5d69d1668e72ceaa5969d79e2dc315a575df805b53d48c24321f537d6ab135d4e1412840cc52c7d400e71fbf121b985fe9eefbc86dfd38f7e91
6
+ metadata.gz: e25e5a034157c23c9da5792ace6e560f44623f767ec9b63d7a1d2b3895a9a0a49489256eee6eddaafd59e37e77bb8eb80711e30968075b8669919e52f39c2065
7
+ data.tar.gz: d01e8730f5b9d28a4ed933a4aec7bca68be14888ee45c7cffd4990e97e6fcd9627213f458b1cc171d214ea6a01eabeade3348db3e2530691c5cc84a4b684fa12
data/README.md CHANGED
@@ -21,8 +21,8 @@ use it like:
21
21
 
22
22
  ```ruby
23
23
  response = DHC.get('http://datastore/v2/feedbacks')
24
- response.data.items[0]
25
- response.data.items[0].recommended
24
+ response.data.dig('items', 0)
25
+ response.data.dig('items', 0, 'recommended')
26
26
  response.body
27
27
  response.headers
28
28
  ```
@@ -236,8 +236,8 @@ User-Agent DHC (9.4.2; MyRailsApplicationName) [https://github.com/DePayFi/dhc]
236
236
  ```ruby
237
237
  response.request #<DHC::Request> the associated request.
238
238
 
239
- response.data #<OpenStruct> in case response body contains parsable JSON.
240
- response.data.something.nested
239
+ response.data # JSON
240
+ response.data.dig('something', 'nested')
241
241
 
242
242
  response.body #<String>
243
243
 
@@ -256,9 +256,6 @@ The response data can be access with dot-notation and square-bracket notation. Y
256
256
 
257
257
  ```ruby
258
258
  response = DHC.request(url: 'http://datastore/entry/1')
259
- response.data.as_open_struct #<OpenStruct name='depay.fi'>
260
- response.data.as_json # { name: 'depay.fi' }
261
- response.data.name # 'depay.fi'
262
259
  response.data[:name] # 'depay.fi'
263
260
  ```
264
261
 
@@ -347,7 +344,7 @@ If your error handler returns anything else but `nil` it replaces the response b
347
344
  ```ruby
348
345
  handler = ->(response){ do_something_with_response; return {name: 'unknown'} }
349
346
  response = DHC.get('http://something', rescue: handler)
350
- response.data.name # 'unknown'
347
+ response.data[:name] # 'unknown'
351
348
  ```
352
349
 
353
350
  ### Ignore certain errors
@@ -481,7 +478,7 @@ If you configure `expires_at` and `refresh` proc in addition to `bearer`, DHC wi
481
478
  ```ruby
482
479
  refresh = ->(response = nil){
483
480
  if response
484
- if response.code == 401 && response.data && response.data.error_code == 'ACCESS_TOKEN_EXPIRED'
481
+ if response.code == 401 && response.data && response.data[:error_code] == 'ACCESS_TOKEN_EXPIRED'
485
482
  session[:access_token] = new_access_token
486
483
  end
487
484
  else
@@ -48,8 +48,6 @@ module DHC::Formats
48
48
 
49
49
  def parse(input, object_class)
50
50
  ::JSON.parse(input, object_class: object_class)
51
- rescue ::JSON::ParserError => e
52
- raise DHC::ParserError.new(e.message, input)
53
51
  end
54
52
  end
55
53
  end
@@ -9,7 +9,7 @@ class DHC::DefaultTimeout < DHC::Interceptor
9
9
  TIMEOUT = 15 # seconds
10
10
 
11
11
  def before_init
12
- request_options = (request.options || {})
12
+ request_options = request.options || {}
13
13
  request_options[:timeout] ||= timeout || TIMEOUT
14
14
  request_options[:connecttimeout] ||= connecttimeout || CONNECTTIMEOUT
15
15
  end
@@ -45,9 +45,8 @@ class DHC::Throttle < DHC::Interceptor
45
45
  end
46
46
 
47
47
  def track?
48
- (options.dig(:remaining) && [options.dig(:track), response.headers].none?(&:blank?) ||
48
+ options.dig(:remaining) && [options.dig(:track), response.headers].none?(&:blank?) ||
49
49
  options.dig(:track).present?
50
- )
51
50
  end
52
51
 
53
52
  def break?
data/lib/dhc/response.rb CHANGED
@@ -5,7 +5,6 @@ require 'active_support/core_ext/module'
5
5
  # The response contains the raw response (typhoeus)
6
6
  # and provides functionality to access response data.
7
7
  class DHC::Response
8
- autoload :Data, 'dhc/response/data'
9
8
 
10
9
  attr_accessor :request, :body_replacement
11
10
  attr_reader :from_cache
@@ -23,7 +22,7 @@ class DHC::Response
23
22
  end
24
23
 
25
24
  def data
26
- @data ||= body.present? ? DHC::Response::Data.new(self) : nil
25
+ @data ||= body.present? ? JSON.parse(body) : nil
27
26
  end
28
27
 
29
28
  def [](key)
data/lib/dhc/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DHC
4
- VERSION ||= '2.4.0'
4
+ VERSION ||= '3.0.0'
5
5
  end
@@ -21,9 +21,9 @@ describe DHC do
21
21
  DHC.delete('http://datastore/v2/feedbacks/12121')
22
22
  end
23
23
 
24
- it 'makes response data available in a rails way' do
24
+ it 'makes response data available' do
25
25
  response = DHC.delete('http://datastore/v2/feedbacks/12121')
26
- expect(response.data.recommended).to eq true
26
+ expect(response.data['recommended']).to eq true
27
27
  end
28
28
 
29
29
  it 'provides response headers' do
@@ -24,9 +24,9 @@ describe DHC do
24
24
  DHC.get(:feedbacks, params: parameters)
25
25
  end
26
26
 
27
- it 'makes response data available in a rails way' do
27
+ it 'makes response data available' do
28
28
  response = DHC.get('http://datastore/v2/feedbacks', params: parameters)
29
- expect(response.data.total).to eq 99
29
+ expect(response.data['total']).to eq 99
30
30
  end
31
31
 
32
32
  it 'provides response headers' do
@@ -43,7 +43,7 @@ describe DHC do
43
43
 
44
44
  it 'requests json and parses response body' do
45
45
  data = DHC.json.get('http://datastore/v2/feedbacks').data
46
- expect(data.some).to eq 'json'
46
+ expect(data['some']).to eq 'json'
47
47
  end
48
48
  end
49
49
  end
@@ -29,9 +29,9 @@ describe DHC do
29
29
  DHC.post(:feedbacks, body: feedback)
30
30
  end
31
31
 
32
- it 'makes response data available in a rails way' do
32
+ it 'makes response data available' do
33
33
  response = DHC.post('http://datastore/v2/feedbacks', body: feedback)
34
- expect(response.data.source_id).to eq 'aaa'
34
+ expect(response.data['source_id']).to eq 'aaa'
35
35
  end
36
36
 
37
37
  it 'provides response headers' do
@@ -35,9 +35,9 @@ describe DHC do
35
35
  DHC.put(:feedbacks, body: change)
36
36
  end
37
37
 
38
- it 'makes response data available in a rails way' do
38
+ it 'makes response data available' do
39
39
  response = DHC.put('http://datastore/v2/feedbacks', body: change)
40
- expect(response.data.recommended).to eq false
40
+ expect(response.data['recommended']).to eq false
41
41
  end
42
42
 
43
43
  it 'provides response headers' do
@@ -13,7 +13,7 @@ describe DHC do
13
13
 
14
14
  it 'does a request returning a response' do
15
15
  response = DHC.request(url: 'http://datastore/v2/feedbacks', params: { has_reviews: true }, method: :get)
16
- expect(response.data.total).to eq total
16
+ expect(response.data['total']).to eq total
17
17
  end
18
18
  end
19
19
  end
@@ -39,7 +39,7 @@ describe DHC::Auth do
39
39
  before do
40
40
  refresh = ->(response = nil) {
41
41
  if response
42
- if response.code == 401 && response.data && response.data.error_code == 'ACCESS_TOKEN_EXPIRED'
42
+ if response.code == 401 && response.data && response.data['error_code'] == 'ACCESS_TOKEN_EXPIRED'
43
43
  session[:access_token] = third_access_token
44
44
  end
45
45
  else
@@ -17,7 +17,7 @@ describe DHC::Logging do
17
17
  %r{Before DHC request <\d+> GET http://depay.fi at \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2} Params={} Headers={.*?}}
18
18
  )
19
19
  expect(logger).to have_received(:info).once.with(
20
- %r{After DHC response for request <\d+> GET http://depay.fi at \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2} Time=0ms URL=http://depay.fi:80/}
20
+ %r{After DHC response for request <\d+> GET http://depay.fi at \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2} Time=\d+(\.\d+)?ms URL=http://depay.fi:80/}
21
21
  )
22
22
  end
23
23
 
@@ -27,10 +27,10 @@ describe DHC::Logging do
27
27
  it 'does log the source if provided as option' do
28
28
  DHC.get('http://depay.fi', source: source)
29
29
  expect(logger).to have_received(:info).once.with(
30
- %r{Before DHC request <\d+> GET http://depay.fi at \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2} Params={} Headers={.*?} \nCalled from #{source}}
30
+ %r{Before DHC request <\d+> GET http://depay.fi at \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2} Params={} Headers={.*?} \nCalled from #{Regexp.escape(source)}}
31
31
  )
32
32
  expect(logger).to have_received(:info).once.with(
33
- %r{After DHC response for request <\d+> GET http://depay.fi at \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2} Time=0ms URL=http://depay.fi:80/ \nCalled from #{source}}
33
+ %r{After DHC response for request <\d+> GET http://depay.fi at \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{2}:\d{2} Time=\d+(\.\d+)?ms URL=http://depay.fi:80/ \nCalled from #{Regexp.escape(source)}}
34
34
  )
35
35
  end
36
36
  end
@@ -59,7 +59,7 @@ describe DHC::Request do
59
59
  it 'requests json and parses response body' do
60
60
  expect(-> {
61
61
  DHC.json.get('http://datastore/v2/feedbacks').data
62
- }).to raise_error(DHC::ParserError)
62
+ }).to raise_error(JSON::ParserError)
63
63
  end
64
64
  end
65
65
 
@@ -75,14 +75,14 @@ describe DHC::Request do
75
75
  stub_request(:get, 'http://something').to_return(status: 400)
76
76
  handler = ->(_response) { { name: 'unknown' }.to_json }
77
77
  request = DHC::Request.new(url: 'http://something', rescue: handler)
78
- expect(request.response.data.name).to eq 'unknown'
78
+ expect(request.response.data['name']).to eq 'unknown'
79
79
  end
80
80
 
81
81
  it 'does not exchange body with handlers return if the handler returns nil' do
82
82
  stub_request(:get, 'http://something').to_return(status: 400, body: { message: 'an error occurred' }.to_json)
83
83
  handler = ->(_response) { nil }
84
84
  request = DHC::Request.new(url: 'http://something', rescue: handler)
85
- expect(request.response.data.message).to eq 'an error occurred'
85
+ expect(request.response.data['message']).to eq 'an error occurred'
86
86
  end
87
87
  end
88
88
  end
@@ -22,7 +22,7 @@ describe DHC do
22
22
 
23
23
  it 'makes data accessible with square bracket accessor (symbol)' do
24
24
  expect(
25
- DHC.json.get('http://depay.fi')[:MyProp]
25
+ DHC.json.get('http://depay.fi')['MyProp']
26
26
  ).to eq 'MyValue'
27
27
  end
28
28
  end
@@ -14,23 +14,15 @@ describe DHC::Response do
14
14
  let(:body) { { some_key: { nested: value } } }
15
15
 
16
16
  it 'makes data from response body available' do
17
- expect(response.data.some_key.nested).to eq value
18
- end
19
-
20
- it 'makes data from response body available with hash bracket notation' do
21
- expect(response.data[:some_key][:nested]).to eq value
17
+ expect(response.data.dig('some_key', 'nested')).to eq value
22
18
  end
23
19
 
24
20
  it 'can be converted to json with the as_json method' do
25
21
  expect(response.data.as_json).to eq body.as_json
26
22
  end
27
23
 
28
- it 'can be converted to an open struct with the as_open_struct method' do
29
- expect(response.data.as_open_struct).to eq JSON.parse(response.body, object_class: OpenStruct)
30
- end
31
-
32
24
  it 'returns nil when data is not available' do
33
- expect(response.data.something).to be_nil
25
+ expect(response.data['something']).to be_nil
34
26
  end
35
27
  end
36
28
 
@@ -41,20 +33,8 @@ describe DHC::Response do
41
33
  expect(response.data.as_json).to eq body.as_json
42
34
  end
43
35
 
44
- it 'can be converted to an open struct with the as_open_struct method' do
45
- expect(response.data.as_open_struct).to eq JSON.parse(response.body, object_class: OpenStruct)
46
- end
47
-
48
- it 'is a collection of items' do
49
- expect(response.data.size).to eq(1)
50
- end
51
-
52
36
  it 'makes item data from response body available' do
53
- expect(response.data.first.some_key.nested).to eq value
54
- end
55
-
56
- it 'makes item data from response body available with hash bracket notation' do
57
- expect(response.data.first[:some_key][:nested]).to eq value
37
+ expect(response.data.dig(0, 'some_key', 'nested')).to eq value
58
38
  end
59
39
  end
60
40
  end
@@ -77,7 +57,7 @@ describe DHC::Response do
77
57
  DHC.get('http://listings')
78
58
  rescue DHC::Error => error
79
59
  expect(
80
- error.response.request.response.data.meta.errors.detect { |item| item.code == 2000 }.msg
60
+ error.response.request.response.data.dig('meta', 'errors').detect { |item| item['code'] == 2000 }['msg']
81
61
  ).to eq 'I like to hide error messages (this is meta).'
82
62
  end
83
63
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dhc
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - https://github.com/DePayFi/dhc/contributors
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-03 00:00:00.000000000 Z
11
+ date: 2024-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -215,7 +215,6 @@ files:
215
215
  - lib/dhc/endpoint.rb
216
216
  - lib/dhc/error.rb
217
217
  - lib/dhc/errors/client_error.rb
218
- - lib/dhc/errors/parser_error.rb
219
218
  - lib/dhc/errors/server_error.rb
220
219
  - lib/dhc/errors/timeout.rb
221
220
  - lib/dhc/errors/unknown_error.rb
@@ -241,10 +240,6 @@ files:
241
240
  - lib/dhc/railtie.rb
242
241
  - lib/dhc/request.rb
243
242
  - lib/dhc/response.rb
244
- - lib/dhc/response/data.rb
245
- - lib/dhc/response/data/base.rb
246
- - lib/dhc/response/data/collection.rb
247
- - lib/dhc/response/data/item.rb
248
243
  - lib/dhc/rspec.rb
249
244
  - lib/dhc/test/cache_helper.rb
250
245
  - lib/dhc/version.rb
@@ -399,7 +394,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
399
394
  version: '0'
400
395
  requirements:
401
396
  - Ruby >= 2.0.0
402
- rubygems_version: 3.4.1
397
+ rubygems_version: 3.4.10
403
398
  signing_key:
404
399
  specification_version: 4
405
400
  summary: Advanced HTTP Client for Ruby, fueled with interceptors
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class DHC::ParserError < DHC::Error
4
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Response data is data provided through the response body
4
- # but made accssible in the ruby world
5
- module DHC::Response::Data::Base
6
- def as_json
7
- @json ||= (@data || @response.format.as_json(@response.body))
8
- end
9
-
10
- def as_open_struct
11
- @open_struct ||=
12
- if @data
13
- JSON.parse(@data.to_json, object_class: OpenStruct)
14
- else
15
- @response.format.as_open_struct(@response.body)
16
- end
17
- end
18
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class DHC::Response::Data::Collection < Array
4
- include DHC::Response::Data::Base
5
-
6
- def initialize(response, data: nil)
7
- @response = response
8
- @data = data
9
-
10
- super(
11
- as_json.map do |i|
12
- DHC::Response::Data.new(response, data: i)
13
- end
14
- )
15
- end
16
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class DHC::Response::Data::Item < OpenStruct
4
- include DHC::Response::Data::Base
5
-
6
- def initialize(response, data: nil)
7
- @response = response
8
- @data = data
9
-
10
- set_dynamic_accessor_methods
11
-
12
- super(as_json)
13
- end
14
-
15
- def [](key)
16
- @hash ||= as_json.with_indifferent_access
17
- @hash[key]
18
- end
19
-
20
- private
21
-
22
- def set_dynamic_accessor_methods
23
- as_json.keys.each do |key|
24
- define_singleton_method key do |*args|
25
- as_open_struct.send key, *args
26
- end
27
- end
28
- end
29
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class DHC::Response::Data
4
- autoload :Base, 'dhc/response/data/base'
5
- autoload :Item, 'dhc/response/data/item'
6
- autoload :Collection, 'dhc/response/data/collection'
7
-
8
- include DHC::Response::Data::Base
9
-
10
- def initialize(response, data: nil)
11
- @response = response
12
- @data = data
13
-
14
- if as_json.is_a?(Hash)
15
- @base = DHC::Response::Data::Item.new(@response, data: data)
16
- elsif as_json.is_a?(Array)
17
- @base = DHC::Response::Data::Collection.new(@response, data: data)
18
- end
19
- end
20
-
21
- def method_missing(method, *args, &block)
22
- @base.send(method, *args, &block)
23
- end
24
-
25
- def respond_to_missing?(method_name, include_private = false)
26
- @base.respond_to?(method_name, include_private) || super
27
- end
28
- end