smartpay 0.6.0 → 0.7.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: 446eb4c4c827e38b97a57ecbceee0b43a932d53cdb11a6bd22215250c5897583
4
- data.tar.gz: a6e513f1be63893df11793c7b74c66cea109e715423c2f0fbbb25c8869ed5089
3
+ metadata.gz: 7b7941ccf3a44139633152fbb1ec945e3fa8687889b370fa039cbe9a28ec54fd
4
+ data.tar.gz: 4c823a7e41688255cc6d81289658e183da4b2a9d9d85a340e668dd11b7118309
5
5
  SHA512:
6
- metadata.gz: a274f5a5917cb8bef8bdabe0360f284436be5bc8f8052f7db9b6233eb6f7a18cfd798f4d1a63bd3d0a57e8e8cae1defc8f477e7e7bfe388531f13384e59245ce
7
- data.tar.gz: 58c21a2d55b9fac38a560ac032d6af7f27f8bc2a61a6477fd1dcd2e884b2791d20f734c79dcd7be8c2b5b49f32eafec8f26604438cc55bf84313a46e5d864a3d
6
+ metadata.gz: b25f291898db670b7e164f64e9d4e37b3bfbf490f69b89896cb763d5cb6f8300bb2adcaf05de6226a37f57130765caf0808ff44d043a4afa19c50de3533ba214
7
+ data.tar.gz: 0fe3d4a49422422f9ebef68453b8bfdc8ca2b4ca45f3c55b349f74575c12b221ea9b4421e6f1b96555ffc919f389cb4053739964ceab18f516d4267e8f322b0f
data/README.md CHANGED
@@ -55,35 +55,66 @@ You can find the description and requirement for request payload in [API Documen
55
55
 
56
56
  ```ruby
57
57
  payloaad = {
58
- "customerInfo": {
59
- "emailAddress": "success@smartpay.co",
60
- },
61
- "orderData": {
62
- "amount": 250,
63
- "currency": "JPY",
64
- "shippingInfo": {
65
- "address": {
66
- "line1": "line1",
67
- "locality": "locality",
68
- "postalCode": "123",
69
- "country": "JP"
70
- },
71
- },
72
- "lineItemData": [{
73
- "priceData": {
74
- "productData": {
75
- "name": "レブロン 18 LOW",
76
- },
77
- "amount": 250,
78
- "currency": "JPY",
79
- },
80
- "quantity": 1
81
- }]
82
- },
83
- "reference": "order_ref_1234567",
84
- "successUrl": "https://docs.smartpay.co/example-pages/checkout-successful",
85
- "cancelUrl": "https://docs.smartpay.co/example-pages/checkout-canceled"
86
- }
58
+ currency: "JPY",
59
+ items: [
60
+ {
61
+ name: "オリジナルス STAN SMITH",
62
+ amount: 1000,
63
+ currency: "JPY",
64
+ quantity: 1
65
+ },
66
+ {
67
+ currency: "JPY",
68
+ amount: 500,
69
+ name: "Merchant special discount",
70
+ kind: "discount"
71
+ },
72
+ {
73
+ currency: "JPY",
74
+ amount: 100,
75
+ name: "explicit taxes",
76
+ kind: "tax"
77
+ }
78
+ ],
79
+ customerInfo: {
80
+ accountAge: 20,
81
+ email: "merchant-support@smartpay.co",
82
+ firstName: "田中",
83
+ lastName: "太郎",
84
+ firstNameKana: "たなか",
85
+ lastNameKana: "たろう",
86
+ address: {
87
+ line1: "北青山 3-6-7",
88
+ line2: "青山パラシオタワー 11階",
89
+ subLocality: "",
90
+ locality: "港区",
91
+ administrativeArea: "東京都",
92
+ postalCode: "107-0061",
93
+ country: "JP"
94
+ },
95
+ dateOfBirth: "1985-06-30",
96
+ gender: "male"
97
+ },
98
+ shippingInfo: {
99
+ address: {
100
+ line1: "北青山 3-6-7",
101
+ line2: "青山パラシオタワー 11階",
102
+ subLocality: "",
103
+ locality: "港区",
104
+ administrativeArea: "東京都",
105
+ postalCode: "107-0061",
106
+ country: "JP"
107
+ },
108
+ feeAmount: 100,
109
+ feeCurrency: "JPY"
110
+ },
111
+
112
+ captureMethod: "manual",
113
+
114
+ reference: "order_ref_1234567",
115
+ successUrl: "https://docs.smartpay.co/example-pages/checkout-successful",
116
+ cancelUrl: "https://docs.smartpay.co/example-pages/checkout-canceled"
117
+ }
87
118
  ```
88
119
 
89
120
  Create a checkout session by using `Smartpay::Api.create_checkout_session` with your request payload.
@@ -170,7 +201,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
170
201
 
171
202
  ## Contributing
172
203
 
173
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/smartpay. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/smartpay/blob/master/CODE_OF_CONDUCT.md).
204
+ Bug reports and pull requests are welcome on GitHub at https://github.com/smartpay-co/sdk-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/smartpay-co/sdk-ruby/blob/master/CODE_OF_CONDUCT.md).
174
205
 
