smartpay 0.8.0 → 0.10.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: f015233da3625d9cb3178fb715f7885d9cd0680816dbb368a0ed4ab530577a37
4
- data.tar.gz: 98909c98c67fd90c2bb66862edb643f54680b236bdb027e8f6ae6bf3fdd11e77
3
+ metadata.gz: 256e620407cf05ccfef77cd18d2d56624538e195e9b4117069ed393e06df1856
4
+ data.tar.gz: bae50f58eea501a61be27087be3cff2c9d9da184cdcd7feb27e5167fbe721763
5
5
  SHA512:
6
- metadata.gz: 556f127ac1e15bec24476e88d2dfaa47918d19818ce24c3a208ee2e6d0a1a367e6f4a97613060d855358414c55980f446d5ef924c06fac50e2912ed69e39da0b
7
- data.tar.gz: d5c98640761e4ae80d39520d8b9d8b97864cc13ab3e50fbcea6bee56f794331c610012e4aff41d6aff20bf65013387719e1db306b0784db09471d445db369738
6
+ metadata.gz: 8320901658f0769df62e5dd8965899188f1ba7ed196d66e3b018b414e497ae99aa6312aacd310782e410b1d36ef7280f2a74f64ffaedae52d3c808c20a34ba68
7
+ data.tar.gz: 05e91447cc6485a2e654244cdbd58ef24e20fb5d4fc5cb30f5396eaebd2c738216c733acaff85d130205047126ffed58f12056974400d9e1e8af507afe717c2f
data/.whitesource ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "scanSettings": {
3
+ "baseBranches": []
4
+ },
5
+ "checkRunSettings": {
6
+ "vulnerableCheckRunConclusionLevel": "failure",
7
+ "displayMode": "diff"
8
+ },
9
+ "issueSettings": {
10
+ "minSeverityLevel": "LOW"
11
+ }
12
+ }
data/lib/smartpay/api.rb CHANGED
@@ -17,17 +17,25 @@ module Smartpay
17
17
  )
18
18
  end
19
19
 
20
+ def get_checkout_session(id, expand: "")
21
+ Responses::Base.new(Client.get("/checkout-sessions/%s" % id, params: { expand: expand }))
22
+ end
23
+
24
+ def get_checkout_sessions(page_token: nil, max_results: nil, expand: "")
25
+ Responses::Base.new(Client.get("/checkout-sessions", params: { pageToken: page_token, maxResults: max_results, expand: expand }))
26
+ end
27
+
20
28
  def create_order(payload, idempotency_key: nil)
21
29
  Responses::Base.new(
22
- Client.post("/orders", params:{}, payload: Requests::Order.new(payload).as_hash, idempotency_key: idempotency_key)
30
+ Client.post("/orders", params: {}, payload: Requests::Order.new(payload).as_hash, idempotency_key: idempotency_key)
23
31
  )
24
32
  end
25
33
 
26
- def get_orders(page_token: nil, max_results: nil, expand: '' )
34
+ def get_orders(page_token: nil, max_results: nil, expand: "")
27
35
  Responses::Base.new(Client.get("/orders", params: { pageToken: page_token, maxResults: max_results, expand: expand }))
28
36
  end
29
37
 
30
- def get_order(id, expand: '' )
38
+ def get_order(id, expand: "")
31
39
  Responses::Base.new(Client.get("/orders/%s" % id, params: { expand: expand }))
32
40
  end
33
41
 
@@ -39,7 +47,7 @@ module Smartpay
39
47
 
40
48
  def create_payment(payload, idempotency_key: nil)
41
49
  Responses::Base.new(
42
- Client.post("/payments", params:{}, payload: Requests::Payment.new(payload).as_hash, idempotency_key: idempotency_key)
50
+ Client.post("/payments", params: {}, payload: Requests::Payment.new(payload).as_hash, idempotency_key: idempotency_key)
43
51
  )
44
52
  end
45
53
 
@@ -47,13 +55,23 @@ module Smartpay
47
55
  create_payment(payload, idempotency_key: idempotency_key)
48
56
  end
49
57
 
50
- def get_payment(id, expand: '' )
58
+ def get_payment(id, expand: "")
51
59
  Responses::Base.new(Client.get("/payments/%s" % id, params: { expand: expand }))
52
60
  end
