smartpay 0.2.13 → 0.2.17

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: a93499d26437ed9bcbddd74143329b00aaed999b2bb7616522d9df800399b4e4
4
- data.tar.gz: c57ef079d70823f37deec9861ea9296b2b91ca388eef6922532f6b9429be0d75
3
+ metadata.gz: 4d28befc09bec0649be0542e440f1acbcde630f38984e375986809f94a9bedec
4
+ data.tar.gz: 7888dac202c056b57e476039d731a3b297833eacde05b98631300d0de1258270
5
5
  SHA512:
6
- metadata.gz: f00cf5883edfae53b67da79a467dd2548c2c13c95ff86a471276151d2180e9e691471143b6f646e578a87933d94fc3e922a5552c9472164019ba9c811a5b44d4
7
- data.tar.gz: 04b5476f14c7a0f5aeacf2f9f41718cf535537a73782e04d9446ec0b137da1329bf4e3e109c90d3b445ad33c917d4e9d2ad7ba73e0c20d7d4a87dbfecd58d079
6
+ metadata.gz: 7c7fe94acaa28d87d3568c3e5fedc49fb61ae7ab85b401fbbbf985bda50664620c5afa8a194d6f7cb2d503fe8f7298bb782cdd7cd067a8a106e1b48d928578a0
7
+ data.tar.gz: cb754e4460b339788a8cec5e688b08725dfb684156651539cf005b4b8dbe6950d5ffb22f852c0ec6035496a40d8194d80d81b6cbc44c6b10ddc2cb3a2874817f
data/.rubocop.yml CHANGED
@@ -1,13 +1,13 @@
1
- AllCops:
2
- TargetRubyVersion: 2.4
3
-
4
- Style/StringLiterals:
5
- Enabled: true
6
- EnforcedStyle: double_quotes
7
-
8
- Style/StringLiteralsInInterpolation:
9
- Enabled: true
10
- EnforcedStyle: double_quotes
11
-
12
- Layout/LineLength:
13
- Max: 120
1
+ AllCops:
2
+ TargetRubyVersion: 2.5
3
+
4
+ Style/StringLiterals:
5
+ Enabled: true
6
+ EnforcedStyle: double_quotes
7
+
8
+ Style/StringLiteralsInInterpolation:
9
+ Enabled: true
10
+ EnforcedStyle: double_quotes
11
+
12
+ Layout/LineLength:
13
+ Max: 120
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Smartpay.configure do |config|
4
- config.api_url = 'https://api.smartpay.co/smartpayments'
5
- config.checkout_url = 'https://checkout.smartpay.co'
6
4
  config.public_key = 'pk_test_'
7
5
  config.secret_key = 'sk_test_'
8
6
  end