175
206
  ## License
176
207
 
@@ -178,4 +209,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
178
209
 
179
210
  ## Code of Conduct
180
211
 
181
- Everyone interacting in the Smartpay project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/smartpay/blob/master/CODE_OF_CONDUCT.md).
212
+ Everyone interacting in the Smartpay project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/smartpay-co/sdk-ruby/blob/master/CODE_OF_CONDUCT.md).
data/lib/smartpay/api.rb CHANGED
@@ -4,11 +4,25 @@ module Smartpay
4
4
  class Api
5
5
  class << self
6
6
  def create_checkout_session(payload)
7
+ return create_checkout_session_for_token(payload) if payload[:mode] == "token"
8
+
7
9
  Responses::CheckoutSession.new(
8
10
  Client.post("/checkout-sessions", params: {}, payload: Requests::CheckoutSession.new(payload).as_hash)
9
11
  )
10
12
  end
11
13
 
14
+ def create_checkout_session_for_token(payload)
15
+ Responses::CheckoutSession.new(
16
+ Client.post("/checkout-sessions", params: {}, payload: Requests::CheckoutSessionForToken.new(payload).as_hash)
17
+ )
18
+ end
19
+
20
+ def create_order(payload)
21
+ Responses::Base.new(
22
+ Client.post("/orders", params:{}, payload: Requests::Order.new(payload).as_hash)
23
+ )
24
+ end
25
+
12
26
  def get_orders(page_token: nil, max_results: nil, expand: '' )
13
27
  Responses::Base.new(Client.get("/orders", params: { pageToken: page_token, maxResults: max_results, expand: expand }))
14
28
  end
@@ -51,6 +65,25 @@ module Smartpay
51
65
  Responses::Base.new(Client.get("/refunds/%s" % id, params: { expand: expand }))
52
66
  end
53
67
 
68
+ def get_tokens(page_token: nil, max_results: nil)
69
+ Responses::Base.new(Client.get("/tokens", params: { pageToken: page_token, maxResults: max_results }))
70
+ end
71
+
72
+ def get_token(id)
73
+ Responses::Base.new(Client.get("/tokens/%s" % id))
74
+ end
75
+
76
+ def enable_token(id)
77
+ Responses::Base.new(Client.put("/tokens/%s/enable" % id))
78
+ end
79
+
80
+ def disable_token(id)
81
+ Responses::Base.new(Client.put("/tokens/%s/disable" % id))
82
+ end
83
+
84
+ def delete_token(id)
85
+ Responses::Base.new(Client.delete("/tokens/%s" % id))
86
+ end
54
87
  end
55
88
  end
56
89
  end
@@ -9,38 +9,46 @@ module Smartpay
9
9
  class << self
10
10
  def get(path, params: {})
11
11
  request_params = default_params.merge(params)