53
61
 
62
+ def get_payments(page_token: nil, max_results: nil, expand: "")
63
+ Responses::Base.new(Client.get("/payments", params: { pageToken: page_token, maxResults: max_results, expand: expand }))
64
+ end
65
+
66
+ def update_payment(id, payload, idempotency_key: nil)
67
+ Responses::Base.new(
68
+ Client.patch("/payments/%s" % id, payload: Requests::PaymentUpdate.new(payload).as_hash, idempotency_key: idempotency_key)
69
+ )
70
+ end
71
+
54
72
  def create_refund(payload, idempotency_key: nil)
55
73
  Responses::Base.new(
56
- Client.post("/refunds", params:{}, payload: Requests::Refund.new(payload).as_hash, idempotency_key: idempotency_key)
74
+ Client.post("/refunds", params: {}, payload: Requests::Refund.new(payload).as_hash, idempotency_key: idempotency_key)
57
75
  )
58
76
  end
59
77
 
@@ -61,10 +79,86 @@ module Smartpay
61
79
  create_refund(payload, idempotency_key: idempotency_key)
62
80
  end
63
81
 
64
- def get_refund(id, expand: '' )
82
+ def get_refund(id, expand: "")
65
83
  Responses::Base.new(Client.get("/refunds/%s" % id, params: { expand: expand }))
66
84
  end
67
85
 
86
+ def get_refunds(page_token: nil, max_results: nil, expand: "")
87
+ Responses::Base.new(Client.get("/refunds", params: { pageToken: page_token, maxResults: max_results, expand: expand }))
88
+ end
89
+
90
+ def update_refund(id, payload, idempotency_key: nil)
91
+ Responses::Base.new(
92
+ Client.patch("/refunds/%s" % id, payload: Requests::RefundUpdate.new(payload).as_hash, idempotency_key: idempotency_key)
93
+ )
94
+ end
95
+
96
+ def create_coupon(payload, idempotency_key: nil)
97
+ Responses::Base.new(
98
+ Client.post("/coupons", params: {}, payload: Requests::Coupon.new(payload).as_hash, idempotency_key: idempotency_key)
99
+ )
100
+ end
101
+
102
+ def get_coupon(id)
103
+ Responses::Base.new(Client.get("/coupons/%s" % id))
104
+ end
105
+
106
+ def get_coupons(page_token: nil, max_results: nil)
107
+ Responses::Base.new(Client.get("/coupons", params: { pageToken: page_token, maxResults: max_results }))
108
+ end
109
+
110
+ def update_coupon(id, payload, idempotency_key: nil)
111
+ Responses::Base.new(
112
+ Client.patch("/coupons/%s" % id, payload: Requests::CouponUpdate.new(payload).as_hash, idempotency_key: idempotency_key)
113
+ )
114
+ end
115
+
116
+ def create_promotion_code(payload, idempotency_key: nil)
117
+ Responses::Base.new(
118
+ Client.post("/promotion-codes", params: {}, payload: Requests::PromotionCode.new(payload).as_hash, idempotency_key: idempotency_key)
119
+ )
120
+ end
121
+
122
+ def get_promotion_code(id)
123
+ Responses::Base.new(Client.get("/promotion-codes/%s" % id))
124
+ end
125
+
126
+ def get_promotion_codes(page_token: nil, max_results: nil)
127
+ Responses::Base.new(Client.get("/promotion-codes", params: { pageToken: page_token, maxResults: max_results }))
128
+ end
129
+
130
+ def update_promotion_code(id, payload, idempotency_key: nil)
131
+ Responses::Base.new(
132
+ Client.patch("/promotion-codes/%s" % id, payload: Requests::PromotionCodeUpdate.new(payload).as_hash, idempotency_key: idempotency_key)
133
+ )
134
+ end
135
+
136
+ def create_webhook_endpoint(payload, idempotency_key: nil)
137
+ Responses::Base.new(
138
+ Client.post("/webhook-endpoints", params: {}, payload: Requests::WebhookEndpoint.new(payload).as_hash, idempotency_key: idempotency_key)
139
+ )
140
+ end
141
+
142
+ def get_webhook_endpoint(id)
143
+ Responses::Base.new(Client.get("/webhook-endpoints/%s" % id))
144
+ end
145
+
146
+ def get_webhook_endpoints(page_token: nil, max_results: nil)
147
+ Responses::Base.new(Client.get("/webhook-endpoints", params: { pageToken: page_token, maxResults: max_results }))
148
+ end
149
+
150
+ def update_webhook_endpoint(id, payload, idempotency_key: nil)
151
+ Responses::Base.new(
152
+ Client.patch("/webhook-endpoints/%s" % id, payload: Requests::WebhookEndpointUpdate.new(payload).as_hash, idempotency_key: idempotency_key)
153
+ )
154
+ end
155
+
156
+ def delete_webhook_endpoint(id)
157
+ Responses::Base.new(
158
+ Client.delete("/webhook-endpoints/%s" % id)
159
+ )
160
+ end
161
+
68
162
  def get_tokens(page_token: nil, max_results: nil)
