smartpay 0.7.0 → 0.8.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: 7b7941ccf3a44139633152fbb1ec945e3fa8687889b370fa039cbe9a28ec54fd
4
- data.tar.gz: 4c823a7e41688255cc6d81289658e183da4b2a9d9d85a340e668dd11b7118309
3
+ metadata.gz: f015233da3625d9cb3178fb715f7885d9cd0680816dbb368a0ed4ab530577a37
4
+ data.tar.gz: 98909c98c67fd90c2bb66862edb643f54680b236bdb027e8f6ae6bf3fdd11e77
5
5
  SHA512:
6
- metadata.gz: b25f291898db670b7e164f64e9d4e37b3bfbf490f69b89896cb763d5cb6f8300bb2adcaf05de6226a37f57130765caf0808ff44d043a4afa19c50de3533ba214
7
- data.tar.gz: 0fe3d4a49422422f9ebef68453b8bfdc8ca2b4ca45f3c55b349f74575c12b221ea9b4421e6f1b96555ffc919f389cb4053739964ceab18f516d4267e8f322b0f
6
+ metadata.gz: 556f127ac1e15bec24476e88d2dfaa47918d19818ce24c3a208ee2e6d0a1a367e6f4a97613060d855358414c55980f446d5ef924c06fac50e2912ed69e39da0b
7
+ data.tar.gz: d5c98640761e4ae80d39520d8b9d8b97864cc13ab3e50fbcea6bee56f794331c610012e4aff41d6aff20bf65013387719e1db306b0784db09471d445db369738
data/lib/smartpay/api.rb CHANGED
@@ -3,23 +3,23 @@
3
3
  module Smartpay
4
4
  class Api
5
5
  class << self
6
- def create_checkout_session(payload)
7
- return create_checkout_session_for_token(payload) if payload[:mode] == "token"
6
+ def create_checkout_session(payload, idempotency_key: nil)
7
+ return create_checkout_session_for_token(payload, idempotency_key: idempotency_key) if payload[:mode] == "token"
8
8
 
9
9
  Responses::CheckoutSession.new(
10
- Client.post("/checkout-sessions", params: {}, payload: Requests::CheckoutSession.new(payload).as_hash)
10
+ Client.post("/checkout-sessions", params: {}, payload: Requests::CheckoutSession.new(payload).as_hash, idempotency_key: idempotency_key)
11
11
  )
12
12
  end
13
13
 
14
- def create_checkout_session_for_token(payload)
14
+ def create_checkout_session_for_token(payload, idempotency_key: nil)
15
15
  Responses::CheckoutSession.new(
16
- Client.post("/checkout-sessions", params: {}, payload: Requests::CheckoutSessionForToken.new(payload).as_hash)
16
+ Client.post("/checkout-sessions", params: {}, payload: Requests::CheckoutSessionForToken.new(payload).as_hash, idempotency_key: idempotency_key)
17
17
  )
18
18
  end
19
19
 
20
- def create_order(payload)
20
+ def create_order(payload, idempotency_key: nil)
21
21
  Responses::Base.new(
22
- Client.post("/orders", params:{}, payload: Requests::Order.new(payload).as_hash)
22
+ Client.post("/orders", params:{}, payload: Requests::Order.new(payload).as_hash, idempotency_key: idempotency_key)
23
23
  )
24
24
  end
25
25
 
@@ -31,34 +31,34 @@ module Smartpay
31
31
  Responses::Base.new(Client.get("/orders/%s" % id, params: { expand: expand }))
32
32
  end
33
33
 
34
- def cancel_order(id)
34
+ def cancel_order(id, idempotency_key: nil)
35
35
  Responses::Base.new(
36
- Client.put("/orders/%s/cancellation" % id)
36
+ Client.put("/orders/%s/cancellation" % id, idempotency_key: idempotency_key)
37
37
  )
38
38
  end
39
39
 
40
- def create_payment(payload)
40
+ def create_payment(payload, idempotency_key: nil)
41
41
  Responses::Base.new(
42
- Client.post("/payments", params:{}, payload: Requests::Payment.new(payload).as_hash)
42
+ Client.post("/payments", params:{}, payload: Requests::Payment.new(payload).as_hash, idempotency_key: idempotency_key)
43
43
  )
44
44
  end
45
45
 
46
- def capture(payload)
47
- create_payment(payload)
46
+ def capture(payload, idempotency_key: nil)
47
+ create_payment(payload, idempotency_key: idempotency_key)
48
48
  end