12
- response = RestClient::Request.execute(method: :get, url: api_url(path),
12
+ RestClient::Request.execute(method: :get, url: api_url(path),
13
13
  headers: headers.merge(params: request_params),
14
14
  timeout: timeout)
15
- JSON.parse(response.body, symbolize_names: true)
16
15
  end
17
16
 
18
17
  def post(path, params: {}, payload: {})
19
18
  request_params = default_params.merge(params)
20
19
  request_payload = default_payload.merge(payload)
21
20
  idempotency_key = nonce
22
- response = with_retries(:max_tries => 1, :rescue => [RestClient::BadRequest, RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout]) do
21
+ with_retries(:max_tries => 1, :rescue => [RestClient::BadRequest, RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout]) do
23
22
  RestClient::Request.execute(method: :post, url: api_url(path),
24
23
  params: request_params,
25
24
  headers: headers.merge({Idempotency_Key: idempotency_key}).merge(params: request_params),
26
25
  timeout: timeout,
27
26
  payload: request_payload.to_json)
28
27
  end
29
- JSON.parse(response.body, symbolize_names: true)
30
28
  end
31
29
 
32
30
  def put(path, params: {}, payload: {})
33
31
  request_params = default_params.merge(params).merge({'Idempotency-Key': nonce})
34
32
  request_payload = default_payload.merge(payload)
35
33
  idempotency_key = nonce
36
- response = with_retries(:max_tries => 1, :rescue => [RestClient::InternalServerError, RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout]) do
34
+ with_retries(:max_tries => 1, :rescue => [RestClient::InternalServerError, RestClient::BadGateway, RestClient::ServiceUnavailable, RestClient::GatewayTimeout]) do
37
35
  RestClient::Request.execute(method: :put, url: api_url(path),
38
36
  params: request_params,
39
37
  headers: headers.merge({Idempotency_Key: idempotency_key}).merge(params: request_params),
40
38
  timeout: timeout,
41
39
  payload: request_payload.to_json)
42
40
  end
43
- JSON.parse(response.body, symbolize_names: true)
41
+ end
42
+
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)
51
+ end
44
52
  end
45
53
 
46
54
  private
@@ -1,145 +1,51 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "validator"
4
+ require_relative "normalizer"
5
+
3
6
  module Smartpay
4
7
  module Requests
8
+ # Request Object to create a CheckoutSession for order
5
9
  class CheckoutSession
10
+ include Validator
11
+ include Normalizer
12
+
6
13
  attr_accessor :payload
7
14
 
8
- REQUIREMENT_KEY_NAME = [:successUrl, :cancelUrl, :customer, :currency, :items].freeze
9
- LINE_ITEM_KINDS = %w[product tax discount].freeze
10
- CAN_FALLBACK_KEYS = [:customer].freeze
15
+ REQUIREMENT_KEY_NAME = %i[successUrl cancelUrl customerInfo shippingInfo currency items].freeze
11
16
 
12
17
  def initialize(raw_payload)
13
18
  @payload = raw_payload.transform_keys(&:to_sym)
14
19
  end
15
20
 
16
21
  def as_hash
17
- check_requirement!
22
+ check_requirement!(REQUIREMENT_KEY_NAME)
18
23
  normalize_payload
19
24
  end
20
25
 
21
26
  private
22
27
 
23
- def check_requirement!
24
- REQUIREMENT_KEY_NAME.each do |key_name|
25
- next if CAN_FALLBACK_KEYS.include?(key_name)
26
- raise Errors::InvalidRequestPayloadError, key_name unless payload.include?(key_name)
27
- end
28
- end
29
-
30
28
  def normalize_payload
31
- shipping_info = payload.dig(:shippingInfo) || normalize_shipping(payload.dig(:shipping))
32
- if shipping_info && shipping_info[:feeCurrency].nil? && !(shipping_info[:feeAmount].nil?)
33
- shipping_info[:feeCurrency] = payload.dig(:currency)
34
- end
35
-
36
29
  normalized = {
37
- customerInfo: normalize_customer_info(payload.dig(:customerInfo) || payload.dig(:customer) || {}),
38
- captureMethod: payload.dig(:captureMethod),
39
- currency: payload.dig(:currency),
40
- description: payload.dig(:description),
41
- shippingInfo: shipping_info,
42
- items: normalize_items(payload.dig(:items)),
43
- metadata: payload.dig(:metadata) || {},
44
- reference: payload.dig(:reference),
45
- successUrl: payload.dig(:successUrl),
46
- cancelUrl: payload.dig(:cancelUrl),
30
+ customerInfo: normalize_customer_info(payload[:customerInfo] || {}),
31
+ captureMethod: payload[:captureMethod],
32
+ currency: payload[:currency],
33
+ description: payload[:description],
34
+ shippingInfo: normalize_shipping(payload[:shippingInfo], payload[:currency]),
35
+ items: normalize_items(payload[:items]),
36
+ locale: payload[:locale],
37
+ metadata: payload[:metadata] || {},
38
+ reference: payload[:reference],
39
+ successUrl: payload[:successUrl],
40
+ cancelUrl: payload[:cancelUrl]
47
41
  }
48
42
 
49
43
  normalized[:amount] = get_total_amount(normalized)
50
44
 