69
163
  Responses::Base.new(Client.get("/tokens", params: { pageToken: page_token, maxResults: max_results }))
70
164
  end
@@ -81,8 +175,8 @@ module Smartpay
81
175
  Responses::Base.new(Client.put("/tokens/%s/disable" % id, idempotency_key: idempotency_key))
82
176
  end
83
177
 
84
- def delete_token(id, idempotency_key: nil)
85
- Responses::Base.new(Client.delete("/tokens/%s" % id, idempotency_key: idempotency_key))
178
+ def delete_token(id)
179
+ Responses::Base.new(Client.delete("/tokens/%s" % id))
86
180
  end
87
181
  end
88
182
  end
@@ -19,52 +19,39 @@ module Smartpay
19
19
  end
20
20
  end
21
21
 
22
-
23
22
  def post(path, params: {}, payload: {}, idempotency_key: nil)
24
- request_params = default_params.merge(params)
25
- request_payload = default_payload.merge(payload)
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
- )
35
- end
23
+ request(:post, path, params: params, payload: payload, idempotency_key: idempotency_key)
36
24
  end
37
25
 
38
26
  def put(path, params: {}, payload: {}, idempotency_key: nil)
39
- request_params = default_params.merge(params)
40
- request_payload = default_payload.merge(payload)
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
- )
50
- end
27
+ request(:put, path, params: params, payload: payload, idempotency_key: idempotency_key)
28
+ end
29
+
30
+ def patch(path, params: {}, payload: {}, idempotency_key: nil)
31
+ request(:patch, path, params: params, payload: payload, idempotency_key: idempotency_key)
51
32
  end
52
33
 
53
34
  def delete(path, params: {}, idempotency_key: nil)
35
+ request(:delete, path, params: params, idempotency_key: idempotency_key)
36
+ end
37
+
38
+ private
39
+
40
+ def request(method, path, params: {}, payload: {}, idempotency_key: nil)
54
41
  request_params = default_params.merge(params)
42
+ request_payload = default_payload.merge(payload)
55
43
  idempotency_key ||= nonce
56
44
  with_retries(retry_options) do
57
45
  RestClient::Request.execute(
58
- method: :delete,
46
+ method: method,
59
47
  url: api_url(path),
60
48
  headers: headers.merge({ Idempotency_Key: idempotency_key }).merge(params: request_params),
61
- timeout: timeout
49
+ timeout: timeout,
50
+ payload: request_payload.to_json
62
51
  )
63
52
  end
64
53
  end
65
54
 
66
- private
67
-
68
55
  def nonce
69
56
  SecureRandom.hex
70
57
  end
@@ -3,13 +3,12 @@
3
3
  require "rest-client"
4
4
 
5
5
  module Smartpay
6
+ # Smartpay configuration
6
7
  class Configuration
7
- attr_accessor :public_key, :secret_key
8
- attr_writer :request_timeout, :api_url, :checkout_url, :retry_options
8
+ attr_accessor :public_key, :secret_key, :request_timeout, :api_url, :retry_options
9
9
 
10
10
  DEFAULT_TIMEOUT_SETTING = 30
11
11
  DEFAULT_API_URL = "https://api.smartpay.co/v1"
12
- DEFAULT_CHECKOUT_URL = "https://checkout.smartpay.co"
13
12
  DEFAULT_RETRY_OPTIONS = {
14
13
  max_tries: 1,
15
14
  base_sleep_seconds: 0.5,
@@ -19,44 +18,16 @@ module Smartpay
19
18
  }.freeze
