smartpay 0.7.0 → 0.8.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: 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