ac 1.0.2 → 1.1.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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ac/base.rb +36 -30
  3. data/lib/ac/version.rb +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 93ef1a831829470267227d302c604be300a45566557fdeca5dfc90666fe66b37
4
- data.tar.gz: 90e08375261aaf5a34067944c38a553d45778afafbaf2528ff4507f05f792dcf
3
+ metadata.gz: b5a2d1fa03242bf80f9cded8b72e0bdcea929fd4bac989c6c4b151f252befa8b
4
+ data.tar.gz: 934887067b76c1d18bbeb06d1005ddce8b6e84e14ea1bf148760690a377d8060
5
5
  SHA512:
6
- metadata.gz: 533a28626dc522e2202767c59ab9a3d9ab605f8b8fb9c7598f1f0719780f91761639acb9f644cc4d8814a4117424cc4dce5269e371924875f4d8481971c2ec97
7
- data.tar.gz: 012ff28a3e8d92e680106d93acdeabf5b04d167163999b55e251fa64a044ebf876700b1ab43be384b4b60ebfeada194f180a7d3ca168e6ab0c4c61cd00dedeef
6
+ metadata.gz: f04ef8d80ec85f3f7578055f9c557a3dcc9a92617edcc742a680d9ed29291d0658cbf19b4c9d6ab6383680e687345ce105bb34d5d09e9895c7877b7285519d49
7
+ data.tar.gz: 1d5b65ce852fee47b9e8f75b50d7d526161e4967964d0e024e4e96121f121809b8f02f0c5d62af06a96bb13d97531c18eaaa52171379217c45e4e65dc95b85d4
data/lib/ac/base.rb CHANGED
@@ -26,55 +26,61 @@ module Ac
26
26
  end
27
27
  end
28
28
 
29
- def authenticate! options
29
+ def default_options
30
+ {
31
+ headers: {
32
+ "Content-Type" => "application/json",
33
+ "x-idempotency-key" => SecureRandom.uuid
34
+ }
35
+ }
36
+ end
37
+
38
+ def authenticate! options
30
39
  if access_token
31
40
  options[:headers] ||= {}
32
41
  options[:headers]["Authorization"] = "Bearer #{access_token}"
33
42
  end
34
- end
43
+ end
35
44
 
36
45
  %i[get post put patch delete].each do |http_verb|
37
46
  define_method :"#{http_verb}_request" do |path, options = {}|
47
+ options.symbolize_keys!
38
48
  options[:method] = http_verb
49
+ options = default_options.deep_merge(options) if default_options
39
50
  authenticate!(options) unless options.delete(:skip_authentication)
51
+ if options[:body]
52
+ options[:body] = JSON.dump(options[:body]) if options[:body].is_a?(Hash) && options.dig(:headers, "Content-Type") == "application/json"
53
+ end
40
54
  Typhoeus::Request.new url(path), options
41
55
  end
42
56
 
43
57
  define_method http_verb do |path, options = {}, &block|
44
- retries_count ||= 0
45
-
46
- response = send(:"#{http_verb}_request", path, options).run
47
- Database.save_request response, class_name: self.class.name if self.class::SAVE_RESPONSES
58
+ options.symbolize_keys!
59
+ request = send(:"#{http_verb}_request", path, options)
48
60
 
49
- if block
50
- unless run_block_validation(AcObject.from_response(response), block)
51
- if retries_count < self.class::MAX_RETRIES
52
- sleep(2**retries_count)
53
- retries_count += 1
54
- redo
55
- else
56
- raise BlockValidationError.new(AcObject.from_response(response))
57
- end
58
- end
59
- else
60
- unless response.success?
61
- if can_retry?(response) && retries_count < self.class::MAX_RETRIES
62
- sleep(2**retries_count)
63
- retries_count += 1
64
- redo
65
- else
66
- raise AcError.from_response(AcObject.from_response(response))
67
- end
61
+ for retry_number in 0..MAX_RETRIES
62
+ response = request.run
63
+ Database.save_request response, class_name: self.class.name if self.class::SAVE_RESPONSES
64
+ ac_object = AcObject.from_response(response)
65
+ if validate(ac_object, block)
66
+ return ac_object
67
+ else
68
+ break unless block || can_retry?(ac_object.response)
69
+ sleep(2**retry_number)
68
70
  end
69
71
  end
70
- return AcObject.from_response(response)
72
+
73
+ raise AcError.from_response(ac_object)
74
+
71
75
  end
72
76
  end
73
77
 
74
- def run_block_validation response, block
75
- block.call response
76
- rescue StandardError => e
77
- false
78
+ def validate ac_object, block=nil
79
+ if block
80
+ block.call ac_object rescue false
81
+ else
82
+ ac_object.response.success?
83
+ end
78
84
  end
79
85
 
80
86
  def can_retry? response
data/lib/ac/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ac
4
- VERSION = "1.0.2"
4
+ VERSION = "1.1.0"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ac
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - felipedmesquita
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-03-13 00:00:00.000000000 Z
10
+ date: 2025-03-14 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: typhoeus