20
19
 
21
20
  def initialize
22
- @request_timeout = DEFAULT_TIMEOUT_SETTING
23
- @api_url = if in_development_mode?
24
- ENV["SMARTPAY_API_PREFIX"].downcase || DEFAULT_API_URL
25
- else
26
- DEFAULT_API_URL
27
- end
28
- @checkout_url = if in_development_mode? && ENV["SMARTPAY_CHECKOUT_URL"].is_a?(String)
29
- ENV["SMARTPAY_CHECKOUT_URL"].downcase || DEFAULT_CHECKOUT_URL
30
- else
31
- DEFAULT_CHECKOUT_URL
32
- end
33
- @retry_options = DEFAULT_RETRY_OPTIONS
34
- end
35
-
36
- def request_timeout
37
- @request_timeout || DEFAULT_TIMEOUT_SETTING
38
- end
39
-
40
- def api_url
41
- if in_development_mode?
42
- @api_url || ENV["SMARTPAY_API_PREFIX"].downcase || DEFAULT_API_URL
43
- else
44
- @api_url || DEFAULT_API_URL
45
- end
46
- end
47
-
48
- def checkout_url
49
- @checkout_url || DEFAULT_CHECKOUT_URL
50
- end
51
-
52
- def retry_options
53
- @retry_options || DEFAULT_RETRY_OPTIONS
21
+ reset
54
22
  end
55
23
 
56
- private
57
-
58
- def in_development_mode?
59
- ENV["SMARTPAY_API_PREFIX"].downcase.include?("api.smartpay") if ENV["SMARTPAY_API_PREFIX"].is_a?(String)
24
+ def reset
25
+ @request_timeout = DEFAULT_TIMEOUT_SETTING
26
+ @api_url = ENV.fetch("SMARTPAY_API_PREFIX", DEFAULT_API_URL).downcase
27
+ @retry_options = DEFAULT_RETRY_OPTIONS
28
+ @request_timeout = DEFAULT_TIMEOUT_SETTING
29
+ @public_key = ENV.fetch("SMARTPAY_PUBLIC_KEY", nil)
30
+ @secret_key = ENV.fetch("SMARTPAY_SECRET_KEY", nil)
60
31
  end
61
32
  end
62
33
  end
@@ -1,5 +1,6 @@
1
1
  module Smartpay
2
2
  module Errors
3
+ # InvalidRequestPayloadError
3
4
  class InvalidRequestPayloadError < ArgumentError
4
5
  attr_accessor :key_name
5
6
 
@@ -9,7 +10,7 @@ module Smartpay
9
10
  end
10
11
 
11
12
  def message
12
- "#{key_name} can't be blank."
13
+ "#{key_name} can't be blank or contains invalid value."
13
14
  end
14
15
  end
15
16
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Requests
5
+ # Coupon
6
+ class Coupon
7
+ include Validator
8
+
9
+ attr_accessor :payload
10
+
11
+ REQUIREMENT_KEY_NAME = %i[discountType name].freeze
12
+ AVAILABLE_DISCOUNT_TYPES = %w[percentage amount].freeze
13
+
14
+ def initialize(raw_payload)
15
+ @payload = raw_payload.transform_keys(&:to_sym)
16
+ end
17
+
18
+ def as_hash
19
+ check_requirement!(REQUIREMENT_KEY_NAME)
20
+ raise Errors::InvalidRequestPayloadError, :discountType unless AVAILABLE_DISCOUNT_TYPES.include?(payload[:discountType])
21
+ raise Errors::InvalidRequestPayloadError, :discountPercentage if payload[:discountType] == "percentage" && !payload[:discountPercentage]
22
+ raise Errors::InvalidRequestPayloadError, :discountAmount if payload[:discountType] == "amount" && !payload[:discountAmount]
23
+
24
+ normalize_payload
25
+ end
26
+
27
+ private
28
+
29
+ def normalize_payload
30
+ {
31
+ currency: payload[:currency],
32
+ discountAmount: payload[:discountAmount],
33
+ discountPercentage: payload[:discountPercentage],
34
+ discountType: payload[:discountType],
35
+ expiresAt: payload[:expiresAt],
36
+ maxRedemptionCount: payload[:maxRedemptionCount],
37
+ metadata: payload[:metadata] || {},
38
+ name: payload[:name]
39
+ }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Requests
5
+ # CouponUpdate
6
+ class CouponUpdate
7
+ attr_accessor :payload
8
+
9
+ def initialize(raw_payload)
10
+ @payload = raw_payload.transform_keys(&:to_sym)
11
+ end
12
+
13
+ def as_hash
14
+ normalize_payload
15
+ end
16
+
17
+ private
18
+
19
+ def normalize_payload
20
+ {
21
+ active: payload[:active],
22
+ name: payload[:name],
23
+ metadata: payload[:metadata] || {}
24
+ }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -2,28 +2,25 @@
2
2
 
