smartpay 0.2.18 → 0.3.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: 3897098e68300e9004b822ba8f797040b02c00362428cee023ba598415bd4a54
4
- data.tar.gz: dd42d0ad91f798d88fd765270975e9d61dde01cd3b52143c0d762bb1577f71b6
3
+ metadata.gz: 047abea76f72b96fe9f59b2f7e384ef8871d001ef60ae0e6064f767823f273ba
4
+ data.tar.gz: bd164be4d8ae9747a3331f68192e65e82061bc0627ec4dcdf79389645c9c1828
5
5
  SHA512:
6
- metadata.gz: 05df4d994fd49a80bd58d56bd58469639aa0ad50f7688d874cce1b412e8366fe5afb82acf6082c00e40b3b0a7491bba4a7242117e65ab22e8fd326cbd0b9e65a
7
- data.tar.gz: ed67c91a5e4f43991a362d77c2c2ac4f430265c14f3c236941c26f482a162683bdddbc10700e82344b9b923c698bbbd9126cd8c1cb7975bc1506807de2888a80
6
+ metadata.gz: 635fbaaf5b186283fcb438f34176aa925f013576098b8535d1e7e1a9e59431db1acb16a7a545d77434bc114465ff3675768c763e084a5aabd01dd7df4f47be2f
7
+ data.tar.gz: 053a91da14d3fa5097b3ca70b5106878ab564680769c8ca8a9b70036c5915240980492dd5cecbe7b743c5f843db032311aec0e075b403893b68070e522451358
data/.rubocop.yml CHANGED
@@ -1,13 +1,13 @@
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
+ 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
data/README.md CHANGED
@@ -1,181 +1,181 @@
1
- # Smartpay Ruby Library
2
-
3
- The Smartpay Ruby library offers easy access to Smartpay API from applications written in Ruby.
4
-
5
- ## Documentation
6
-
7
- - [Payment Flow](https://docs.smartpay.co/#payment_flow)
8
- - [API Document](https://api-doc.smartpay.co)
9
-
10
- ## Requirements
11
-
12
- - Ruby 2.6+
13
- - Smartpay `API keys & secrets`. You can find your credential at the `settings > credentials` page on your [dashboard](https://dashboard.smartpay.co/settings/credentials).
14
-
15
- ## Installation
16
-
17
- If you use system built-in Ruby, you might need to be the `sudoer` to be able to `sudo` in some of the following steps. We recommend you to use either [rbenv](https://github.com/rbenv/rbenv) or [rvm](https://rvm.io/) to have your own non-global Ruby to avoid potential permission issues.
18
-
19
- Once you have your Ruby in place, add the latest version of Smartpay to your project's dependencies:
20
-
21
- ```sh
22
- gem install smartpay
23
- ```
24
-
25
- If you want to build the gem yourself from source:
26
-
27
- ```sh
28
- gem build smartpay.gemspec
29
- ```
30
-
31
- ### Bundler
32
-
33
- If you are installing via bundler, make sure that you use the `https` resource in your Gemfile to avoid the risk of gems being compromised:
34
-
35
- ```ruby
36
- source 'https://rubygems.org'
37
-
38
- gem 'smartpay'
39
- ```
40
-
41
- ## Usage
42
-
43
- The package needs to be configured with your own API keys, you can find them on your [dashboard](https://dashboard.smartpay.co/settings/credentials).
44
-
45
- ```ruby
46
- Smartpay.configure do |config|
47
- config.public_key = '<YOUR_PUBLIC_KEY>' # the one starts with pk_test_
48
- config.secret_key = '<YOUR_SECRET_KEY>' # the one starts with sk_test_
49
- end
50
- ```
51
-
52
- ### Create Checkout session
53
-
54
- You can find the description and requirement for request payload in [API Document](https://api-doc.smartpay.co/#8a3538b1-530c-448c-8bae-4a41cdf0b8fd).
55
-
56
- ```ruby
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
- }
87
- ```
88
-
89
- Create a checkout session by using `Smartpay::Api.create_checkout_session` with your request payload.
90
-
91
- ```ruby
92
- session = Smartpay::Api.create_checkout_session(payload)
93
- ```
94
-
95
- Then, you can redirect your customer to the session url by calling `redirect_url`:
96
-
97
- ```ruby
98
- session.redirect_url
99
- ```
100
-
101
- ## Use with your favorite frameworks
102
-
103
- ### Ruby on Rails (RoR)
104
-
105
- #### Install Rails
106
-
107
- ```sh
108
- gem install rails
109
- ```
110
-
111
- #### Create your app
112
-
113
- ```sh
114
- rails new app-with-smartpay
115
- ```
116
-
117
- #### Add Smartpay
118
-
119
- ```sh
120
- cd app-with-smartpay
121
- bundle add smartpay
122
- ```
123
-
124
- #### Generator
125
-
126
- ```sh
127
- bundle exec rails generate smartpay:install
128
- ```
129
-
130
- This introduces 4 changes for a pre-built Smartpay Checkout example:
131
-
132
- > 1. A new initializer - `config/initializers/smartpay.rb`. You will have to update the `config.public_key` and `config.secret_key` with your own credentials to make this work.
133
- > 2. A new controller - `app/controllers/smartpays_controller.rb`. This is where you can see how a Checkout session is configured & created.
134
- > 3. A new view - `app/views/smartpays/index.html.erb`. The minimum frontend required.
135
- > 4. A new route in config/routes.rb.
136
-
137
- #### Fill in your API keys
138
-
139
- Edit the keys with your own credentials in `config/initializers/smartpay.rb`.
140
-
141
- ```ruby
142
- ...
143
- config.public_key = '<YOUR_PUBLIC_KEY>' # the one starts with pk_test_
144
- config.secret_key = '<YOUR_SECRET_KEY>' # the one starts with sk_test_
145
- ...
146
- ```
147
-
148
- #### Start your server
149
-
150
- ```sh
151
- bundle exec rails server
152
- ```
153
-
154
- ### Test with Checkout Session
155
-
156
- Visit [http://localhost:3000/smartpays](http://localhost:3000/smartpays).
157
-
158
- Click the `checkout` button on the page to be redirected to Smartpay's Checkout.
159
-
160
- To try out different cases, you can use the following test credit cards for different cases:
161
-
162
- - Payment succeeds: `4242 4242 4242 4242`
163
- - Payment is declined: `4100 0000 0000 0019`
164
-
165
- ## Development
166
-
167
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
168
-
169
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
170
-
171
- ## Contributing
172
-
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).
174
-
175
- ## License
176
-
177
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
178
-
179
- ## Code of Conduct
180
-
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).
1
+ # Smartpay Ruby Library
2
+
3
+ The Smartpay Ruby library offers easy access to Smartpay API from applications written in Ruby.
4
+
5
+ ## Documentation
6
+
7
+ - [Payment Flow](https://docs.smartpay.co/#payment_flow)
8
+ - [API Document](https://api-doc.smartpay.co)
9
+
10
+ ## Requirements
11
+
12
+ - Ruby 2.6+
13
+ - Smartpay `API keys & secrets`. You can find your credential at the `settings > credentials` page on your [dashboard](https://dashboard.smartpay.co/settings/credentials).
14
+
15
+ ## Installation
16
+
17
+ If you use system built-in Ruby, you might need to be the `sudoer` to be able to `sudo` in some of the following steps. We recommend you to use either [rbenv](https://github.com/rbenv/rbenv) or [rvm](https://rvm.io/) to have your own non-global Ruby to avoid potential permission issues.
18
+
19
+ Once you have your Ruby in place, add the latest version of Smartpay to your project's dependencies:
20
+
21
+ ```sh
22
+ gem install smartpay
23
+ ```
24
+
25
+ If you want to build the gem yourself from source:
26
+
27
+ ```sh
28
+ gem build smartpay.gemspec
29
+ ```
30
+
31
+ ### Bundler
32
+
33
+ If you are installing via bundler, make sure that you use the `https` resource in your Gemfile to avoid the risk of gems being compromised:
34
+
35
+ ```ruby
36
+ source 'https://rubygems.org'
37
+
38
+ gem 'smartpay'
39
+ ```
40
+
41
+ ## Usage
42
+
43
+ The package needs to be configured with your own API keys, you can find them on your [dashboard](https://dashboard.smartpay.co/settings/credentials).
44
+
45
+ ```ruby
46
+ Smartpay.configure do |config|
47
+ config.public_key = '<YOUR_PUBLIC_KEY>' # the one starts with pk_test_
48
+ config.secret_key = '<YOUR_SECRET_KEY>' # the one starts with sk_test_
49
+ end
50
+ ```
51
+
52
+ ### Create Checkout session
53
+
54
+ You can find the description and requirement for request payload in [API Document](https://api-doc.smartpay.co/#8a3538b1-530c-448c-8bae-4a41cdf0b8fd).
55
+
56
+ ```ruby
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
+ }
87
+ ```
88
+
89
+ Create a checkout session by using `Smartpay::Api.create_checkout_session` with your request payload.
90
+
91
+ ```ruby
92
+ session = Smartpay::Api.create_checkout_session(payload)
93
+ ```
94
+
95
+ Then, you can redirect your customer to the session url by calling `redirect_url`:
96
+
97
+ ```ruby
98
+ session.redirect_url
99
+ ```
100
+
101
+ ## Use with your favorite frameworks
102
+
103
+ ### Ruby on Rails (RoR)
104
+
105
+ #### Install Rails
106
+
107
+ ```sh
108
+ gem install rails
109
+ ```
110
+
111
+ #### Create your app
112
+
113
+ ```sh
114
+ rails new app-with-smartpay
115
+ ```
116
+
117
+ #### Add Smartpay
118
+
119
+ ```sh
120
+ cd app-with-smartpay
121
+ bundle add smartpay
122
+ ```
123
+
124
+ #### Generator
125
+
126
+ ```sh
127
+ bundle exec rails generate smartpay:install
128
+ ```
129
+
130
+ This introduces 4 changes for a pre-built Smartpay Checkout example:
131
+
132
+ > 1. A new initializer - `config/initializers/smartpay.rb`. You will have to update the `config.public_key` and `config.secret_key` with your own credentials to make this work.
133
+ > 2. A new controller - `app/controllers/smartpays_controller.rb`. This is where you can see how a Checkout session is configured & created.
134
+ > 3. A new view - `app/views/smartpays/index.html.erb`. The minimum frontend required.
135
+ > 4. A new route in config/routes.rb.
136
+
137
+ #### Fill in your API keys
138
+
139
+ Edit the keys with your own credentials in `config/initializers/smartpay.rb`.
140
+
141
+ ```ruby
142
+ ...
143
+ config.public_key = '<YOUR_PUBLIC_KEY>' # the one starts with pk_test_
144
+ config.secret_key = '<YOUR_SECRET_KEY>' # the one starts with sk_test_
145
+ ...
146
+ ```
147
+
148
+ #### Start your server
149
+
150
+ ```sh
151
+ bundle exec rails server
152
+ ```
153
+
154
+ ### Test with Checkout Session
155
+
156
+ Visit [http://localhost:3000/smartpays](http://localhost:3000/smartpays).
157
+
158
+ Click the `checkout` button on the page to be redirected to Smartpay's Checkout.
159
+
160
+ To try out different cases, you can use the following test credit cards for different cases:
161
+
162
+ - Payment succeeds: `4242 4242 4242 4242`
163
+ - Payment is declined: `4100 0000 0000 0019`
164
+
165
+ ## Development
166
+
167
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
168
+
169
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
170
+
171
+ ## Contributing
172
+
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).
174
+
175
+ ## License
176
+
177
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
178
+
179
+ ## Code of Conduct
180
+
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).
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,45 +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,
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
+ # 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,48 +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 = 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
+ # 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,120 +1,120 @@
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, :currency, :items].freeze
9
- CAN_FALLBACK_KEYS = [:customerInfo].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
- shipping_info = payload.dig(:shippingInfo) || normalize_shipping(payload.dig(:shipping))
31
- if shipping_info && shipping_info[:feeCurrency].nil? && !(shipping_info[:feeAmount].nil?)
32
- shipping_info[:feeCurrency] = payload.dig(:currency)
33
- end
34
-
35
- {
36
- customerInfo: normalize_customer_info(payload.dig(:customerInfo) || payload.dig(:customer) || {}),
37
- amount: payload.dig(:amount),
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),
47
- test: payload.dig(:test) || false
48
- }
49
- end
50
-
51
- def normalize_customer_info(info)
52
- return if info.nil?
53
- customer = info.transform_keys(&:to_sym)
54
- {
55
- accountAge: customer.dig(:accountAge),
56
- emailAddress: customer.dig(:emailAddress) || customer.dig(:email),
57
- firstName: customer.dig(:firstName),
58
- lastName: customer.dig(:lastName),
59
- firstNameKana: customer.dig(:firstNameKana),
60
- lastNameKana: customer.dig(:lastNameKana),
61
- address: customer.dig(:address),
62
- phoneNumber: customer.dig(:phoneNumber) || customer.dig(:phone),
63
- dateOfBirth: customer.dig(:dateOfBirth),
64
- legalGender: customer.dig(:legalGender) || customer.dig(:gender),
65
- reference: customer.dig(:reference)
66
- }
67
- end
68
-
69
- def normalize_shipping(shipping)
70
- return if shipping.nil?
71
- shipping= shipping.transform_keys(&:to_sym)
72
- {
73
- address: shipping.dig(:address) || {
74
- line1: shipping.dig(:line1),
75
- line2: shipping.dig(:line2),
76
- line3: shipping.dig(:line3),
77
- line4: shipping.dig(:line4),
78
- line5: shipping.dig(:line5),
79
- subLocality: shipping.dig(:subLocality),
80
- locality: shipping.dig(:locality),
81
- administrativeArea: shipping.dig(:administrativeArea),
82
- postalCode: shipping.dig(:postalCode),
83
- country: shipping.dig(:country),
84
- },
85
- addressType: shipping.dig(:addressType),
86
- feeAmount: shipping.dig(:feeAmount),
87
- feeCurrency: shipping.dig(:feeCurrency),
88
- }
89
- end
90
-
91
- def normalize_items(data)
92
- return [] if data.nil?
93
-
94
- data.map do |item|
95
- line_item = item.transform_keys(&:to_sym)
96
- {
97
- quantity: line_item.dig(:quantity),
98
- label: line_item.dig(:label),
99
- name: line_item.dig(:name),
100
- description: line_item.dig(:description),
101
- amount: line_item.dig(:amount),
102
- currency: line_item.dig(:currency),
103
- brand: line_item.dig(:brand),
104
- categories: line_item.dig(:categories),
105
- gtin: line_item.dig(:gtin),
106
- images: line_item.dig(:images),
107
- reference: line_item.dig(:reference),
108
- url: line_item.dig(:url),
109
- description: line_item.dig(:description),
110
- priceDescription: line_item.dig(:priceDescription),
111
- productDescription: line_item.dig(:productDescription),
112
- metadata: line_item.dig(:metadata),
113
- productMetadata: line_item.dig(:productMetadata),
114
- priceMetadata: line_item.dig(:priceMetadata)
115
- }
116
- end
117
- end
118
- end
119
- end
120
- 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, :currency, :items].freeze
9
+ CAN_FALLBACK_KEYS = [:customerInfo].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
+ shipping_info = payload.dig(:shippingInfo) || normalize_shipping(payload.dig(:shipping))
31
+ if shipping_info && shipping_info[:feeCurrency].nil? && !(shipping_info[:feeAmount].nil?)
32
+ shipping_info[:feeCurrency] = payload.dig(:currency)
33
+ end
34
+
35
+ {
36
+ customerInfo: normalize_customer_info(payload.dig(:customerInfo) || payload.dig(:customer) || {}),
37
+ amount: payload.dig(:amount),
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),
47
+ test: payload.dig(:test) || false
48
+ }
49
+ end
50
+
51
+ def normalize_customer_info(info)
52
+ return if info.nil?
53
+ customer = info.transform_keys(&:to_sym)
54
+ {
55
+ accountAge: customer.dig(:accountAge),
56
+ emailAddress: customer.dig(:emailAddress) || customer.dig(:email),
57
+ firstName: customer.dig(:firstName),
58
+ lastName: customer.dig(:lastName),
59
+ firstNameKana: customer.dig(:firstNameKana),
60
+ lastNameKana: customer.dig(:lastNameKana),
61
+ address: customer.dig(:address),
62
+ phoneNumber: customer.dig(:phoneNumber) || customer.dig(:phone),
63
+ dateOfBirth: customer.dig(:dateOfBirth),
64
+ legalGender: customer.dig(:legalGender) || customer.dig(:gender),
65
+ reference: customer.dig(:reference)
66
+ }
67
+ end
68
+
69
+ def normalize_shipping(shipping)
70
+ return if shipping.nil?
71
+ shipping= shipping.transform_keys(&:to_sym)
72
+ {
73
+ address: shipping.dig(:address) || {
74
+ line1: shipping.dig(:line1),
75
+ line2: shipping.dig(:line2),
76
+ line3: shipping.dig(:line3),
77
+ line4: shipping.dig(:line4),
78
+ line5: shipping.dig(:line5),
79
+ subLocality: shipping.dig(:subLocality),
80
+ locality: shipping.dig(:locality),
81
+ administrativeArea: shipping.dig(:administrativeArea),
82
+ postalCode: shipping.dig(:postalCode),
83
+ country: shipping.dig(:country),
84
+ },
85
+ addressType: shipping.dig(:addressType),
86
+ feeAmount: shipping.dig(:feeAmount),
87
+ feeCurrency: shipping.dig(:feeCurrency),
88
+ }
89
+ end
90
+
91
+ def normalize_items(data)
92
+ return [] if data.nil?
93
+
94
+ data.map do |item|
95
+ line_item = item.transform_keys(&:to_sym)
96
+ {
97
+ quantity: line_item.dig(:quantity),
98
+ label: line_item.dig(:label),
99
+ name: line_item.dig(:name),
100
+ description: line_item.dig(:description),
101
+ amount: line_item.dig(:amount),
102
+ currency: line_item.dig(:currency),
103
+ brand: line_item.dig(:brand),
104
+ categories: line_item.dig(:categories),
105
+ gtin: line_item.dig(:gtin),
106
+ images: line_item.dig(:images),
107
+ reference: line_item.dig(:reference),
108
+ url: line_item.dig(:url),
109
+ description: line_item.dig(:description),
110
+ priceDescription: line_item.dig(:priceDescription),
111
+ productDescription: line_item.dig(:productDescription),
112
+ metadata: line_item.dig(:metadata),
113
+ productMetadata: line_item.dig(:productMetadata),
114
+ priceMetadata: line_item.dig(:priceMetadata)
115
+ }
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -1,40 +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(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
+ # 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.18"
4
+ VERSION = "0.3.0"
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.18
4
+ version: 0.3.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-02-15 00:00:00.000000000 Z
11
+ date: 2022-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -90,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
90
90
  - !ruby/object:Gem::Version
91
91
  version: '0'
92
92
  requirements: []
93
- rubygems_version: 3.0.9
93
+ rubygems_version: 3.2.32
94
94
  signing_key:
95
95
  specification_version: 4
96
96
  summary: The Smartpay Ruby SDK offers easy access to Smartpay API from applications