49
49
 
50
50
  def get_payment(id, expand: '' )
51
51
  Responses::Base.new(Client.get("/payments/%s" % id, params: { expand: expand }))
52
52
  end
53
53
 
54
- def create_refund(payload)
54
+ def create_refund(payload, idempotency_key: nil)
55
55
  Responses::Base.new(
56
- Client.post("/refunds", params:{}, payload: Requests::Refund.new(payload).as_hash)
56
+ Client.post("/refunds", params:{}, payload: Requests::Refund.new(payload).as_hash, idempotency_key: idempotency_key)
57
57
  )
58
58
  end
59
59
 
60
- def refund(payload)
61
- create_refund(payload)
60
+ def refund(payload, idempotency_key: nil)
61
+ create_refund(payload, idempotency_key: idempotency_key)
62
62
  end
63
63
 
64
64
  def get_refund(id, expand: '' )
@@ -73,16 +73,16 @@ module Smartpay
73
73
  Responses::Base.new(Client.get("/tokens/%s" % id))
74
74
  end
75
75
 
76
- def enable_token(id)
77
- Responses::Base.new(Client.put("/tokens/%s/enable" % id))
76
+ def enable_token(id, idempotency_key: nil)
77
+ Responses::Base.new(Client.put("/tokens/%s/enable" % id, idempotency_key: idempotency_key))
78
78
  end
79
79
 
80
- def disable_token(id)
81
- Responses::Base.new(Client.put("/tokens/%s/disable" % id))
80
+ def disable_token(id, idempotency_key: nil)
81
+ Responses::Base.new(Client.put("/tokens/%s/disable" % id, idempotency_key: idempotency_key))
82
82
  end
83
83
 
84
- def delete_token(id)
85
- Responses::Base.new(Client.delete("/tokens/%s" % id))
84
+ def delete_token(id, idempotency_key: nil)
85
+ Responses::Base.new(Client.delete("/tokens/%s" % id, idempotency_key: idempotency_key))
86
86
  end
87
87
  end
88
88
  end
@@ -9,45 +9,57 @@ module Smartpay
9
9
  class << self
10
10
  def get(path, params: {})
11
11
  request_params = default_params.merge(params)
12
- RestClient::Request.execute(method: :get, url: api_url(path),
13
- headers: headers.merge(params: request_params),
14
- timeout: timeout)
12
+ with_retries(retry_options) do
13
+ RestClient::Request.execute(
14
+ method: :get,
15
+ url: api_url(path),
16
+ headers: headers.merge(params: request_params),
17
+ timeout: timeout
18
+ )
19
+ end
15
20
  end
16
21
 
17
- def post(path, params: {}, payload: {})
22
+
23
+ def post(path, params: {}, payload: {}, idempotency_key: nil)
18
24
  request_params = default_params.merge(params)
19
25
  request_payload = default_payload.merge(payload)
20
- idempotency_key = nonce
21
- with_retries(:max_tries => 1, :rescue => [RestClient::BadRequest, RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout]) do
22
- RestClient::Request.execute(method: :post, url: api_url(path),
23
- params: request_params,
24
- headers: headers.merge({Idempotency_Key: idempotency_key}).merge(params: request_params),
25
- timeout: timeout,
26
- payload: request_payload.to_json)
26
+ idempotency_key ||= nonce
27
+ with_retries(retry_options) do
28
+ RestClient::Request.execute(
29
+ method: :post,
30
+ url: api_url(path),
31
+ headers: headers.merge({ Idempotency_Key: idempotency_key }).merge(params: request_params),
32
+ timeout: timeout,
33
+ payload: request_payload.to_json
34
+ )
27
35
  end
28
36
  end
29
37
 
30
- def put(path, params: {}, payload: {})
31
- request_params = default_params.merge(params).merge({'Idempotency-Key': nonce})
38
+ def put(path, params: {}, payload: {}, idempotency_key: nil)
39
+ request_params = default_params.merge(params)
32
40
  request_payload = default_payload.merge(payload)