51
- return normalized
52
- end
53
-
54
- def normalize_customer_info(info)
55
- return if info.nil?
56
- customer = info.transform_keys(&:to_sym)
57
- {
58
- accountAge: customer.dig(:accountAge),
59
- emailAddress: customer.dig(:emailAddress) || customer.dig(:email),
60
- firstName: customer.dig(:firstName),
61
- lastName: customer.dig(:lastName),
62
- firstNameKana: customer.dig(:firstNameKana),
63
- lastNameKana: customer.dig(:lastNameKana),
64
- address: customer.dig(:address),
65
- phoneNumber: customer.dig(:phoneNumber) || customer.dig(:phone),
66
- dateOfBirth: customer.dig(:dateOfBirth),
67
- legalGender: customer.dig(:legalGender) || customer.dig(:gender),
68
- reference: customer.dig(:reference)
69
- }
70
- end
71
-
72
- def normalize_shipping(shipping)
73
- return if shipping.nil?
74
- shipping= shipping.transform_keys(&:to_sym)
75
- {
76
- address: shipping.dig(:address) || {
77
- line1: shipping.dig(:line1),
78
- line2: shipping.dig(:line2),
79
- line3: shipping.dig(:line3),
80
- line4: shipping.dig(:line4),
81
- line5: shipping.dig(:line5),
82
- subLocality: shipping.dig(:subLocality),
83
- locality: shipping.dig(:locality),
84
- administrativeArea: shipping.dig(:administrativeArea),
85
- postalCode: shipping.dig(:postalCode),
86
- country: shipping.dig(:country),
87
- },
88
- addressType: shipping.dig(:addressType),
89
- feeAmount: shipping.dig(:feeAmount),
90
- feeCurrency: shipping.dig(:feeCurrency),
91
- }
92
- end
93
-
94
- def normalize_items(data)
95
- return [] if data.nil?
96
-
97
- data.map do |item|
98
- line_item = item.transform_keys(&:to_sym)
99
- {
100
- quantity: line_item.dig(:quantity),
101
- label: line_item.dig(:label),
102
- name: line_item.dig(:name),
103
- amount: line_item.dig(:amount),
104
- currency: line_item.dig(:currency),
105
- brand: line_item.dig(:brand),
106
- categories: line_item.dig(:categories),
107
- gtin: line_item.dig(:gtin),
108
- images: line_item.dig(:images),
109
- reference: line_item.dig(:reference),
110
- url: line_item.dig(:url),
111
- description: line_item.dig(:description),
112
- priceDescription: line_item.dig(:priceDescription),
113
- productDescription: line_item.dig(:productDescription),
114
- metadata: line_item.dig(:metadata),
115
- productMetadata: line_item.dig(:productMetadata),
116
- priceMetadata: line_item.dig(:priceMetadata),
117
- kind: LINE_ITEM_KINDS.include?(line_item.dig(:kind)) ? line_item.dig(:kind) : nil
118
- }
119
- end
45
+ normalized
120
46
  end
121
47
 
122
- def get_total_amount(raw_payload = nil)
123
- total_amount = raw_payload.dig(:amount) || raw_payload.dig("amount")
124
- return total_amount if total_amount
125
48
 
126
- items = raw_payload.dig(:items)
127
-
128
- if !items.nil? && items.count.positive?
129
- total_amount = items.inject(0) { |sum, item|
130
- amount = item[:amount] || item["amount"] || 0
131
- amount = -amount if item[:kind] == "discount"
132
- sum + amount
133
- }
134
- end
135
-
136
- shipping_fee = raw_payload.dig(:shippingInfo, :feeAmount) ||
137
- raw_payload.dig(:shippingInfo, "feeAmount") ||
138
- 0
139
- total_amount += shipping_fee
140
-
141
- return total_amount
142
- end
143
49
  end
144
50
  end