data/lib/smartpay/api.rb CHANGED
@@ -1,13 +1,13 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartpay
4
- class Api
5
- class << self
6
- def create_checkout_session(payload)
7
- Responses::CheckoutSession.new(
8
- Client.post('/checkout-sessions', Requests::CheckoutSession.new(payload).as_hash)
9
- )
10
- end
11
- end
12
- end
13
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ class Api
5
+ class << self
6
+ def create_checkout_session(payload)
7
+ Responses::CheckoutSession.new(
8
+ Client.post("/checkout-sessions", Requests::CheckoutSession.new(payload).as_hash)
9
+ )
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,44 +1,45 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rest-client'
4
-
5
- module Smartpay
6
- class Client
7
- class << self
8
- def post(path, payload = {})
9
- request_payload = default_payload.merge(payload)
10
- response = RestClient::Request.execute(method: :post, url: api_url(path), headers: headers, timeout: timeout, payload: request_payload.to_json)
11
- JSON.parse(response.body, symbolize_names: true)
12
- end
13
-
14
- private
15
-
16
- def api_url(path)
17
- "#{Smartpay.configuration.api_url}#{path}"
18
- end
19
-
20
- def timeout
21
- Smartpay.configuration.post_timeout
22
- end
23
-
24
- def headers
25
- {
26
- accept: :json,
27
- content_type: :json,
28
- Authorization: "Basic #{secret_key}"
29
- }
30
- end
31
-
32
- def secret_key
33
- Smartpay.configuration.secret_key
34
- end
35
-
36
- def default_payload
37
- {
38
- 'dev-lang': :ruby,
39
- 'sdk-version': Smartpay::VERSION
40
- }.freeze
41
- end
42
- end
43
- end
44
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "rest-client"
4
+
5
+ module Smartpay
6
+ class Client
7
+ class << self
8
+ def post(path, payload = {})
9
+ request_payload = default_payload.merge(payload)
10
+ response = RestClient::Request.execute(method: :post, url: api_url(path), headers: headers, timeout: timeout,
11
+ payload: request_payload.to_json)
12
+ JSON.parse(response.body, symbolize_names: true)
13
+ end
14
+
15
+ private
16
+
17
+ def api_url(path)
18
+ "#{Smartpay.configuration.api_url}#{path}"
19
+ end
20
+
21
+ def timeout
22
+ Smartpay.configuration.post_timeout
23
+ end
24
+
25
+ def headers
26
+ {
27
+ accept: :json,
28
+ content_type: :json,
29
+ Authorization: "Basic #{secret_key}"
30
+ }
31
+ end
32
+
33
+ def secret_key
34
+ Smartpay.configuration.secret_key
35
+ end
36
+
37
+ def default_payload
38
+ {
39
+ 'dev-lang': :ruby,
40
+ 'sdk-version': Smartpay::VERSION
41
+ }.freeze
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,30 +1,48 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartpay
4
- class Configuration
5
- attr_accessor :public_key, :secret_key
6
- attr_writer :post_timeout, :api_url, :checkout_url
7
-
8
- DEFAULT_TIMEOUT_SETTING = 30
9
- DEFAULT_API_URL = 'https://api.smartpay.co/v1'
10
- DEFAULT_CHECKOUT_URL = 'https://checkout.smartpay.co'
11
-
12
- def initialize
13
- @post_timeout = DEFAULT_TIMEOUT_SETTING
14
- @api_url = DEFAULT_API_URL
15
- @checkout_url = DEFAULT_CHECKOUT_URL
16
- end
17
-
18
- def post_timeout
19
- @post_timeout || DEFAULT_TIMEOUT_SETTING
20
- end
21
-
22
- def api_url
23
- @api_url || DEFAULT_API_URL
24
- end
25
-
26
- def checkout_url
27
- @checkout_url || DEFAULT_CHECKOUT_URL
28
- end
29
- end
30
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ class Configuration
5
+ attr_accessor :public_key, :secret_key
6
+ attr_writer :post_timeout, :api_url, :checkout_url
7
+
8
+ DEFAULT_TIMEOUT_SETTING = 30
9
+ DEFAULT_API_URL = "https://api.smartpay.co/v1"
10
+ DEFAULT_CHECKOUT_URL = "https://checkout.smartpay.co"
11
+
12
+ def initialize
13
+ @post_timeout = DEFAULT_TIMEOUT_SETTING
14
+ @api_url = if in_development_mode?
15
+ ENV["SMARTPAY_API_PREFIX"].downcase || DEFAULT_API_URL
16
+ else
17
+ DEFAULT_API_URL
18
+ end
19
+ @checkout_url = if in_development_mode? && ENV["SMARTPAY_CHECKOUT_URL"].is_a?(String)
20
+ ENV["SMARTPAY_CHECKOUT_URL"].downcase || DEFAULT_CHECKOUT_URL
21
+ else
22
+ DEFAULT_CHECKOUT_URL
23
+ end
24
+ end
25
+
26
+ def post_timeout
27
+ @post_timeout || DEFAULT_TIMEOUT_SETTING
28
+ end
29
+
30
+ def api_url
31
+ if in_development_mode?
32
+ @api_url || ENV["SMARTPAY_API_PREFIX"].downcase || DEFAULT_API_URL
33
+ else
34
+ @api_url || DEFAULT_API_URL
35
+ end
36
+ end
37
+
38
+ def checkout_url
39
+ @checkout_url || DEFAULT_CHECKOUT_URL
40
+ end
41
+
42
+ private
43
+
44
+ def in_development_mode?
45
+ ENV["SMARTPAY_API_PREFIX"].downcase.include?("api.smartpay") if ENV["SMARTPAY_API_PREFIX"].is_a?(String)
46
+ end
47
+ end
48
+ end
@@ -1,194 +1,209 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartpay
4
- module Requests
5
- class CheckoutSession
6
- attr_accessor :payload
7
-
8
- REQUIREMENT_KEY_NAME = [:successURL, :cancelURL, :customerInfo, :orderData].freeze
9
- CAN_FALLBACK_KEYS = [:customerInfo, :orderData].freeze
10
-
11
- def initialize(raw_payload)
12
- @payload = raw_payload.transform_keys(&:to_sym)
13
- end
14
-
15
- def as_hash
16
- check_requirement!
17
- normalize_payload
18
- end
19
-
20
- private
21
-
22
- def check_requirement!
23
- REQUIREMENT_KEY_NAME.each do |key_name|
24
- next if CAN_FALLBACK_KEYS.include?(key_name)
25
- raise Errors::InvalidRequestPayloadError, key_name unless payload.include?(key_name)
26
- end
27
- end
28
-
29
- def normalize_payload
30
- currency = get_currency
31
- total_amount = get_total_amount
32
-
33
- {
34
- customerInfo: normalize_customer_info(payload.dig(:customerInfo) || payload.dig(:customer) || {}),
35
- orderData: normalize_order_data(payload.dig(:orderData) || {
36
- amount: total_amount,
37
- currency: currency,
38
- captureMethod: payload.dig(:captureMethod),
39
- confirmationMethod: payload.dig(:confirmationMethod),
40
- coupons: payload.dig(:coupons),
41
- shippingInfo: payload.dig(:shippingInfo) || normalize_shipping(payload.dig(:shipping)),
42
- lineItemData: payload.dig(:orderData, :lineItemData) || payload.dig(:items),
43
- description: payload.dig(:orderDescription),
44
- metadata: payload.dig(:orderMetadata)
45
- }),
46
- reference: payload.dig(:reference),
47
- metadata: payload.dig(:metadata),
48
- successUrl: payload.dig(:successURL),
49
- cancelUrl: payload.dig(:cancelURL),
50
- test: payload.dig(:test) || false
51
- }
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
- }
90
- end
91
-
92
- def normalize_order_data(order)
93
- return if order.nil?
94
- order = order.transform_keys(&:to_sym)
95
- {
96
- amount: order.dig(:amount),
97
- currency: order.dig(:currency),
98
- captureMethod: order.dig(:captureMethod),
99
- confirmationMethod: order.dig(:confirmationMethod),
100
- coupons: order.dig(:coupons),
101
- shippingInfo: order.dig(:shippingInfo),
102
- lineItemData: normalize_line_items(order.dig(:lineItemData) || order.dig(:items))
103
- }
104
- end
105
-
106
- def normalize_line_items(data)
107
- return [] if data.nil?
108
-
109
- data.map do |item|
110
- line_item = item.transform_keys(&:to_sym)
111
- {
112
- price: line_item.dig(:price),
113
- priceData: normalize_price_data(line_item.dig(:priceData) || {
114
- productData: {
115
- name: line_item.dig(:name),
116
- brand: line_item.dig(:brand),
117
- categories: line_item.dig(:categories),
118
- gtin: line_item.dig(:gtin),
119
- images: line_item.dig(:images),
120
- reference: line_item.dig(:reference),
121
- url: line_item.dig(:url),
122
- description: line_item.dig(:productDescription),
123
- metadata: line_item.dig(:productMetadata)
124
- },
125
- amount: line_item.dig(:amount),
126
- currency: line_item.dig(:currency),
127
- label: line_item.dig(:label),
128
- description: line_item.dig(:priceDescription),
129
- metadata: line_item.dig(:priceMetadata)
130
- }),
131
- quantity: line_item.dig(:quantity),
132
- description: line_item.dig(:description),
133
- metadata: line_item.dig(:metadata)
134
- }
135
- end
136
- end
137
-
138
- def normalize_price_data(data)
139
- return if data.nil?
140
- data = data.transform_keys(&:to_sym)
141
- {
142
- productData: normalize_product_data(data.dig(:productData) || {}),
143
- amount: data.dig(:amount),
144
- currency: data.dig(:currency),
145
- metadata: data.dig(:metadata)
146
- }
147
- end
148
-
149
- def normalize_product_data(product)
150
- return if product.nil?
151
- product = product.transform_keys(&:to_sym)
152
- {
153
- name: product.dig(:name),
154
- brand: product.dig(:brand),
155
- categories: product.dig(:categories),
156
- description: product.dig(:description),
157
- gtin: product.dig(:gtin),
158
- images: product.dig(:images),
159
- reference: product.dig(:reference),
160
- url: product.dig(:url),
161
- metadata: product.dig(:metadata)
162
- }
163
- end
164
-
165
- def get_currency
166
- currency = payload.dig(:orderData, :currency) || payload.dig(:orderData, 'currency')
167
- if currency.nil?
168
- items = get_items
169
- if !items.nil? && items.count > 0
170
- currency = items.first.dig(:currency) || items.first.dig('currency')
171
- end
172
- end
173
- currency
174
- end
175
-
176
- def get_total_amount
177
- total_amount = payload.dig(:orderData, :amount) || payload.dig(:orderData, 'amount')
178
- if total_amount.nil?
179
- items = get_items
180
- if !items.nil? && items.count > 0
181
- total_amount = items.inject(0) { |sum, item| sum + (item[:amount] || item['amount'] || 0) }
182
- end
183
- end
184
- total_amount
185
- end
186
-
187
- def get_items
188
- @items ||= payload.dig(:orderData, :lineItemData, :priceData) ||
189
- payload.dig(:orderData, 'lineItemData', 'priceData') ||
190
- payload.dig(:items)
191
- end
192
- end
193
- end
194
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Requests
5
+ class CheckoutSession
6
+ attr_accessor :payload
7
+
8
+ REQUIREMENT_KEY_NAME = [:successURL, :cancelURL, :customerInfo, :orderData].freeze
9
+ CAN_FALLBACK_KEYS = [:customerInfo, :orderData].freeze
10
+
11
+ def initialize(raw_payload)
12
+ @payload = raw_payload.transform_keys(&:to_sym)
13
+ end
14
+
15
+ def as_hash
16
+ check_requirement!
17
+ normalize_payload
18
+ end
19
+
20
+ private
21
+
22
+ def check_requirement!
23
+ REQUIREMENT_KEY_NAME.each do |key_name|
24
+ next if CAN_FALLBACK_KEYS.include?(key_name)
25
+ raise Errors::InvalidRequestPayloadError, key_name unless payload.include?(key_name)
26
+ end
27
+ end
28
+
29
+ def normalize_payload
30
+ currency = get_currency
31
+ total_amount = get_total_amount
32
+ shippingInfo = payload.dig(:shippingInfo) || normalize_shipping(payload.dig(:shipping))
33
+ shippingInfo[:feeCurrency] = currency if shippingInfo && shippingInfo[:feeCurrency].nil? && !(shippingInfo[:feeAmount].nil?)
34
+
35
+ {
36
+ customerInfo: normalize_customer_info(payload.dig(:customerInfo) || payload.dig(:customer) || {}),
37
+ orderData: normalize_order_data(payload.dig(:orderData) || {
38
+ amount: total_amount,
39
+ currency: currency,
40
+ captureMethod: payload.dig(:captureMethod),
41
+ confirmationMethod: payload.dig(:confirmationMethod),
42
+ coupons: payload.dig(:coupons),
43
+ shippingInfo: shippingInfo,
44
+ lineItemData: payload.dig(:orderData, :lineItemData) || payload.dig(:items),
45
+ description: payload.dig(:orderDescription),
46
+ metadata: payload.dig(:orderMetadata),
47
+ reference: payload.dig(:reference),
48
+ }),
49
+ successUrl: payload.dig(:successURL),
50
+ cancelUrl: payload.dig(:cancelURL),
51
+ test: payload.dig(:test) || false
52
+ }
53
+ end
54
+
55
+ def normalize_customer_info(info)
56
+ return if info.nil?
57
+ customer = info.transform_keys(&:to_sym)
58
+ {
59
+ accountAge: customer.dig(:accountAge),
60
+ emailAddress: customer.dig(:emailAddress) || customer.dig(:email),
61
+ firstName: customer.dig(:firstName),
62
+ lastName: customer.dig(:lastName),
63
+ firstNameKana: customer.dig(:firstNameKana),
64
+ lastNameKana: customer.dig(:lastNameKana),
65
+ address: customer.dig(:address),
66
+ phoneNumber: customer.dig(:phoneNumber) || customer.dig(:phone),
67
+ dateOfBirth: customer.dig(:dateOfBirth),
68
+ legalGender: customer.dig(:legalGender) || customer.dig(:gender),
69
+ reference: customer.dig(:reference)
70
+ }
71
+ end
72
+
73
+ def normalize_shipping(shipping)
74
+ return if shipping.nil?
75
+ shipping= shipping.transform_keys(&:to_sym)
76
+ {
77
+ address: shipping.dig(:address) || {
78
+ line1: shipping.dig(:line1),
79
+ line2: shipping.dig(:line2),
80
+ line3: shipping.dig(:line3),
81
+ line4: shipping.dig(:line4),
82
+ line5: shipping.dig(:line5),
83
+ subLocality: shipping.dig(:subLocality),
84
+ locality: shipping.dig(:locality),
85
+ administrativeArea: shipping.dig(:administrativeArea),
86
+ postalCode: shipping.dig(:postalCode),
87
+ country: shipping.dig(:country),
88
+ },
89
+ addressType: shipping.dig(:addressType),
90
+ feeAmount: shipping.dig(:feeAmount),
91
+ feeCurrency: shipping.dig(:feeCurrency),
92
+ }
93
+ end
94
+
95
+ def normalize_order_data(order)
96
+ return if order.nil?
97
+ order = order.transform_keys(&:to_sym)
98
+ {
99
+ amount: order.dig(:amount),
100
+ currency: order.dig(:currency),
101
+ captureMethod: order.dig(:captureMethod),
102
+ confirmationMethod: order.dig(:confirmationMethod),
103
+ coupons: order.dig(:coupons),
104
+ shippingInfo: order.dig(:shippingInfo),
105
+ lineItemData: normalize_line_items(order.dig(:lineItemData) || order.dig(:items)),
106
+ metadata: order.dig(:metadata) || {},
107
+ reference: order.dig(:reference)
108
+ }
109
+ end
110
+
111
+ def normalize_line_items(data)
112
+ return [] if data.nil?
113
+
114
+ data.map do |item|
115
+ line_item = item.transform_keys(&:to_sym)
116
+ {
117
+ price: line_item.dig(:price),
118
+ priceData: normalize_price_data(line_item.dig(:priceData) || {
119
+ productData: {
120
+ name: line_item.dig(:name),
121
+ brand: line_item.dig(:brand),
122
+ categories: line_item.dig(:categories),
123
+ gtin: line_item.dig(:gtin),
124
+ images: line_item.dig(:images),
125
+ reference: line_item.dig(:reference),
126
+ url: line_item.dig(:url),
127
+ description: line_item.dig(:productDescription),
128
+ metadata: line_item.dig(:productMetadata)
129
+ },
130
+ amount: line_item.dig(:amount),
131
+ currency: line_item.dig(:currency),
132
+ label: line_item.dig(:label),
133
+ description: line_item.dig(:priceDescription),
134
+ metadata: line_item.dig(:priceMetadata)
135
+ }),
136
+ quantity: line_item.dig(:quantity),
137
+ description: line_item.dig(:description),
138
+ metadata: line_item.dig(:metadata)
139
+ }
140
+ end
141
+ end
142
+
143
+ def normalize_price_data(data)
144
+ return if data.nil?
145
+ data = data.transform_keys(&:to_sym)
146
+ {
147
+ productData: normalize_product_data(data.dig(:productData) || {}),
148
+ amount: data.dig(:amount),
149
+ currency: data.dig(:currency),
150
+ metadata: data.dig(:metadata)
151
+ }
152
+ end
153
+
154
+ def normalize_product_data(product)
155
+ return if product.nil?
156
+ product = product.transform_keys(&:to_sym)
157
+ {
158
+ name: product.dig(:name),
159
+ brand: product.dig(:brand),
160
+ categories: product.dig(:categories),
161
+ description: product.dig(:description),
162
+ gtin: product.dig(:gtin),
163
+ images: product.dig(:images),
164
+ reference: product.dig(:reference),
165
+ url: product.dig(:url),
166
+ metadata: product.dig(:metadata)
167
+ }
168
+ end
169
+
170
+ def get_currency
171
+ currency = payload.dig(:orderData, :currency) || payload.dig(:orderData, 'currency')
172
+ if currency.nil?
173
+ items = get_items
174
+ if !items.nil? && items.count > 0
175
+ currency = items.first.dig(:currency) || items.first.dig('currency')
176
+ end
177
+ end
178
+ currency
179
+ end
180
+
181
+ def get_total_amount
182
+ total_amount = payload.dig(:orderData, :amount) || payload.dig(:orderData, 'amount')
183
+
184
+ if total_amount.nil?
185
+ items = get_items
186
+
187
+ if !items.nil? && items.count > 0
188
+ total_amount = items.inject(0) { |sum, item| sum + (item[:amount] || item['amount'] || 0) }
189
+ end
190
+
191
+ shipping_fee = payload.dig(:orderData, :shippingInfo, :feeAmount) ||
192
+ payload.dig(:orderData, :shippingInfo, 'feeAmount') ||
193
+ payload.dig(:shipping, :feeAmount) ||
194
+ payload.dig(:shipping, 'feeAmount') ||
195
+ 0
196
+ total_amount = shipping_fee + (total_amount || 0)
197
+ end
198
+
199
+ total_amount
200
+ end
201
+
202
+ def get_items
203
+ @items ||= payload.dig(:orderData, :lineItemData, :priceData) ||
204
+ payload.dig(:orderData, 'lineItemData', 'priceData') ||
205
+ payload.dig(:items)
206
+ end
207
+ end
208
+ end
209
+ end
@@ -1,35 +1,40 @@
1
- # frozen_string_literal: true
2
-
3
- module Smartpay
4
- module Responses
5
- class CheckoutSession
6
- attr_reader :response
7
-
8
- def initialize(response)
9
- @response = response
10
- end
11
-
12
- def redirect_url
13
- URI.escape("#{checkout_url}/login?session-id=#{response[:id]}&public-key=#{public_key}")
14
- end
15
-
16
- def as_hash
17
- @response
18
- end
19
-
20
- def as_json
21
- @response.to_json
22
- end
23
-
24
- private
25
-
26
- def checkout_url
27
- Smartpay.configuration.checkout_url
28
- end
29
-
30
- def public_key
31
- Smartpay.configuration.public_key
32
- end
33
- end
34
- end
35
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Smartpay
4
+ module Responses
5
+ class CheckoutSession
6
+ attr_reader :response
7
+
8
+ def initialize(response)
9
+ @response = response
10
+ end
11
+
12
+ def redirect_url(options = {})
13
+ url = "#{checkout_url}/login"
14
+ promotion_code = options[:promotion_code] || response[:metadata][:__promotion_code__] || nil
15
+ qs = "session-id=#{URI.encode_www_form_component(response[:id])}&public-key=#{URI.encode_www_form_component(public_key)}"
16
+ qs = "#{qs}&promotion-code=#{URI.encode_www_form_component(promotion_code)}" if promotion_code
17
+
18
+ "#{url}?#{qs}"
19
+ end
20
+
21
+ def as_hash
22
+ @response
23
+ end
24
+
25
+ def as_json
26
+ @response.to_json
27
+ end
28
+
29
+ private
30
+
31
+ def checkout_url
32
+ Smartpay.configuration.checkout_url
33
+ end
34
+
35
+ def public_key
36
+ Smartpay.configuration.public_key
37
+ end
38
+ end
39
+ end
40
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Smartpay
4
- VERSION = "0.2.13"
4
+ VERSION = "0.2.17"
5
5
  end