33
- idempotency_key = nonce
34
- with_retries(:max_tries => 1, :rescue => [RestClient::InternalServerError, RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout]) do
35
- RestClient::Request.execute(method: :put, url: api_url(path),
36
- params: request_params,
37
- headers: headers.merge({Idempotency_Key: idempotency_key}).merge(params: request_params),
38
- timeout: timeout,
39
- payload: request_payload.to_json)
41
+ idempotency_key ||= nonce
42
+ with_retries(retry_options) do
43
+ RestClient::Request.execute(
44
+ method: :put,
45
+ url: api_url(path),
46
+ headers: headers.merge({ Idempotency_Key: idempotency_key }).merge(params: request_params),
47
+ timeout: timeout,
48
+ payload: request_payload.to_json
49
+ )
40
50
  end
41
51
  end
42
52
 
43
- def delete(path, params: {})
44
- request_params = default_params.merge(params).merge({'Idempotency-Key': nonce})
45
- idempotency_key = nonce
46
- with_retries(:max_tries => 1, :rescue => [RestClient::InternalServerError, RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout]) do
47
- RestClient::Request.execute(method: :delete, url: api_url(path),
48
- params: request_params,
49
- headers: headers.merge({Idempotency_Key: idempotency_key}).merge(params: request_params),
50
- timeout: timeout)
53
+ def delete(path, params: {}, idempotency_key: nil)
54
+ request_params = default_params.merge(params)
55
+ idempotency_key ||= nonce
56
+ with_retries(retry_options) do
57
+ RestClient::Request.execute(
58
+ method: :delete,
59
+ url: api_url(path),
60
+ headers: headers.merge({ Idempotency_Key: idempotency_key }).merge(params: request_params),
61
+ timeout: timeout
62
+ )
51
63
  end
52
64
  end
53
65
 
@@ -62,7 +74,7 @@ module Smartpay
62
74
  end
63
75
 
64
76
  def timeout
65
- Smartpay.configuration.post_timeout
77
+ Smartpay.configuration.request_timeout
66
78
  end
67
79
 
68
80
  def headers
@@ -84,6 +96,10 @@ module Smartpay
84
96
  }.freeze
85
97
  end
86
98
 
99
+ def retry_options
100
+ Smartpay.configuration.retry_options
101
+ end
102
+
87
103
  def default_payload
88
104
  {}.freeze
89
105
  end
@@ -1,16 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rest-client"
4
+
3
5
  module Smartpay
4
6
  class Configuration
5
7
  attr_accessor :public_key, :secret_key
6
- attr_writer :post_timeout, :api_url, :checkout_url
8
+ attr_writer :request_timeout, :api_url, :checkout_url, :retry_options
7
9
 
8
10
  DEFAULT_TIMEOUT_SETTING = 30
9
11
  DEFAULT_API_URL = "https://api.smartpay.co/v1"
10
12
  DEFAULT_CHECKOUT_URL = "https://checkout.smartpay.co"
13
+ DEFAULT_RETRY_OPTIONS = {
14
+ max_tries: 1,
15
+ base_sleep_seconds: 0.5,
16
+ max_sleep_seconds: 1.0,
17
+ rescue: [RestClient::InternalServerError,RestClient::BadGateway,
18
+ RestClient::ServiceUnavailable, RestClient::GatewayTimeout]
19
+ }.freeze
11
20
 
12
21
  def initialize
13
- @post_timeout = DEFAULT_TIMEOUT_SETTING
22
+ @request_timeout = DEFAULT_TIMEOUT_SETTING
14
23
  @api_url = if in_development_mode?
15
24
  ENV["SMARTPAY_API_PREFIX"].downcase || DEFAULT_API_URL
16
25
  else
@@ -21,10 +30,11 @@ module Smartpay
21
30
  else
22
31
  DEFAULT_CHECKOUT_URL
23
32
  end
33
+ @retry_options = DEFAULT_RETRY_OPTIONS
24
34
  end
25
35
 
26
- def post_timeout
27
- @post_timeout || DEFAULT_TIMEOUT_SETTING
36
+ def request_timeout
37
+ @request_timeout || DEFAULT_TIMEOUT_SETTING
28
38
  end
29
39
 
30
40
  def api_url
@@ -39,6 +49,10 @@ module Smartpay
39
49
  @checkout_url || DEFAULT_CHECKOUT_URL
40
50
  end
41
51
 
52
+ def retry_options
53
+ @retry_options || DEFAULT_RETRY_OPTIONS
54
+ end
55
+
42
56
  private
43
57
 
44
58
  def in_development_mode?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Smartpay
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartpay
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Smartpay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-10 00:00:00.000000000 Z
11
+ date: 2023-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client