145
51
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "validator"
4
+ require_relative "normalizer"
5
+
6
+ module Smartpay
7
+ module Requests
8
+ # Request Object to create a CheckoutSession for token
9
+ class CheckoutSessionForToken
10
+ include Validator
11
+ include Normalizer
12
+
13
+ attr_accessor :payload
14
+
15
+ REQUIREMENT_KEY_NAME = %i[successUrl cancelUrl customerInfo mode].freeze
16
+
17
+ def initialize(raw_payload)
18
+ @payload = raw_payload.transform_keys(&:to_sym)
19
+ raise Errors::InvalidRequestPayloadError, "mode" unless payload[:mode] == "token"
20
+ end
21
+
22
+ def as_hash
23
+ check_requirement!(REQUIREMENT_KEY_NAME)
24
+ normalize_payload
25
+ end
26
+
27
+ private
28
+
29
+ def normalize_payload
30
+ {
31
+ mode: payload[:mode],
32
+ customerInfo: normalize_customer_info(payload[:customerInfo] || {}),
33
+ metadata: payload[:metadata] || {},
34
+ locale: payload[:locale],
35
+ reference: payload[:reference],
36
+ successUrl: payload[:successUrl],
37
+ cancelUrl: payload[:cancelUrl]
38
+ }
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,108 @@
1
+ module Smartpay
2
+ module Requests
3
+ module Normalizer
4
+
5
+ LINE_ITEM_KINDS = %w[product tax discount].freeze
6
+
7
+ private
8
+
9
+ def normalize_customer_info(info)
10
+ return if info.nil?
11
+
12
+ customer = info.transform_keys(&:to_sym)
13
+ {
14
+ accountAge: customer[:accountAge],
15
+ emailAddress: customer[:emailAddress] || customer[:email],
16
+ firstName: customer[:firstName],
17
+ lastName: customer[:lastName],
18
+ firstNameKana: customer[:firstNameKana],
19
+ lastNameKana: customer[:lastNameKana],
20
+ address: customer[:address],
21
+ phoneNumber: customer[:phoneNumber] || customer[:phone],
22
+ dateOfBirth: customer[:dateOfBirth],
23
+ legalGender: customer[:legalGender] || customer[:gender],
24
+ reference: customer[:reference]
25
+ }
26
+ end
27
+
28
+ def normalize_shipping(shipping, fallback_currency = nil)
29
+ return if shipping.nil?
30
+
31
+ shipping = shipping.transform_keys(&:to_sym)
32
+ normalized_shipping = {
33
+ address: shipping[:address] || {
34
+ line1: shipping[:line1],
35
+ line2: shipping[:line2],
36
+ line3: shipping[:line3],
37
+ line4: shipping[:line4],
38
+ line5: shipping[:line5],
39
+ subLocality: shipping[:subLocality],
40
+ locality: shipping[:locality],
41
+ administrativeArea: shipping[:administrativeArea],
42
+ postalCode: shipping[:postalCode],
43
+ country: shipping[:country]
44
+ },
45
+ addressType: shipping[:addressType],
46
+ feeAmount: shipping[:feeAmount],
47
+ feeCurrency: shipping[:feeCurrency]
48
+ }
49
+
50
+ if normalized_shipping && normalized_shipping[:feeCurrency].nil? && !(normalized_shipping[:feeAmount].nil?)
51
+ normalized_shipping[:feeCurrency] = fallback_currency
52
+ end
53
+ normalized_shipping
54
+ end
55
+
56
+ def normalize_items(data)
57
+ return [] if data.nil?
58
+
59
+ data.map do |item|
60
+ line_item = item.transform_keys(&:to_sym)
61
+ {
62
+ quantity: line_item[:quantity],
63
+ label: line_item[:label],
64
+ name: line_item[:name],
65
+ amount: line_item[:amount],
66
+ currency: line_item[:currency],
67
+ brand: line_item[:brand],
68
+ categories: line_item[:categories],
69
+ gtin: line_item[:gtin],
70
+ images: line_item[:images],
71
+ reference: line_item[:reference],
72
+ url: line_item[:url],
73
+ description: line_item[:description],
74
+ priceDescription: line_item[:priceDescription],
75
+ productDescription: line_item[:productDescription],
76
+ metadata: line_item[:metadata],
77
+ productMetadata: line_item[:productMetadata],
78
+ priceMetadata: line_item[:priceMetadata],
79
+ kind: LINE_ITEM_KINDS.include?(line_item[:kind]) ? line_item[:kind] : nil
80
+ }
81
+ end
82
+ end
83
+
84
+ def get_total_amount(raw_payload = nil)
85
+ total_amount = raw_payload[:amount] || raw_payload["amount"]
86
+ return total_amount if total_amount
87
+
88
+ items = raw_payload[:items]
89
+
90
+ if !items.nil? && items.count.positive?
91
+ total_amount = items.inject(0) { |sum, item|
92
+ amount = item[:amount] || item["amount"] || 0
93
+ amount = -amount if item[:kind] == "discount"
94
+ sum + amount
95
+ }
96
+ end
97
+
98
+ shipping_fee = raw_payload.dig(:shippingInfo, :feeAmount) ||
99
+ raw_payload.dig(:shippingInfo, "feeAmount") ||
100
+ 0
101
+ total_amount += shipping_fee
102
+
103
+ total_amount
104
+ end
105
+
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "validator"
4
+ require_relative "normalizer"
5
+
6
+ module Smartpay
7
+ module Requests
8
+ # Request Object to create a CheckoutSession for order
9
+ class Order
10
+ include Validator
11
+ include Normalizer
12
+
13
+ attr_accessor :payload
14
+
15
+ REQUIREMENT_KEY_NAME = %i[token customerInfo shippingInfo currency items].freeze
16
+
17
+ def initialize(raw_payload)
18
+ @payload = raw_payload.transform_keys(&:to_sym)
19
+ end
20
+
21
+ def as_hash
22
+ check_requirement!(REQUIREMENT_KEY_NAME)
23
+ normalize_payload
24
+ end
25
+
26
+ private
27
+
28
+ def normalize_payload
29
+ normalized = {
30
+ token: payload[:token],
31
+ customerInfo: normalize_customer_info(payload[:customerInfo] || {}),
32
+ captureMethod: payload[:captureMethod],
33
+ currency: payload[:currency],
34
+ shippingInfo: normalize_shipping(payload[:shippingInfo], payload[:currency]),
35
+ items: normalize_items(payload[:items]),
36
+ metadata: payload[:metadata] || {},
37
+ reference: payload[:reference]
38
+ }
39
+
40
+ normalized[:amount] = get_total_amount(normalized)
41
+
42
+ normalized
43
+ end
44
+
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,15 @@
1
+ module Smartpay
2
+ module Requests
3
+ module Validator
4
+
5
+ private
6
+
7
+ def check_requirement!(requirement_keys = [])
8
+ requirement_keys.each do |key_name|
9
+ raise Errors::InvalidRequestPayloadError, key_name unless payload.include?(key_name)
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -5,8 +5,13 @@ module Smartpay
5
5
  class Base