data/lib/smartpay.rb CHANGED
@@ -1,25 +1,25 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- require_relative "smartpay/version"
6
- require_relative 'smartpay/configuration'
7
- require_relative 'smartpay/client'
8
- require_relative 'smartpay/api'
9
- require_relative 'smartpay/errors/invalid_request_payload_error'
10
- require_relative 'smartpay/requests/checkout_session'
11
- require_relative 'smartpay/responses/checkout_session'
12
-
13
- module Smartpay
14
- class << self
15
- attr_accessor :configuration
16
-
17
- def configuration
18
- @configuration ||= Smartpay::Configuration.new
19
- end
20
-
21
- def configure
22
- yield(configuration)
23
- end
24
- end
25
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "json"
4
+
5
+ require_relative "smartpay/version"
6
+ require_relative "smartpay/configuration"
7
+ require_relative "smartpay/client"
8
+ require_relative "smartpay/api"
9
+ require_relative "smartpay/errors/invalid_request_payload_error"
10
+ require_relative "smartpay/requests/checkout_session"
11
+ require_relative "smartpay/responses/checkout_session"
12
+
13
+ module Smartpay
14
+ class << self
15
+ attr_accessor :configuration
16
+
17
+ def configuration
18
+ @configuration ||= Smartpay::Configuration.new
19
+ end
20
+
21
+ def configure
22
+ yield(configuration)
23
+ end
24
+ end
25
+ 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.2.13
4
+ version: 0.2.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Smartpay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-27 00:00:00.000000000 Z
11
+ date: 2022-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client