smartpay 0.2.18 → 0.3.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: 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