6
6
  attr_reader :response
7
7
 
8
- def initialize(response)
9
- @response = response
8
+ def initialize(raw_response)
9
+ @raw_response = raw_response
10
+ @response = begin
11
+ JSON.parse(@raw_response.body, symbolize_names: true)
12
+ rescue JSON::ParserError
13
+ { body: @raw_response.body }
14
+ end if @raw_response
10
15
  end
11
16
 
12
17
  def as_hash
@@ -16,6 +21,10 @@ module Smartpay
16
21
  def as_json
17
22
  @response.to_json
18
23
  end
24
+
25
+ def http_code
26
+ @raw_response.code
27
+ end
19
28
  end
20
29
  end
21
30
  end
@@ -12,7 +12,7 @@ module Smartpay
12
12
 
13
13
  return "#{url}#{qs}"
14
14
  end
15
-
15
+
16
16
  url
17
17
  end
18
18
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Smartpay
4
- VERSION = "0.6.0"
4
+ VERSION = "0.7.0"
5
5
  end
data/lib/smartpay.rb CHANGED
@@ -8,6 +8,8 @@ require_relative "smartpay/client"
8
8
  require_relative "smartpay/api"
9
9
  require_relative "smartpay/errors/invalid_request_payload_error"
10
10
  require_relative "smartpay/requests/checkout_session"
11
+ require_relative "smartpay/requests/checkout_session_for_token"
12
+ require_relative "smartpay/requests/order"
11
13
  require_relative "smartpay/requests/payment"
12
14
  require_relative "smartpay/requests/refund"
13
15
  require_relative "smartpay/responses/base"
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.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Smartpay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-22 00:00:00.000000000 Z
11
+ date: 2023-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -66,8 +66,12 @@ files:
66
66
  - lib/smartpay/configuration.rb
67
67
  - lib/smartpay/errors/invalid_request_payload_error.rb
68
68
  - lib/smartpay/requests/checkout_session.rb
69
+ - lib/smartpay/requests/checkout_session_for_token.rb
70
+ - lib/smartpay/requests/normalizer.rb
71
+ - lib/smartpay/requests/order.rb
69
72
  - lib/smartpay/requests/payment.rb
70
73
  - lib/smartpay/requests/refund.rb
74
+ - lib/smartpay/requests/validator.rb
71
75
  - lib/smartpay/responses/base.rb
72
76
  - lib/smartpay/responses/checkout_session.rb
73
77
  - lib/smartpay/version.rb