pcp-server-ruby-sdk 1.8.0 → 1.9.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 +4 -4
- data/CHANGELOG.md +8 -0
- data/api-definition.yaml +5011 -5012
- data/lib/PCP-server-Ruby-SDK/endpoints/checkout_api_client.rb +3 -1
- data/lib/PCP-server-Ruby-SDK/endpoints/commerce_case_api_client.rb +5 -4
- data/lib/PCP-server-Ruby-SDK/endpoints/order_management_checkout_actions_api_client.rb +25 -0
- data/lib/PCP-server-Ruby-SDK/models/cart_item_supplier_references.rb +2 -0
- data/lib/PCP-server-Ruby-SDK/models/commerce_cases_response.rb +18 -0
- data/lib/PCP-server-Ruby-SDK/models/required_field_validation.rb +108 -0
- data/lib/PCP-server-Ruby-SDK/version.rb +1 -1
- data/lib/PCP-server-Ruby-SDK.rb +4 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- data/spec/endpoints/checkout_api_client_spec.rb +22 -0
- data/spec/endpoints/order_management_checkout_actions_api_client_spec.rb +51 -0
- data/spec/models/required_field_validation_spec.rb +551 -0
- metadata +12 -8
|
@@ -109,7 +109,7 @@ module PCPServerSDK
|
|
|
109
109
|
# @param commerce_case_id [String] The commerce case identifier
|
|
110
110
|
# @param checkout_id [String] The checkout identifier
|
|
111
111
|
# @return [nil]
|
|
112
|
-
def
|
|
112
|
+
def delete_checkout_request(merchant_id, commerce_case_id, checkout_id)
|
|
113
113
|
raise TypeError, MERCHANT_ID_REQUIRED_ERROR if merchant_id.nil? || merchant_id.empty?
|
|
114
114
|
raise TypeError, COMMERCE_CASE_ID_REQUIRED_ERROR if commerce_case_id.nil? || commerce_case_id.empty?
|
|
115
115
|
raise TypeError, CHECKOUT_ID_REQUIRED_ERROR if checkout_id.nil? || checkout_id.empty?
|
|
@@ -125,6 +125,8 @@ module PCPServerSDK
|
|
|
125
125
|
nil
|
|
126
126
|
end
|
|
127
127
|
|
|
128
|
+
alias remove_checkout_request delete_checkout_request
|
|
129
|
+
|
|
128
130
|
# Complete a checkout
|
|
129
131
|
# @param merchant_id [String] The merchant identifier
|
|
130
132
|
# @param commerce_case_id [String] The commerce case identifier
|
|
@@ -3,6 +3,7 @@ require 'json'
|
|
|
3
3
|
require 'uri'
|
|
4
4
|
require_relative 'base_api_client'
|
|
5
5
|
require_relative '../models/commerce_case_response'
|
|
6
|
+
require_relative '../models/commerce_cases_response'
|
|
6
7
|
require_relative '../models/create_commerce_case_response'
|
|
7
8
|
require_relative '../models/customer'
|
|
8
9
|
|
|
@@ -54,8 +55,8 @@ module PCPServerSDK
|
|
|
54
55
|
|
|
55
56
|
# Get commerce cases
|
|
56
57
|
# @param merchant_id [String] The merchant identifier
|
|
57
|
-
# @param query_params [PCPServerSDK::
|
|
58
|
-
# @return [
|
|
58
|
+
# @param query_params [PCPServerSDK::Queries::GetCommerceCasesQuery] The query parameters
|
|
59
|
+
# @return [PCPServerSDK::Models::CommerceCasesResponse] The commerce cases
|
|
59
60
|
def get_commerce_cases_request(merchant_id, query_params = nil)
|
|
60
61
|
raise TypeError, MERCHANT_ID_REQUIRED_ERROR if merchant_id.nil? || merchant_id.empty?
|
|
61
62
|
|
|
@@ -70,8 +71,8 @@ module PCPServerSDK
|
|
|
70
71
|
headers: {}
|
|
71
72
|
}
|
|
72
73
|
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
response = make_api_call(url.to_s, request_init)
|
|
75
|
+
deserialize_json(response, PCPServerSDK::Models::CommerceCasesResponse)
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
# Update a commerce case
|
|
@@ -4,6 +4,7 @@ require 'uri'
|
|
|
4
4
|
require_relative 'base_api_client'
|
|
5
5
|
require_relative '../models/cancel_response'
|
|
6
6
|
require_relative '../models/deliver_response'
|
|
7
|
+
require_relative '../models/complete_payment_response'
|
|
7
8
|
require_relative '../models/order_response'
|
|
8
9
|
require_relative '../models/return_response'
|
|
9
10
|
module PCPServerSDK
|
|
@@ -22,6 +23,7 @@ module PCPServerSDK
|
|
|
22
23
|
# @return [PCPServerSDK::Models::OrderResponse] The order response
|
|
23
24
|
def create_order(merchant_id, commerce_case_id, checkout_id, payload)
|
|
24
25
|
validate_ids(merchant_id, commerce_case_id, checkout_id)
|
|
26
|
+
raise TypeError, PAYLOAD_REQUIRED_ERROR if payload.nil?
|
|
25
27
|
|
|
26
28
|
url = URI.join(get_config.host, "/v1/#{merchant_id}/commerce-cases/#{commerce_case_id}/checkouts/#{checkout_id}/order")
|
|
27
29
|
|
|
@@ -35,6 +37,28 @@ module PCPServerSDK
|
|
|
35
37
|
deserialize_json(response, PCPServerSDK::Models::OrderResponse)
|
|
36
38
|
end
|
|
37
39
|
|
|
40
|
+
# Complete an order
|
|
41
|
+
# @param merchant_id [String] The merchant identifier
|
|
42
|
+
# @param commerce_case_id [String] The commerce case identifier
|
|
43
|
+
# @param checkout_id [String] The checkout identifier
|
|
44
|
+
# @param payload [PCPServerSDK::Models::CompleteOrderRequest] The complete order request
|
|
45
|
+
# @return [PCPServerSDK::Models::CompletePaymentResponse] The complete payment response
|
|
46
|
+
def complete_order(merchant_id, commerce_case_id, checkout_id, payload)
|
|
47
|
+
validate_ids(merchant_id, commerce_case_id, checkout_id)
|
|
48
|
+
raise TypeError, PAYLOAD_REQUIRED_ERROR if payload.nil?
|
|
49
|
+
|
|
50
|
+
url = URI.join(get_config.host, "/v1/#{merchant_id}/commerce-cases/#{commerce_case_id}/checkouts/#{checkout_id}/complete-order")
|
|
51
|
+
|
|
52
|
+
request_init = {
|
|
53
|
+
method: 'POST',
|
|
54
|
+
headers: { 'Content-Type' => 'application/json' },
|
|
55
|
+
body: JSON.generate(payload)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
response = make_api_call(url.to_s, request_init)
|
|
59
|
+
deserialize_json(response, PCPServerSDK::Models::CompletePaymentResponse)
|
|
60
|
+
end
|
|
61
|
+
|
|
38
62
|
# Deliver an order
|
|
39
63
|
# @param merchant_id [String] The merchant identifier
|
|
40
64
|
# @param commerce_case_id [String] The commerce case identifier
|
|
@@ -43,6 +67,7 @@ module PCPServerSDK
|
|
|
43
67
|
# @return [PCPServerSDK::Models::DeliverResponse] The deliver response
|
|
44
68
|
def deliver_order(merchant_id, commerce_case_id, checkout_id, payload)
|
|
45
69
|
validate_ids(merchant_id, commerce_case_id, checkout_id)
|
|
70
|
+
raise TypeError, PAYLOAD_REQUIRED_ERROR if payload.nil?
|
|
46
71
|
|
|
47
72
|
url = URI.join(get_config.host, "/v1/#{merchant_id}/commerce-cases/#{commerce_case_id}/checkouts/#{checkout_id}/deliver")
|
|
48
73
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require_relative 'commerce_case_response'
|
|
2
|
+
|
|
3
|
+
module PCPServerSDK
|
|
4
|
+
module Models
|
|
5
|
+
# Top-level response for listing Commerce Cases.
|
|
6
|
+
class CommerceCasesResponse < Array
|
|
7
|
+
def self.build_from_hash(attributes)
|
|
8
|
+
return new unless attributes.is_a?(Array)
|
|
9
|
+
|
|
10
|
+
new.concat(attributes.map { |item| PCPServerSDK::Models::CommerceCaseResponse.build_from_hash(item) })
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def to_body
|
|
14
|
+
map { |item| item.respond_to?(:to_body) ? item.to_body : item }
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
require 'psych'
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
module PCPServerSDK
|
|
6
|
+
module Models
|
|
7
|
+
module RequiredFieldValidation
|
|
8
|
+
SCHEMA_PATH = File.expand_path('../../../api-definition.yaml', __dir__)
|
|
9
|
+
|
|
10
|
+
class << self
|
|
11
|
+
def install!
|
|
12
|
+
required_attributes_by_class.each do |class_name, required_attributes|
|
|
13
|
+
next unless PCPServerSDK::Models.const_defined?(class_name, false)
|
|
14
|
+
|
|
15
|
+
klass = PCPServerSDK::Models.const_get(class_name)
|
|
16
|
+
next unless klass.is_a?(Class)
|
|
17
|
+
next if klass < Array
|
|
18
|
+
next unless klass.respond_to?(:attribute_map)
|
|
19
|
+
next if klass.instance_variable_defined?(:@required_field_validation_installed)
|
|
20
|
+
|
|
21
|
+
klass.prepend(build_validation_module(required_attributes))
|
|
22
|
+
klass.singleton_class.prepend(build_class_validation_module)
|
|
23
|
+
klass.instance_variable_set(:@required_field_validation_installed, true)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
private
|
|
28
|
+
|
|
29
|
+
def build_validation_module(required_attributes)
|
|
30
|
+
Module.new do
|
|
31
|
+
define_method(:initialize) do |attributes = {}|
|
|
32
|
+
@required_field_validation_initializing = true
|
|
33
|
+
initialization_succeeded = false
|
|
34
|
+
|
|
35
|
+
begin
|
|
36
|
+
super(attributes)
|
|
37
|
+
initialization_succeeded = true
|
|
38
|
+
ensure
|
|
39
|
+
@required_field_validation_initializing = false
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
if initialization_succeeded && attributes.is_a?(Hash) && !attributes.empty?
|
|
43
|
+
validate_required_fields!
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
define_method(:validate_required_fields!) do
|
|
48
|
+
missing_attributes = required_attributes.select { |attribute| public_send(attribute).nil? }
|
|
49
|
+
return if missing_attributes.empty?
|
|
50
|
+
|
|
51
|
+
raise ArgumentError, "#{missing_attributes.first} cannot be nil"
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
define_method(:to_hash) do
|
|
55
|
+
validate_required_fields!
|
|
56
|
+
super()
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
required_attributes.each do |attribute|
|
|
60
|
+
define_method("#{attribute}=") do |value|
|
|
61
|
+
if value.nil? && !@required_field_validation_initializing
|
|
62
|
+
raise ArgumentError, "#{attribute} cannot be nil"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
super(value)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
def build_class_validation_module
|
|
71
|
+
Module.new do
|
|
72
|
+
def build_from_hash(attributes)
|
|
73
|
+
object = super(attributes)
|
|
74
|
+
return object if object.nil?
|
|
75
|
+
return object if object.is_a?(Array)
|
|
76
|
+
|
|
77
|
+
object.send(:validate_required_fields!) if object.respond_to?(:validate_required_fields!, true)
|
|
78
|
+
object
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def required_attributes_by_class
|
|
84
|
+
@required_attributes_by_class ||= begin
|
|
85
|
+
spec = Psych.safe_load_file(SCHEMA_PATH, permitted_classes: [Time, Date, Symbol], aliases: true)
|
|
86
|
+
schemas = spec.dig('components', 'schemas') || {}
|
|
87
|
+
|
|
88
|
+
schemas.each_with_object({}) do |(schema_name, schema), mapping|
|
|
89
|
+
required_properties = Array(schema['required'])
|
|
90
|
+
next if required_properties.empty?
|
|
91
|
+
next unless PCPServerSDK::Models.const_defined?(schema_name, false)
|
|
92
|
+
|
|
93
|
+
klass = PCPServerSDK::Models.const_get(schema_name)
|
|
94
|
+
next unless klass.is_a?(Class)
|
|
95
|
+
next unless klass.respond_to?(:attribute_map)
|
|
96
|
+
|
|
97
|
+
attribute_map = klass.attribute_map.invert
|
|
98
|
+
required_attributes = required_properties.filter_map { |property| attribute_map[property.to_sym] }
|
|
99
|
+
next if required_attributes.empty?
|
|
100
|
+
|
|
101
|
+
mapping[schema_name] = required_attributes.freeze
|
|
102
|
+
end.freeze
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
data/lib/PCP-server-Ruby-SDK.rb
CHANGED
|
@@ -52,6 +52,7 @@ require_relative 'PCP-server-Ruby-SDK/models/checkout_references'
|
|
|
52
52
|
require_relative 'PCP-server-Ruby-SDK/models/checkout_response'
|
|
53
53
|
require_relative 'PCP-server-Ruby-SDK/models/checkouts_response'
|
|
54
54
|
require_relative 'PCP-server-Ruby-SDK/models/commerce_case_response'
|
|
55
|
+
require_relative 'PCP-server-Ruby-SDK/models/commerce_cases_response'
|
|
55
56
|
require_relative 'PCP-server-Ruby-SDK/models/company_information'
|
|
56
57
|
require_relative 'PCP-server-Ruby-SDK/models/complete_financing_payment_method_specific_input'
|
|
57
58
|
require_relative 'PCP-server-Ruby-SDK/models/complete_order_request'
|
|
@@ -175,6 +176,7 @@ require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_data_hea
|
|
|
175
176
|
require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_method'
|
|
176
177
|
require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_method_type'
|
|
177
178
|
require_relative 'PCP-server-Ruby-SDK/models/applepay/apple_pay_payment_token'
|
|
179
|
+
require_relative 'PCP-server-Ruby-SDK/models/required_field_validation'
|
|
178
180
|
|
|
179
181
|
# Queries
|
|
180
182
|
require_relative 'PCP-server-Ruby-SDK/queries/get_checkouts_query'
|
|
@@ -191,6 +193,8 @@ require_relative 'PCP-server-Ruby-SDK/request_header_generator'
|
|
|
191
193
|
require_relative 'PCP-server-Ruby-SDK/version'
|
|
192
194
|
|
|
193
195
|
module PCPServerSDK
|
|
196
|
+
PCPServerSDK::Models::RequiredFieldValidation.install!
|
|
197
|
+
|
|
194
198
|
class << self
|
|
195
199
|
# Customize default settings for the SDK using block.
|
|
196
200
|
# PCPServerSDK.configure do |config|
|
data/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pcp-serversdk-ruby",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pcp-serversdk-ruby",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.9.0",
|
|
10
10
|
"devDependencies": {
|
|
11
11
|
"@commitlint/cli": "19.4.0",
|
|
12
12
|
"@commitlint/config-conventional": "19.2.2",
|
data/package.json
CHANGED
|
@@ -255,6 +255,28 @@ RSpec.describe PCPServerSDK::Endpoints::CheckoutApiClient do
|
|
|
255
255
|
end
|
|
256
256
|
end
|
|
257
257
|
|
|
258
|
+
describe '#remove_checkout_request' do
|
|
259
|
+
context 'when request is successful' do
|
|
260
|
+
let(:response) { double('Response', body: '{}', code: 200) }
|
|
261
|
+
|
|
262
|
+
before do
|
|
263
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
it 'does not raise an error' do
|
|
267
|
+
expect { client.remove_checkout_request('1', '2', '3') }.not_to raise_error
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
context 'when some params are nil' do
|
|
272
|
+
it 'raises a TypeError' do
|
|
273
|
+
expect { client.remove_checkout_request(nil, '2', '3') }.to raise_error(TypeError, 'Merchant ID is required')
|
|
274
|
+
expect { client.remove_checkout_request('1', nil, '3') }.to raise_error(TypeError, 'Commerce Case ID is required')
|
|
275
|
+
expect { client.remove_checkout_request('1', '2', nil) }.to raise_error(TypeError, 'Checkout ID is required')
|
|
276
|
+
end
|
|
277
|
+
end
|
|
278
|
+
end
|
|
279
|
+
|
|
258
280
|
describe '#complete_checkout_request' do
|
|
259
281
|
let(:payload) { double('PCPServerSDK::Models::CompleteOrderRequest') }
|
|
260
282
|
|
|
@@ -113,6 +113,57 @@ RSpec.describe PCPServerSDK::Endpoints::OrderManagementCheckoutActionsApiClient
|
|
|
113
113
|
end
|
|
114
114
|
end
|
|
115
115
|
|
|
116
|
+
describe '#complete_order' do
|
|
117
|
+
let(:payload) { double('PCPServerSDK::Models::CompleteOrderRequest') }
|
|
118
|
+
|
|
119
|
+
context 'when request is successful' do
|
|
120
|
+
let(:response) { double('Response', body: '{}', code: '200') }
|
|
121
|
+
let(:expected_response) { PCPServerSDK::Models::CompletePaymentResponse.new }
|
|
122
|
+
|
|
123
|
+
before do
|
|
124
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'returns a successful response' do
|
|
128
|
+
result = client.complete_order('1', '2', '3', payload)
|
|
129
|
+
expect(result).to eq(expected_response)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
context 'when request is unsuccessful (400)' do
|
|
134
|
+
let(:response) { double('Response', body: error_body, code: '400') }
|
|
135
|
+
|
|
136
|
+
before do
|
|
137
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it 'raises an PCPServerSDK::Errors::ApiErrorResponseException' do
|
|
141
|
+
expect { client.complete_order('1', '2', '3', payload) }.to raise_error(PCPServerSDK::Errors::ApiErrorResponseException)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
context 'when request is unsuccessful (500)' do
|
|
146
|
+
let(:response) { double('Response', body: '{}', code: '500') }
|
|
147
|
+
|
|
148
|
+
before do
|
|
149
|
+
allow(client).to receive(:get_response).and_return(response)
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
it 'raises an PCPServerSDK::Errors::ApiResponseRetrievalException' do
|
|
153
|
+
expect { client.complete_order('1', '2', '3', payload) }.to raise_error(PCPServerSDK::Errors::ApiResponseRetrievalException)
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
context 'when some params are nil' do
|
|
158
|
+
it 'raises a TypeError' do
|
|
159
|
+
expect { client.complete_order(nil, '2', '3', payload) }.to raise_error(TypeError, 'Merchant ID is required')
|
|
160
|
+
expect { client.complete_order('1', nil, '3', payload) }.to raise_error(TypeError, 'Commerce Case ID is required')
|
|
161
|
+
expect { client.complete_order('1', '2', nil, payload) }.to raise_error(TypeError, 'Checkout ID is required')
|
|
162
|
+
expect { client.complete_order('1', '2', '3', nil) }.to raise_error(TypeError, 'Payload is required')
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
166
|
+
|
|
116
167
|
describe '#return_order' do
|
|
117
168
|
let(:payload) { double('PCPServerSDK::Models::ReturnRequest') }
|
|
118
169
|
|