3
3
  module Smartpay
4
4
  module Requests
5
+ # Payment
5
6
  class Payment
7
+ include Validator
8
+
6
9
  attr_accessor :payload
7
10
 
8
- REQUIREMENT_KEY_NAME = [:order, :amount, :currency].freeze
11
+ REQUIREMENT_KEY_NAME = %i[order amount currency].freeze
9
12
 
10
13
  def initialize(raw_payload)
11
14
  @payload = raw_payload.transform_keys(&:to_sym)
12
15
  end
13
16
 
14
17
  def as_hash
15
- check_requirement!
18
+ check_requirement!(REQUIREMENT_KEY_NAME)
16
19
  normalize_payload
17
20
  end
18
21
 
19
22
  private
20
23
 
21
- def check_requirement!
22
- REQUIREMENT_KEY_NAME.each do |key_name|
23
- raise Errors::InvalidRequestPayloadError, key_name unless payload.include?(key_name)
24
- end
25
- end
26
-
27
24
  def normalize_payload
28
25
  {
29
26
  order: payload.dig(:order),
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Requests
5
+ # PaymentUpdate
6
+ class PaymentUpdate
7
+ attr_accessor :payload
8
+
9
+ def initialize(raw_payload)
10
+ @payload = raw_payload.transform_keys(&:to_sym)
11
+ end
12
+
13
+ def as_hash
14
+ normalize_payload
15
+ end
16
+
17
+ private
18
+
19
+ def normalize_payload
20
+ {
21
+ reference: payload[:reference],
22
+ description: payload[:description],
23
+ metadata: payload[:metadata] || {}
24
+ }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Requests
5
+ # PromotionCode
6
+ class PromotionCode
7
+ include Validator
8
+
9
+ attr_accessor :payload
10
+
11
+ REQUIREMENT_KEY_NAME = %i[code coupon].freeze
12
+
13
+ def initialize(raw_payload)
14
+ @payload = raw_payload.transform_keys(&:to_sym)
15
+ end
16
+
17
+ def as_hash
18
+ check_requirement!(REQUIREMENT_KEY_NAME)
19
+ normalize_payload
20
+ end
21
+
22
+ private
23
+
24
+ def normalize_payload
25
+ {
26
+ active: payload[:active],
27
+ code: payload[:code],
28
+ coupon: payload[:coupon],
29
+ currency: payload[:currency],
30
+ expiresAt: payload[:expiresAt],
31
+ firstTimeTransaction: payload[:firstTimeTransaction],
32
+ maxRedemptionCount: payload[:maxRedemptionCount],
33
+ metadata: payload[:metadata] || {},
34
+ minimumAmount: payload[:minimumAmount],
35
+ onePerCustomer: payload[:onePerCustomer]
36
+ }
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Requests
5
+ # PromotionCodeUpdate
6
+ class PromotionCodeUpdate
7
+ attr_accessor :payload
8
+
9
+ def initialize(raw_payload)
10
+ @payload = raw_payload.transform_keys(&:to_sym)
11
+ end
12
+
13
+ def as_hash
14
+ normalize_payload
15
+ end
16
+
17
+ private
18
+
19
+ def normalize_payload
20
+ {
21
+ active: payload[:active],
22
+ metadata: payload[:metadata] || {}
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
@@ -2,37 +2,34 @@
2
2
 
3
3
  module Smartpay
4
4
  module Requests
5
+ # Refund
5
6
  class Refund
7
+ include Validator
8
+
6
9
  attr_accessor :payload
7
10
 
8
- REQUIREMENT_KEY_NAME = [:payment, :amount, :currency].freeze
11
+ REQUIREMENT_KEY_NAME = %i[payment amount currency].freeze
9
12
 
10
13
  def initialize(raw_payload)
11
14
  @payload = raw_payload.transform_keys(&:to_sym)
12
15
  end
13
16
 
14
17
  def as_hash
15
- check_requirement!
18
+ check_requirement!(REQUIREMENT_KEY_NAME)
16
19
  normalize_payload
17
20
  end
18
21
 
19
22
  private
20
23
 
21
- def check_requirement!
22
- REQUIREMENT_KEY_NAME.each do |key_name|
23
- raise Errors::InvalidRequestPayloadError, key_name unless payload.include?(key_name)
24
- end
25
- end
26
-
27
24
  def normalize_payload
28
25
  {
29
- payment: payload.dig(:payment),
30
- amount: payload.dig(:amount),
31
- currency: payload.dig(:currency),
32
- reason: payload.dig(:reason),
33
- reference: payload.dig(:reference),
34
- description: payload.dig(:description),
35
- metadata: payload.dig(:metadata) || {},
26
+ payment: payload[:payment],
27
+ amount: payload[:amount],
28
+ currency: payload[:currency],
29
+ reason: payload[:reason],
30
+ reference: payload[:reference],
31
+ description: payload[:description],
32
+ metadata: payload[:metadata] || {}
36
33
  }
37
34
  end
38
35
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Requests
5
+ # RefundUpdate
6
+ class RefundUpdate
7
+ attr_accessor :payload
8
+
9
+ def initialize(raw_payload)
10
+ @payload = raw_payload.transform_keys(&:to_sym)
11
+ end
12
+
13
+ def as_hash
14
+ normalize_payload
15
+ end
16
+
17
+ private
18
+
19
+ def normalize_payload
20
+ {
21
+ reference: payload[:reference],
22
+ description: payload[:description],
23
+ metadata: payload[:metadata] || {}
24
+ }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,5 +1,6 @@
1
1
  module Smartpay
2
2
  module Requests
3
+ # Validator
3
4
  module Validator
4
5
 
5
6
  private
@@ -12,4 +13,4 @@ module Smartpay
12
13
 
13
14
  end
14
15
  end
15
- end
16
+ end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Requests
5
+ # WebhookEndpoint
6
+ class WebhookEndpoint
7
+ include Validator
8
+
9
+ attr_accessor :payload
10
+
11
+ REQUIREMENT_KEY_NAME = %i[url].freeze
12
+ ALLOWED_EVENT_SUBSCRIPTIONS_VALUES = [
13
+ "order.authorized",
14
+ "order.rejected",
15
+ "order.canceled",
16
+ "payment.created",
17
+ "refund.created",
18
+ "payout.generated",
19
+ "payout.paid",
20
+ "coupon.created",
21
+ "coupon.updated",
22
+ "promotion_code.created",
23
+ "promotion_code.updated",
24
+ "merchant_user.created",
25
+ "merchant_user.password_reset",
26
+ "token.approved",
27
+ "token.rejected",
28
+ "token.deleted",
29
+ "token.disabled",
30
+ "token.enabled",
31
+ "token.created",
32
+ "token.used"
33
+ ].freeze
34
+
35
+ def initialize(raw_payload)
36
+ @payload = raw_payload.transform_keys(&:to_sym)
37
+ end
38
+
39
+ def as_hash
40
+ check_requirement!(REQUIREMENT_KEY_NAME)
41
+ validate_event_subscription
42
+ normalize_payload
43
+ end
44
+
45
+ protected
46
+
47
+ def validate_event_subscription
48
+ return unless payload[:eventSubscriptions]
49
+
50
+ payload[:eventSubscriptions].each do |event|
51
+ unless ALLOWED_EVENT_SUBSCRIPTIONS_VALUES.include?(event)
52
+ raise Errors::InvalidRequestPayloadError, "eventSubscriptions.#{event}"
53
+ end
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ def normalize_payload
60
+ {
61
+ description: payload[:description],
62
+ eventSubscriptions: payload[:eventSubscriptions],
63
+ metadata: payload[:metadata],
64
+ url: payload[:url]
65
+ }
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Requests
5
+ # WebhookEndpointUpdate
6
+ class WebhookEndpointUpdate < WebhookEndpoint
7
+
8
+ def as_hash
9
+ validate_event_subscription
10
+ normalize_payload
11
+ end
12
+
13
+ private
14
+
15
+ def normalize_payload
16
+ {
17
+ active: payload[:active],
18
+ description: payload[:description],
19
+ eventSubscriptions: payload[:eventSubscriptions],
20
+ metadata: payload[:metadata],
21
+ url: payload[:url]
22
+ }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -3,7 +3,6 @@
3
3
  module Smartpay
4
4
  module Responses
5
5
  class CheckoutSession < Base
6
-
7
6
  def redirect_url(options = {})
8
7
  url = response[:url]
9
8
 
@@ -15,16 +14,6 @@ module Smartpay
15
14
 
16
15
  url
17
16
  end
18
-
19
- private
20
-
21
- def checkout_url
22
- Smartpay.configuration.checkout_url
23
- end
24
-
25
- def public_key
26
- Smartpay.configuration.public_key
27
- end
28
17
  end
29
18
  end
30
19
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Smartpay
4
- VERSION = "0.8.0"
4
+ VERSION = "0.10.0"
5
5
  end
data/lib/smartpay.rb CHANGED
@@ -11,13 +11,22 @@ require_relative "smartpay/requests/checkout_session"
11
11
  require_relative "smartpay/requests/checkout_session_for_token"
12
12
  require_relative "smartpay/requests/order"
13
13
  require_relative "smartpay/requests/payment"
14
+ require_relative "smartpay/requests/payment_update"
14
15
  require_relative "smartpay/requests/refund"
16
+ require_relative "smartpay/requests/refund_update"
17
+ require_relative "smartpay/requests/coupon"
18
+ require_relative "smartpay/requests/coupon_update"
19
+ require_relative "smartpay/requests/promotion_code"
20
+ require_relative "smartpay/requests/promotion_code_update"
21
+ require_relative "smartpay/requests/webhook_endpoint"
22
+ require_relative "smartpay/requests/webhook_endpoint_update"
15
23
  require_relative "smartpay/responses/base"
16
24
  require_relative "smartpay/responses/checkout_session"
17
25
 
26
+ # Smartpay
18
27
  module Smartpay
19
- REJECT_REQUEST_BY_CUSTOMER = 'requested_by_customer'
20
- REJECT_FRAUDULENT = 'fraudulent'
28
+ REJECT_REQUEST_BY_CUSTOMER = "requested_by_customer"
29
+ REJECT_FRAUDULENT = "fraudulent"
21
30
 
22
31
  class << self
23
32
  attr_accessor :configuration
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.8.0
4
+ version: 0.10.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-18 00:00:00.000000000 Z
11
+ date: 2023-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -47,6 +47,7 @@ extra_rdoc_files: []
47
47
  files:
48
48
  - ".rspec"
49
49
  - ".rubocop.yml"
50
+ - ".whitesource"
50
51
  - CHANGELOG.md
51
52
  - CODE_OF_CONDUCT.md
52
53
  - Gemfile
@@ -67,11 +68,19 @@ files:
67
68
  - lib/smartpay/errors/invalid_request_payload_error.rb
68
69
  - lib/smartpay/requests/checkout_session.rb
69
70
  - lib/smartpay/requests/checkout_session_for_token.rb
71
+ - lib/smartpay/requests/coupon.rb
72
+ - lib/smartpay/requests/coupon_update.rb
70
73
  - lib/smartpay/requests/normalizer.rb
71
74
  - lib/smartpay/requests/order.rb
72
75
  - lib/smartpay/requests/payment.rb
76
+ - lib/smartpay/requests/payment_update.rb
77
+ - lib/smartpay/requests/promotion_code.rb
78
+ - lib/smartpay/requests/promotion_code_update.rb
73
79
  - lib/smartpay/requests/refund.rb
80
+ - lib/smartpay/requests/refund_update.rb
74
81
  - lib/smartpay/requests/validator.rb
82
+ - lib/smartpay/requests/webhook_endpoint.rb
83
+ - lib/smartpay/requests/webhook_endpoint_update.rb
75
84
  - lib/smartpay/responses/base.rb
76
85
  - lib/smartpay/responses/checkout_session.rb
77
86
  - lib/smartpay/version.rb