acquiring-sdk-ruby 0.1.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 +7 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +22 -0
- data/README.md +140 -0
- data/Rakefile +34 -0
- data/acquiring-sdk-ruby.gemspec +30 -0
- data/lib/worldline/acquiring/sdk/api_resource.rb +53 -0
- data/lib/worldline/acquiring/sdk/authentication/authenticator.rb +21 -0
- data/lib/worldline/acquiring/sdk/authentication/authorization_type.rb +17 -0
- data/lib/worldline/acquiring/sdk/authentication/oauth2_authenticator.rb +142 -0
- data/lib/worldline/acquiring/sdk/authentication/oauth2_exception.rb +15 -0
- data/lib/worldline/acquiring/sdk/authentication.rb +1 -0
- data/lib/worldline/acquiring/sdk/call_context.rb +9 -0
- data/lib/worldline/acquiring/sdk/client.rb +69 -0
- data/lib/worldline/acquiring/sdk/communication/communication_exception.rb +21 -0
- data/lib/worldline/acquiring/sdk/communication/connection.rb +50 -0
- data/lib/worldline/acquiring/sdk/communication/default_connection.rb +429 -0
- data/lib/worldline/acquiring/sdk/communication/metadata_provider.rb +162 -0
- data/lib/worldline/acquiring/sdk/communication/multipart_form_data_object.rb +54 -0
- data/lib/worldline/acquiring/sdk/communication/multipart_form_data_request.rb +15 -0
- data/lib/worldline/acquiring/sdk/communication/not_found_exception.rb +21 -0
- data/lib/worldline/acquiring/sdk/communication/param_request.rb +16 -0
- data/lib/worldline/acquiring/sdk/communication/pooled_connection.rb +28 -0
- data/lib/worldline/acquiring/sdk/communication/request_header.rb +64 -0
- data/lib/worldline/acquiring/sdk/communication/request_param.rb +30 -0
- data/lib/worldline/acquiring/sdk/communication/response_exception.rb +58 -0
- data/lib/worldline/acquiring/sdk/communication/response_header.rb +80 -0
- data/lib/worldline/acquiring/sdk/communication.rb +1 -0
- data/lib/worldline/acquiring/sdk/communicator.rb +506 -0
- data/lib/worldline/acquiring/sdk/communicator_configuration.rb +197 -0
- data/lib/worldline/acquiring/sdk/domain/data_object.rb +34 -0
- data/lib/worldline/acquiring/sdk/domain/shopping_cart_extension.rb +62 -0
- data/lib/worldline/acquiring/sdk/domain/uploadable_file.rb +35 -0
- data/lib/worldline/acquiring/sdk/domain.rb +1 -0
- data/lib/worldline/acquiring/sdk/factory.rb +183 -0
- data/lib/worldline/acquiring/sdk/json/default_marshaller.rb +36 -0
- data/lib/worldline/acquiring/sdk/json/marshaller.rb +29 -0
- data/lib/worldline/acquiring/sdk/json/marshaller_syntax_exception.rb +11 -0
- data/lib/worldline/acquiring/sdk/json.rb +1 -0
- data/lib/worldline/acquiring/sdk/logging/communicator_logger.rb +26 -0
- data/lib/worldline/acquiring/sdk/logging/log_message_builder.rb +91 -0
- data/lib/worldline/acquiring/sdk/logging/logging_capable.rb +19 -0
- data/lib/worldline/acquiring/sdk/logging/obfuscation/body_obfuscator.rb +101 -0
- data/lib/worldline/acquiring/sdk/logging/obfuscation/header_obfuscator.rb +54 -0
- data/lib/worldline/acquiring/sdk/logging/obfuscation/obfuscation_capable.rb +23 -0
- data/lib/worldline/acquiring/sdk/logging/obfuscation/obfuscation_rule.rb +49 -0
- data/lib/worldline/acquiring/sdk/logging/obfuscation.rb +1 -0
- data/lib/worldline/acquiring/sdk/logging/request_log_message_builder.rb +52 -0
- data/lib/worldline/acquiring/sdk/logging/response_log_message_builder.rb +43 -0
- data/lib/worldline/acquiring/sdk/logging/ruby_communicator_logger.rb +63 -0
- data/lib/worldline/acquiring/sdk/logging/stdout_communicator_logger.rb +33 -0
- data/lib/worldline/acquiring/sdk/logging.rb +1 -0
- data/lib/worldline/acquiring/sdk/proxy_configuration.rb +76 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/acquirer_client.rb +35 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/accountverifications/account_verifications_client.rb +60 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/accountverifications.rb +4 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/dynamiccurrencyconversion/dynamic_currency_conversion_client.rb +60 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/dynamiccurrencyconversion.rb +4 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/merchant_client.rb +66 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/payments/get_payment_status_params.rb +34 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/payments/payments_client.rb +224 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/payments.rb +4 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/refunds/get_refund_params.rb +34 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/refunds/refunds_client.rb +157 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/refunds.rb +4 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/technicalreversals/technical_reversals_client.rb +64 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant/technicalreversals.rb +4 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer/merchant.rb +4 -0
- data/lib/worldline/acquiring/sdk/v1/acquirer.rb +4 -0
- data/lib/worldline/acquiring/sdk/v1/api_exception.rb +63 -0
- data/lib/worldline/acquiring/sdk/v1/authorization_exception.rb +23 -0
- data/lib/worldline/acquiring/sdk/v1/domain/address_verification_data.rb +41 -0
- data/lib/worldline/acquiring/sdk/v1/domain/amount_data.rb +48 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_account_verification_request.rb +70 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_account_verification_response.rb +87 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_action_response.rb +71 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_action_response_for_refund.rb +71 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_capture_request.rb +75 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_capture_request_for_refund.rb +43 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_increment_request.rb +61 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_increment_response.rb +43 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_payment_error_response.rb +62 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_payment_refund_request.rb +77 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_payment_request.rb +95 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_payment_resource.rb +103 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_payment_response.rb +126 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_payment_reversal_request.rb +61 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_payment_summary_for_response.rb +66 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_references_for_responses.rb +48 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_refund_request.rb +88 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_refund_resource.rb +110 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_refund_response.rb +133 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_refund_summary_for_response.rb +66 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_reversal_response.rb +36 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_technical_reversal_request.rb +50 -0
- data/lib/worldline/acquiring/sdk/v1/domain/api_technical_reversal_response.rb +62 -0
- data/lib/worldline/acquiring/sdk/v1/domain/card_data_for_dcc.rb +48 -0
- data/lib/worldline/acquiring/sdk/v1/domain/card_on_file_data.rb +52 -0
- data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data.rb +114 -0
- data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data_for_refund.rb +82 -0
- data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data_for_resource.rb +43 -0
- data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data_for_response.rb +52 -0
- data/lib/worldline/acquiring/sdk/v1/domain/card_payment_data_for_verification.rb +91 -0
- data/lib/worldline/acquiring/sdk/v1/domain/dcc_data.rb +55 -0
- data/lib/worldline/acquiring/sdk/v1/domain/dcc_proposal.rb +60 -0
- data/lib/worldline/acquiring/sdk/v1/domain/e_commerce_data.rb +52 -0
- data/lib/worldline/acquiring/sdk/v1/domain/e_commerce_data_for_account_verification.rb +45 -0
- data/lib/worldline/acquiring/sdk/v1/domain/e_commerce_data_for_response.rb +41 -0
- data/lib/worldline/acquiring/sdk/v1/domain/get_dcc_rate_request.rb +75 -0
- data/lib/worldline/acquiring/sdk/v1/domain/get_dcc_rate_response.rb +57 -0
- data/lib/worldline/acquiring/sdk/v1/domain/initial_card_on_file_data.rb +41 -0
- data/lib/worldline/acquiring/sdk/v1/domain/merchant_data.rb +76 -0
- data/lib/worldline/acquiring/sdk/v1/domain/network_token_data.rb +41 -0
- data/lib/worldline/acquiring/sdk/v1/domain/payment_references.rb +48 -0
- data/lib/worldline/acquiring/sdk/v1/domain/plain_card_data.rb +48 -0
- data/lib/worldline/acquiring/sdk/v1/domain/point_of_sale_data.rb +34 -0
- data/lib/worldline/acquiring/sdk/v1/domain/point_of_sale_data_for_dcc.rb +41 -0
- data/lib/worldline/acquiring/sdk/v1/domain/rate_data.rb +64 -0
- data/lib/worldline/acquiring/sdk/v1/domain/sub_operation.rb +94 -0
- data/lib/worldline/acquiring/sdk/v1/domain/sub_operation_for_refund.rb +87 -0
- data/lib/worldline/acquiring/sdk/v1/domain/subsequent_card_on_file_data.rb +48 -0
- data/lib/worldline/acquiring/sdk/v1/domain/three_d_secure.rb +62 -0
- data/lib/worldline/acquiring/sdk/v1/domain/transaction_data_for_dcc.rb +52 -0
- data/lib/worldline/acquiring/sdk/v1/domain.rb +4 -0
- data/lib/worldline/acquiring/sdk/v1/exception_factory.rb +48 -0
- data/lib/worldline/acquiring/sdk/v1/ping/ping_client.rb +52 -0
- data/lib/worldline/acquiring/sdk/v1/ping.rb +4 -0
- data/lib/worldline/acquiring/sdk/v1/platform_exception.rb +23 -0
- data/lib/worldline/acquiring/sdk/v1/reference_exception.rb +23 -0
- data/lib/worldline/acquiring/sdk/v1/v1_client.rb +43 -0
- data/lib/worldline/acquiring/sdk/v1/validation_exception.rb +23 -0
- data/lib/worldline/acquiring/sdk/v1.rb +4 -0
- data/lib/worldline/acquiring/sdk.rb +1 -0
- data/spec/comparable_extension.rb +29 -0
- data/spec/fixtures/resources/authentication/oauth2AccessToken.expired.json +4 -0
- data/spec/fixtures/resources/authentication/oauth2AccessToken.invalidClient.json +4 -0
- data/spec/fixtures/resources/authentication/oauth2AccessToken.json +4 -0
- data/spec/fixtures/resources/communication/getWithQueryParams.json +3 -0
- data/spec/fixtures/resources/communication/getWithoutQueryParams.json +3 -0
- data/spec/fixtures/resources/communication/notFound.html +1 -0
- data/spec/fixtures/resources/communication/postWithBadRequestResponse.json +11 -0
- data/spec/fixtures/resources/communication/postWithCreatedResponse.json +6 -0
- data/spec/fixtures/resources/communication/unknownServerError.json +10 -0
- data/spec/fixtures/resources/logging/bodyNoObfuscation.json +7 -0
- data/spec/fixtures/resources/logging/bodyWithBinObfuscated.json +3 -0
- data/spec/fixtures/resources/logging/bodyWithBinOriginal.json +3 -0
- data/spec/fixtures/resources/logging/bodyWithCardCustomObfuscated.json +13 -0
- data/spec/fixtures/resources/logging/bodyWithCardObfuscated.json +13 -0
- data/spec/fixtures/resources/logging/bodyWithCardOriginal.json +13 -0
- data/spec/fixtures/resources/logging/bodyWithObjectObfuscated.json +5 -0
- data/spec/fixtures/resources/logging/bodyWithObjectOriginal.json +5 -0
- data/spec/fixtures/resources/properties.oauth2.yml +8 -0
- data/spec/fixtures/resources/properties.proxy.yml +14 -0
- data/spec/integration/connection_pooling_spec.rb +74 -0
- data/spec/integration/multipart_form_data_spec.rb +216 -0
- data/spec/integration/process_payment_spec.rb +43 -0
- data/spec/integration/request_dcc_rate_spec.rb +24 -0
- data/spec/integration/sdk_proxy_spec.rb +70 -0
- data/spec/integration_setup.rb +111 -0
- data/spec/lib/authentication/oauth2_authenticator_spec.rb +68 -0
- data/spec/lib/client_spec.rb +47 -0
- data/spec/lib/communication/default_connection_logger_spec.rb +484 -0
- data/spec/lib/communication/default_connection_spec.rb +352 -0
- data/spec/lib/communication/metadata_provider_spec.rb +93 -0
- data/spec/lib/communicator_configuration_spec.rb +181 -0
- data/spec/lib/communicator_spec.rb +34 -0
- data/spec/lib/factory_spec.rb +38 -0
- data/spec/lib/json/default_marshaller_spec.rb +39 -0
- data/spec/lib/logging/obfuscation/body_obfuscator_spec.rb +86 -0
- data/spec/lib/logging/obfuscation/header_obfuscator_spec.rb +100 -0
- data/spec/lib/logging/ruby_communicator_logger_spec.rb +92 -0
- data/spec/lib/logging/stdout_communicator_logger_spec.rb +64 -0
- data/spec/spec_helper.rb +32 -0
- metadata +375 -0
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
require 'worldline/acquiring/sdk/authentication/authorization_type'
|
|
2
|
+
|
|
3
|
+
module Worldline
|
|
4
|
+
module Acquiring
|
|
5
|
+
module SDK
|
|
6
|
+
# A CommunicatorConfiguration stores all data used to initialize an {Worldline::Acquiring::SDK::Communicator}.
|
|
7
|
+
#
|
|
8
|
+
# @attr [String] api_endpoint Base URL to the Worldline Acquiring platform
|
|
9
|
+
# @attr [String] authorization_id An id used for authorization. The meaning of this id is different for each authorization type.
|
|
10
|
+
# For instance, for OAuth2 this is the client id
|
|
11
|
+
# @attr [String] authorization_secret A secret used for authorization. The meaning of this secret is different for each authorization type.
|
|
12
|
+
# For instance, for OAuth2 this is the client secret
|
|
13
|
+
# @attr [String] oauth2_token_uri The OAuth2 token URI
|
|
14
|
+
# @attr [String] authorization_type String representing the authentication algorithm used
|
|
15
|
+
# @attr [Integer] connect_timeout The number of seconds before a connection attempt with the Worldline Acquiring platform times out.
|
|
16
|
+
# @attr [Integer] socket_timeout The number of seconds before a timeout occurs when transmitting data to or from the Worldline Acquiring platform.
|
|
17
|
+
# @attr [Integer] max_connections The number of connections with the Worldline Acquiring platform that are kept alive in the connection pool.
|
|
18
|
+
# These connections will be reused when possible.
|
|
19
|
+
# @attr [Worldline::Acquiring::SDK::ProxyConfiguration] proxy_configuration Proxy settings.
|
|
20
|
+
# @attr [String] integrator Name of the integrator
|
|
21
|
+
# @attr [Worldline::Acquiring::SDK::Domain::ShoppingCartExtension] shopping_cart_extension Shopping cart-related metadata.
|
|
22
|
+
class CommunicatorConfiguration
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
DEFAULT_MAX_CONNECTIONS = 10
|
|
26
|
+
|
|
27
|
+
public
|
|
28
|
+
|
|
29
|
+
# The default number of connections that are kept alive in the connection pool.
|
|
30
|
+
# Used if _maxConnections_ is not present in the properties.
|
|
31
|
+
# @return [Integer]
|
|
32
|
+
def self.default_max_connections
|
|
33
|
+
DEFAULT_MAX_CONNECTIONS
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Creates a new CommunicatorConfiguration instance.
|
|
37
|
+
#
|
|
38
|
+
# If a _properties_ object is given, it will be parsed like a hash in order to read these attributes.
|
|
39
|
+
# If a value is given in both the _properties_ hash and as a separate parameter,
|
|
40
|
+
# the separate parameter will take precedence over the value in the properties.
|
|
41
|
+
#
|
|
42
|
+
# @param properties [Hash, nil] hash that may contain any of the other parameters.
|
|
43
|
+
# @param api_endpoint [String, nil] the base URL to the Worldline Acquiring platform.
|
|
44
|
+
# @param authorization_id [String, nil] An id used for authorization. The meaning of this id is different for each authorization type.
|
|
45
|
+
# For instance, for OAuth2 this is the client id.
|
|
46
|
+
# @param authorization_secret [String, nil] A secret used for authorization. The meaning of this secret is different for each authorization type.
|
|
47
|
+
# For instance, for OAuth2 this is the client secret.
|
|
48
|
+
# @param oauth2_client_id [String, nil] The OAuth2 client id.
|
|
49
|
+
# This is an alias for _authorization_id_.
|
|
50
|
+
# @param oauth2_client_secret [String, nil] The OAuth2 client secret.
|
|
51
|
+
# This is an alias for _authorization_secret_.
|
|
52
|
+
# @param oauth2_token_uri [String, nil] The OAuth2 token URI.
|
|
53
|
+
# @param authorization_type [String, nil] string describing the authorization protocol to follow.
|
|
54
|
+
# @param connect_timeout [Integer, nil] the number of seconds before a connection attempt with the Worldline Acquiring platform times out.
|
|
55
|
+
# @param socket_timeout [Integer, nil] the number of seconds before a timeout occurs when transmitting data to or from the Worldline Acquiring platform.
|
|
56
|
+
# @param max_connections [Integer, nil] the number of connections with the Worldline Acquiring platform that are kept alive in the connection pool.
|
|
57
|
+
# These connections will be reused when possible.
|
|
58
|
+
# @param proxy_configuration [Worldline::Acquiring::SDK::ProxyConfiguration, nil] stores the URL to a proxy to be used in all communication,
|
|
59
|
+
# or _nil_ if no proxy should be used.
|
|
60
|
+
# @param integrator [String, nil] name of the integrator
|
|
61
|
+
# @param shopping_cart_extension [Worldline::Acquiring::SDK::Domain::ShoppingCartExtension, nil] stores shopping cart-related metadata.
|
|
62
|
+
def initialize(properties: nil, api_endpoint: nil,
|
|
63
|
+
authorization_id: nil, authorization_secret: nil,
|
|
64
|
+
oauth2_client_id: nil, oauth2_client_secret: nil, oauth2_token_uri: nil,
|
|
65
|
+
authorization_type: nil,
|
|
66
|
+
connect_timeout: nil, socket_timeout: nil,
|
|
67
|
+
max_connections: nil, proxy_configuration: nil,
|
|
68
|
+
integrator: nil, shopping_cart_extension: nil)
|
|
69
|
+
unless properties.nil?
|
|
70
|
+
@api_endpoint = get_endpoint(properties)
|
|
71
|
+
@authorization_type = Authentication::AuthorizationType.get_authorization(properties['acquiring.api.authorizationType'])
|
|
72
|
+
@oauth2_token_uri = properties['acquiring.api.oauth2.tokenUri']
|
|
73
|
+
@connect_timeout = properties['acquiring.api.connectTimeout']
|
|
74
|
+
@socket_timeout = properties['acquiring.api.socketTimeout']
|
|
75
|
+
@max_connections = get_property(properties, 'acquiring.api.maxConnections', DEFAULT_MAX_CONNECTIONS)
|
|
76
|
+
|
|
77
|
+
proxy_uri = properties['acquiring.api.proxy.uri']
|
|
78
|
+
proxy_user = properties['acquiring.api.proxy.username']
|
|
79
|
+
proxy_pass = properties['acquiring.api.proxy.password']
|
|
80
|
+
unless proxy_uri.nil?
|
|
81
|
+
@proxy_configuration = ProxyConfiguration.new(address: URI(proxy_uri),
|
|
82
|
+
username: proxy_user,
|
|
83
|
+
password: proxy_pass)
|
|
84
|
+
end
|
|
85
|
+
@integrator = properties['acquiring.api.integrator']
|
|
86
|
+
@shopping_cart_extension = get_shopping_cart_extension(properties)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
if api_endpoint
|
|
90
|
+
@api_endpoint = api_endpoint
|
|
91
|
+
end
|
|
92
|
+
if authorization_id
|
|
93
|
+
@authorization_id = authorization_id
|
|
94
|
+
end
|
|
95
|
+
if authorization_secret
|
|
96
|
+
@authorization_secret = authorization_secret
|
|
97
|
+
end
|
|
98
|
+
if oauth2_client_id
|
|
99
|
+
@authorization_id = oauth2_client_id
|
|
100
|
+
end
|
|
101
|
+
if oauth2_client_secret
|
|
102
|
+
@authorization_secret = oauth2_client_secret
|
|
103
|
+
end
|
|
104
|
+
if oauth2_token_uri
|
|
105
|
+
@oauth2_token_uri = oauth2_token_uri
|
|
106
|
+
end
|
|
107
|
+
if authorization_type
|
|
108
|
+
@authorization_type = authorization_type
|
|
109
|
+
end
|
|
110
|
+
if connect_timeout
|
|
111
|
+
@connect_timeout = connect_timeout
|
|
112
|
+
end
|
|
113
|
+
if socket_timeout
|
|
114
|
+
@socket_timeout = socket_timeout
|
|
115
|
+
end
|
|
116
|
+
if max_connections
|
|
117
|
+
@max_connections = max_connections
|
|
118
|
+
end
|
|
119
|
+
if proxy_configuration
|
|
120
|
+
@proxy_configuration = proxy_configuration
|
|
121
|
+
end
|
|
122
|
+
if integrator
|
|
123
|
+
@integrator = integrator
|
|
124
|
+
end
|
|
125
|
+
if shopping_cart_extension
|
|
126
|
+
@shopping_cart_extension = shopping_cart_extension
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
attr_accessor :api_endpoint
|
|
131
|
+
|
|
132
|
+
attr_accessor :authorization_id
|
|
133
|
+
attr_accessor :authorization_secret
|
|
134
|
+
attr_accessor :oauth2_token_uri
|
|
135
|
+
attr_accessor :authorization_type
|
|
136
|
+
|
|
137
|
+
attr_accessor :connect_timeout
|
|
138
|
+
attr_accessor :socket_timeout
|
|
139
|
+
attr_accessor :max_connections
|
|
140
|
+
|
|
141
|
+
attr_accessor :proxy_configuration
|
|
142
|
+
|
|
143
|
+
attr_accessor :integrator
|
|
144
|
+
attr_accessor :shopping_cart_extension
|
|
145
|
+
|
|
146
|
+
alias :oauth2_client_id :authorization_id
|
|
147
|
+
alias :oauth2_client_id= :authorization_id=
|
|
148
|
+
alias :oauth2_client_secret :authorization_secret
|
|
149
|
+
alias :oauth2_client_secret= :authorization_secret=
|
|
150
|
+
|
|
151
|
+
private
|
|
152
|
+
|
|
153
|
+
def get_property(properties, key, default_value)
|
|
154
|
+
property_value = properties[key]
|
|
155
|
+
if property_value.nil?
|
|
156
|
+
default_value
|
|
157
|
+
else
|
|
158
|
+
property_value
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def get_endpoint(properties)
|
|
163
|
+
host = properties['acquiring.api.endpoint.host']
|
|
164
|
+
scheme = properties['acquiring.api.endpoint.scheme']
|
|
165
|
+
port = properties['acquiring.api.endpoint.port']
|
|
166
|
+
if scheme.nil?
|
|
167
|
+
scheme = 'https'
|
|
168
|
+
end
|
|
169
|
+
if port.nil?
|
|
170
|
+
port = -1
|
|
171
|
+
end
|
|
172
|
+
create_uri(scheme, host, port)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def create_uri(scheme, host, port)
|
|
176
|
+
if port == -1
|
|
177
|
+
"#{scheme}://#{host}"
|
|
178
|
+
else
|
|
179
|
+
"#{scheme}://#{host}:#{port.to_s}"
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def get_shopping_cart_extension(properties)
|
|
184
|
+
creator = properties['acquiring.api.shoppingCartExtension.creator']
|
|
185
|
+
name = properties['acquiring.api.shoppingCartExtension.name']
|
|
186
|
+
version = properties['acquiring.api.shoppingCartExtension.version']
|
|
187
|
+
extension_id = properties['acquiring.api.shoppingCartExtension.extensionId']
|
|
188
|
+
if creator.nil? && name.nil? && version.nil? && extension_id.nil?
|
|
189
|
+
nil
|
|
190
|
+
else
|
|
191
|
+
Domain::ShoppingCartExtension.new(creator, name, version, extension_id)
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module Worldline
|
|
2
|
+
module Acquiring
|
|
3
|
+
module SDK
|
|
4
|
+
module Domain
|
|
5
|
+
# Base class for all SDK data objects, supports marshalling and unmarshalling the data object to and from JSON.
|
|
6
|
+
class DataObject
|
|
7
|
+
|
|
8
|
+
# Returns a hash representation of the DataObject.
|
|
9
|
+
# The hash contains camelCase representations of the variables, and their values.
|
|
10
|
+
# Should be overridden to add all instance variables of the object.
|
|
11
|
+
#
|
|
12
|
+
# @return [Hash]
|
|
13
|
+
def to_h
|
|
14
|
+
{}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Create a new instance of this object (DataObject or descendant)
|
|
18
|
+
# from a hash containing attribute values in camelCase.
|
|
19
|
+
# Note that the hash contains Strings as keys instead of more commonly used tokens.
|
|
20
|
+
def self.new_from_hash(hash)
|
|
21
|
+
obj = self.new
|
|
22
|
+
obj.from_hash(hash)
|
|
23
|
+
obj
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Set attributes from values in parameter hash.
|
|
27
|
+
# Should be overridden by descendants in order to properly restore their attributes from the hash.
|
|
28
|
+
# Note that the hash contains Strings as keys instead of more commonly used tokens.
|
|
29
|
+
def from_hash(hash) end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require 'worldline/acquiring/sdk/domain/data_object'
|
|
2
|
+
|
|
3
|
+
module Worldline
|
|
4
|
+
module Acquiring
|
|
5
|
+
module SDK
|
|
6
|
+
module Domain
|
|
7
|
+
# Represents metadata part of shopping carts.
|
|
8
|
+
#
|
|
9
|
+
# @attr_reader [String] creator
|
|
10
|
+
# @attr_reader [String] name
|
|
11
|
+
# @attr_reader [String] version
|
|
12
|
+
# @attr_reader [String] extension_id
|
|
13
|
+
class ShoppingCartExtension < DataObject
|
|
14
|
+
def initialize(creator, name, version, extension_id=nil)
|
|
15
|
+
raise ArgumentError.new if creator.nil? or creator.strip.empty?
|
|
16
|
+
raise ArgumentError.new if name.nil? or name.strip.empty?
|
|
17
|
+
raise ArgumentError.new if version.nil? or version.to_s.strip.empty?
|
|
18
|
+
|
|
19
|
+
@creator = creator
|
|
20
|
+
@name = name
|
|
21
|
+
@version = version.to_s
|
|
22
|
+
@extension_id = extension_id
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Constructs a new ShoppingCartExtension from parameter hash
|
|
26
|
+
# the hash should contain a _creator_, _name_, _version_ and _extensionId_
|
|
27
|
+
#--
|
|
28
|
+
# Overridden so ShoppingCartExtension can retain mandatory default arguments
|
|
29
|
+
#++
|
|
30
|
+
def self.new_from_hash(hash)
|
|
31
|
+
creator = hash['creator'] if hash.has_key?('creator')
|
|
32
|
+
name = hash['name'] if hash.has_key?('name')
|
|
33
|
+
version = hash['version'] if hash.has_key?('version')
|
|
34
|
+
extension_id = hash['extensionId'] if hash.has_key?('extensionId')
|
|
35
|
+
self.new(creator, name, version, extension_id)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Converts the shopping cart metadata to a hash
|
|
39
|
+
def to_h
|
|
40
|
+
hash = super
|
|
41
|
+
hash['creator'] = @creator unless @creator.nil?
|
|
42
|
+
hash['name'] = @name unless @name.nil?
|
|
43
|
+
hash['version'] = @version unless @version.nil?
|
|
44
|
+
hash['extensionId'] = @extension_id unless @extension_id.nil?
|
|
45
|
+
hash
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# loads shopping cart metadata from a parameter hash
|
|
49
|
+
def from_hash(hash)
|
|
50
|
+
super
|
|
51
|
+
@creator = hash['creator'] if hash.has_key? 'creator'
|
|
52
|
+
@name = hash['name'] if hash.has_key? 'name'
|
|
53
|
+
@version = hash['version'] if hash.has_key? 'version'
|
|
54
|
+
@extension_id = hash['extensionId'] if hash.has_key? 'extensionId'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
attr_reader :creator, :name, :version, :extension_id
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Worldline
|
|
2
|
+
module Acquiring
|
|
3
|
+
module SDK
|
|
4
|
+
module Domain
|
|
5
|
+
# A file that can be uploaded
|
|
6
|
+
#
|
|
7
|
+
# The allowed forms of content are defined by the Connection implementation
|
|
8
|
+
# The default implementation supports file paths and IO objects.
|
|
9
|
+
#
|
|
10
|
+
# @attr_reader [String] file_name The name of the file.
|
|
11
|
+
# @attr_reader [String, IO] content The file's content.
|
|
12
|
+
# @attr_reader [String] content_type The file's content type.
|
|
13
|
+
# @attr_reader [Integer] content_length The file's content length, or -1 if not known.
|
|
14
|
+
class UploadableFile
|
|
15
|
+
|
|
16
|
+
def initialize(file_name, content, content_type, content_length = -1)
|
|
17
|
+
raise ArgumentError.new("file_name is required") if file_name.nil? or !file_name.strip
|
|
18
|
+
raise ArgumentError.new("content is required") if content.nil?
|
|
19
|
+
raise ArgumentError.new("content_type is required") if content_type.nil? or !content_type.strip
|
|
20
|
+
|
|
21
|
+
@file_name = file_name
|
|
22
|
+
@content = content
|
|
23
|
+
@content_type = content_type
|
|
24
|
+
@content_length = [content_length, -1].max
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
attr_reader :file_name
|
|
28
|
+
attr_reader :content
|
|
29
|
+
attr_reader :content_type
|
|
30
|
+
attr_reader :content_length
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Dir[File.join(__dir__, 'domain', '*.rb')].each { |f| require f }
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'worldline/acquiring/sdk/client'
|
|
3
|
+
require 'worldline/acquiring/sdk/communicator'
|
|
4
|
+
require 'worldline/acquiring/sdk/communicator_configuration'
|
|
5
|
+
require 'worldline/acquiring/sdk/authentication/authorization_type'
|
|
6
|
+
require 'worldline/acquiring/sdk/authentication/oauth2_authenticator'
|
|
7
|
+
require 'worldline/acquiring/sdk/communication/default_connection'
|
|
8
|
+
require 'worldline/acquiring/sdk/communication/metadata_provider'
|
|
9
|
+
require 'worldline/acquiring/sdk/json/default_marshaller'
|
|
10
|
+
|
|
11
|
+
module Worldline
|
|
12
|
+
module Acquiring
|
|
13
|
+
module SDK
|
|
14
|
+
# Convenience class that constructs instances of several other classes in the SDK.
|
|
15
|
+
# Provides methods to construct
|
|
16
|
+
# {Worldline::Acquiring::SDK::CommunicatorConfiguration}, {Worldline::Acquiring::SDK::Communicator} and {Worldline::Acquiring::SDK::Client} instances.
|
|
17
|
+
class Factory
|
|
18
|
+
|
|
19
|
+
# Creates and returns a {Worldline::Acquiring::SDK::CommunicatorConfiguration} based on the configuration in the file
|
|
20
|
+
# located at _configuration_file_name_.
|
|
21
|
+
#
|
|
22
|
+
# @param configuration_file_name [String] Path to the configuration file to use, should be in YAML format.
|
|
23
|
+
# @param authorization_id [String] Authorization id, e.g. the key id for the Worldline Acquiring platform.
|
|
24
|
+
# @param authorization_secret [String] Authorization secret, e.g. the secret key used for authentication to the Worldline Acquiring platform.
|
|
25
|
+
# @return [Worldline::Acquiring::SDK::CommunicatorConfiguration] The created communicator configuration
|
|
26
|
+
def self.create_configuration(configuration_file_name, authorization_id, authorization_secret)
|
|
27
|
+
properties = YAML::load_file(configuration_file_name)
|
|
28
|
+
CommunicatorConfiguration.new(properties: properties,
|
|
29
|
+
authorization_id: authorization_id,
|
|
30
|
+
authorization_secret: authorization_secret)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Creates and returns a {Worldline::Acquiring::SDK::Communicator} from a {Worldline::Acquiring::SDK::CommunicatorConfiguration},
|
|
34
|
+
# a {Worldline::Acquiring::SDK::Communication::MetadataProvider}, a {Worldline::Acquiring::SDK::Communication::Connection},
|
|
35
|
+
# an {Worldline::Acquiring::SDK::Authentication::Authenticator} and a {Worldline::Acquiring::SDK::JSON::Marshaller}.
|
|
36
|
+
#
|
|
37
|
+
# @param configuration [Worldline::Acquiring::SDK::CommunicatorConfiguration] configuration settings to be used by the client.
|
|
38
|
+
# @param metadata_provider [Worldline::Acquiring::SDK::Communication::MetadataProvider] stores the metadata for the communicating client.
|
|
39
|
+
# @param connection [Worldline::Acquiring::SDK::Communication::Connection] connection that can be used to communicate with the Worldline Acquiring platform.
|
|
40
|
+
# @param authenticator [Worldline::Acquiring::SDK::Authentication::Authenticator] authenticator that can authenticate messages sent to the Worldline Acquiring platform.
|
|
41
|
+
# @param marshaller [Worldline::Acquiring::SDK::JSON::Marshaller] marshaller that can marshal and unmarshal objects to and from JSON.
|
|
42
|
+
# @return [Worldline::Acquiring::SDK::Communicator] The created communicator
|
|
43
|
+
def self.create_communicator_from_configuration(configuration, metadata_provider: nil,
|
|
44
|
+
connection: nil, authenticator: nil, marshaller: nil)
|
|
45
|
+
unless metadata_provider
|
|
46
|
+
metadata_provider = MetadataProvider.new(configuration.integrator,
|
|
47
|
+
shopping_cart_extension: configuration.shopping_cart_extension)
|
|
48
|
+
end
|
|
49
|
+
unless connection
|
|
50
|
+
connection = Communication::DefaultConnection.new({ connect_timeout: configuration.connect_timeout,
|
|
51
|
+
socket_timeout: configuration.socket_timeout,
|
|
52
|
+
max_connections: configuration.max_connections,
|
|
53
|
+
proxy_configuration: configuration.proxy_configuration })
|
|
54
|
+
end
|
|
55
|
+
unless authenticator
|
|
56
|
+
authenticator = get_authenticator(configuration)
|
|
57
|
+
end
|
|
58
|
+
unless marshaller
|
|
59
|
+
marshaller = DefaultMarshaller.instance
|
|
60
|
+
end
|
|
61
|
+
Communicator.new(configuration.api_endpoint, connection, authenticator, metadata_provider, marshaller)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Creates and returns a {Worldline::Acquiring::SDK::Communicator} from a file containing the communicator configuration, authorization_id, authorization_secret,
|
|
65
|
+
# a {Worldline::Acquiring::SDK::Communication::MetadataProvider}, a {Worldline::Acquiring::SDK::Communication::Connection}.
|
|
66
|
+
# an {Worldline::Acquiring::SDK::Authentication::Authenticator} and a {Worldline::Acquiring::SDK::JSON::Marshaller}.
|
|
67
|
+
#
|
|
68
|
+
# @param configuration_file_name [String] Path to the configuration file to use, should be in YAML format.
|
|
69
|
+
# @param authorization_id [String] Authorization id, e.g. the key id for the Worldline Acquiring platform.
|
|
70
|
+
# @param authorization_secret [String] Authorization secret, e.g. the secret key used for authentication to the Worldline Acquiring platform.
|
|
71
|
+
# @param metadata_provider [Worldline::Acquiring::SDK::Communication::MetadataProvider] stores the metadata for the communicating client.
|
|
72
|
+
# @param connection [Worldline::Acquiring::SDK::Communication::Connection] connection that can be used to communicate with the Worldline Acquiring platform.
|
|
73
|
+
# @param authenticator [Worldline::Acquiring::SDK::Authentication::Authenticator] authenticator that can authenticate messages sent to the Worldline Acquiring platform.
|
|
74
|
+
# @param marshaller [Worldline::Acquiring::SDK::JSON::Marshaller] marshaller that can marshal and unmarshal objects to and from JSON.
|
|
75
|
+
# @return [Worldline::Acquiring::SDK::Communicator] The created communicator
|
|
76
|
+
def self.create_communicator_from_file(configuration_file_name, authorization_id, authorization_secret,
|
|
77
|
+
metadata_provider: nil, connection: nil, authenticator: nil, marshaller: nil)
|
|
78
|
+
configuration = create_configuration(configuration_file_name, authorization_id, authorization_secret)
|
|
79
|
+
create_communicator_from_configuration(configuration, metadata_provider: metadata_provider, connection: connection,
|
|
80
|
+
authenticator: authenticator, marshaller: marshaller)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Creates and returns an {Worldline::Acquiring::SDK::Client} that provides the a high-level interface with the Worldline Acquiring platform.
|
|
84
|
+
# If a code block is given, the created client is returned to the code block and closed afterwards.
|
|
85
|
+
#
|
|
86
|
+
# @example Providing a code block
|
|
87
|
+
# Factory.create_client_from_configuration(configuration) do |client|
|
|
88
|
+
# # use client as needed
|
|
89
|
+
# end
|
|
90
|
+
# # client is closed here
|
|
91
|
+
#
|
|
92
|
+
# @param configuration [Worldline::Acquiring::SDK::CommunicatorConfiguration] contains configuration settings to be used by the client.
|
|
93
|
+
# @param metadata_provider [Worldline::Acquiring::SDK::Communication::MetadataProvider] stores the metadata for the communicating client.
|
|
94
|
+
# @param connection [Worldline::Acquiring::SDK::Communication::Connection] connection that can be used to communicate with the Worldline Acquiring platform.
|
|
95
|
+
# @param authenticator [Worldline::Acquiring::SDK::Authentication::Authenticator] authenticator that can authenticate messages sent to the Worldline Acquiring platform.
|
|
96
|
+
# @param marshaller [Worldline::Acquiring::SDK::JSON::Marshaller] marshaller that can marshal and unmarshal objects to and from JSON.
|
|
97
|
+
# @return [Worldline::Acquiring::SDK::Client] The created client
|
|
98
|
+
def self.create_client_from_configuration(configuration, metadata_provider: nil, connection: nil, authenticator: nil, marshaller: nil)
|
|
99
|
+
communicator = create_communicator_from_configuration(configuration, metadata_provider: metadata_provider, connection: connection,
|
|
100
|
+
authenticator: authenticator, marshaller: marshaller)
|
|
101
|
+
client = Client.new(communicator)
|
|
102
|
+
if block_given?
|
|
103
|
+
begin
|
|
104
|
+
yield client
|
|
105
|
+
ensure
|
|
106
|
+
client.close
|
|
107
|
+
end
|
|
108
|
+
else
|
|
109
|
+
return client
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Creates and returns an {Worldline::Acquiring::SDK::Client} that provides the a high-level interface with the Worldline Acquiring platform.
|
|
114
|
+
# If a code block is given, the created client is returned to the code block and closed afterwards.
|
|
115
|
+
#
|
|
116
|
+
# @example Providing a code block
|
|
117
|
+
# Factory.create_client_from_communicator(communicator) do |client|
|
|
118
|
+
# # use client as needed
|
|
119
|
+
# end
|
|
120
|
+
# # client is closed here
|
|
121
|
+
#
|
|
122
|
+
# @param communicator [Worldline::Acquiring::SDK::Communicator] provides network communication service for the Client
|
|
123
|
+
# @return [Worldline::Acquiring::SDK::Client] The created client
|
|
124
|
+
def self.create_client_from_communicator(communicator)
|
|
125
|
+
client = Client.new(communicator)
|
|
126
|
+
if block_given?
|
|
127
|
+
begin
|
|
128
|
+
yield client
|
|
129
|
+
ensure
|
|
130
|
+
client.close
|
|
131
|
+
end
|
|
132
|
+
else
|
|
133
|
+
return client
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
# Creates and returns an {Worldline::Acquiring::SDK::Client} that provides the a high-level interface with the Worldline Acquiring platform.
|
|
138
|
+
# If a code block is given, the created client is returned to the code block and closed afterwards.
|
|
139
|
+
#
|
|
140
|
+
# @example Providing a code block
|
|
141
|
+
# Factory.create_client_from_file(configuration_file_name, authorization_id, authorization_secret) do |client|
|
|
142
|
+
# # use client as needed
|
|
143
|
+
# end
|
|
144
|
+
# # client is closed here
|
|
145
|
+
#
|
|
146
|
+
# @param configuration_file_name [String] Path to the configuration file to use, should be in YAML format.
|
|
147
|
+
# @param authorization_id [String] Authorization id, e.g. the key id for the Worldline Acquiring platform.
|
|
148
|
+
# @param authorization_secret [String] Authorization secret, e.g. the secret key used for authentication to the Worldline Acquiring platform.
|
|
149
|
+
# @param metadata_provider [Worldline::Acquiring::SDK::Communication::MetadataProvider] stores the metadata for the communicating client.
|
|
150
|
+
# @param connection [Worldline::Acquiring::SDK::Communication::Connection] connection that can be used to communicate with the Worldline Acquiring platform.
|
|
151
|
+
# @param authenticator [Worldline::Acquiring::SDK::Authentication::Authenticator] authenticator that can authenticate messages sent to the Worldline Acquiring platform.
|
|
152
|
+
# @param marshaller [Worldline::Acquiring::SDK::JSON::Marshaller] marshaller that can marshal and unmarshal objects to and from JSON.
|
|
153
|
+
# @return [Worldline::Acquiring::SDK::Client] The created client
|
|
154
|
+
def self.create_client_from_file(configuration_file_name, authorization_id, authorization_secret,
|
|
155
|
+
metadata_provider: nil, connection: nil, authenticator: nil, marshaller: nil)
|
|
156
|
+
communicator = create_communicator_from_file(configuration_file_name, authorization_id, authorization_secret,
|
|
157
|
+
metadata_provider: metadata_provider, connection: connection,
|
|
158
|
+
authenticator: authenticator, marshaller: marshaller)
|
|
159
|
+
client = Client.new(communicator)
|
|
160
|
+
if block_given?
|
|
161
|
+
begin
|
|
162
|
+
yield client
|
|
163
|
+
ensure
|
|
164
|
+
client.close
|
|
165
|
+
end
|
|
166
|
+
else
|
|
167
|
+
return client
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
private
|
|
172
|
+
|
|
173
|
+
# @param configuration [Worldline::Acquiring::SDK::CommunicatorConfiguration]
|
|
174
|
+
def self.get_authenticator(configuration)
|
|
175
|
+
if configuration.authorization_type == Authentication::AuthorizationType::OAUTH2
|
|
176
|
+
return Authentication::OAuth2Authenticator.new(configuration)
|
|
177
|
+
end
|
|
178
|
+
raise RuntimeError.new("Unknown authorizationType #{configuration.authorization_type}")
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
require 'singleton'
|
|
3
|
+
require 'worldline/acquiring/sdk/json/marshaller'
|
|
4
|
+
|
|
5
|
+
module Worldline
|
|
6
|
+
module Acquiring
|
|
7
|
+
module SDK
|
|
8
|
+
module JSON
|
|
9
|
+
# Marshals objects to and from JSON format.
|
|
10
|
+
# Currently supports marshalling and unmarshalling of classes that support class.new_from_hash and class#to_h
|
|
11
|
+
class DefaultMarshaller < Marshaller
|
|
12
|
+
include Singleton
|
|
13
|
+
|
|
14
|
+
# Marshals the _request_object_ to a JSON string using request_object#to_h
|
|
15
|
+
def marshal(request_object)
|
|
16
|
+
::JSON.pretty_generate(request_object.to_h)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Unmarshals a JSON string into an object of type _klass_ using klass.new_from_hash
|
|
20
|
+
def unmarshal(json_string, klass)
|
|
21
|
+
if json_string.nil?
|
|
22
|
+
return nil
|
|
23
|
+
elsif json_string.length == 0
|
|
24
|
+
return ''
|
|
25
|
+
end
|
|
26
|
+
if klass.respond_to?(:new_from_hash)
|
|
27
|
+
klass.new_from_hash(::JSON.load(json_string))
|
|
28
|
+
else
|
|
29
|
+
raise NotImplementedError
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Worldline
|
|
2
|
+
module Acquiring
|
|
3
|
+
module SDK
|
|
4
|
+
module JSON
|
|
5
|
+
# Class responsible for marshalling and unmarshalling objects to and from JSON
|
|
6
|
+
class Marshaller
|
|
7
|
+
|
|
8
|
+
# Marshals _request_object_ to JSON format by calling #to_h on it.
|
|
9
|
+
#
|
|
10
|
+
# @param request_object [Worldline::Acquiring::SDK::Domain::DataObject] the object to format
|
|
11
|
+
# @return [String] _request_object_ converted to JSON
|
|
12
|
+
def marshal(request_object)
|
|
13
|
+
raise NotImplementedError
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Unmarshals a JSON string into an object of type _type_.
|
|
17
|
+
# The new object is initialized by calling .new_from_hash with contents of the JSON as a Hash object.
|
|
18
|
+
#
|
|
19
|
+
# @param response_json [String] The JSON to unmarshal
|
|
20
|
+
# @param type [Type] The class of the object that will be instantiated using _type.new_from_hash_
|
|
21
|
+
# @return The JSON unmarshalled to the given type
|
|
22
|
+
def unmarshal(response_json, type)
|
|
23
|
+
raise NotImplementedError
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Dir[File.join(__dir__, 'json', '*.rb')].each { |f| require f }
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Worldline
|
|
2
|
+
module Acquiring
|
|
3
|
+
module SDK
|
|
4
|
+
module Logging
|
|
5
|
+
# Base logger class used in this SDK. This class is an interface and cannot be instantiated.
|
|
6
|
+
class CommunicatorLogger
|
|
7
|
+
|
|
8
|
+
# Interface, no instantiation
|
|
9
|
+
# @see Worldline::Acquiring::SDK::Logging::StdoutCommunicatorLogger
|
|
10
|
+
# @see Worldline::Acquiring::SDK::Logging::RubyCommunicatorLogger
|
|
11
|
+
def initialize
|
|
12
|
+
raise NotImplementedError.new("#{self.class.name} is not implemented.")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Logs a message with or without exception
|
|
16
|
+
#
|
|
17
|
+
# @param message [String] the message to log
|
|
18
|
+
# @param thrown [Exception, nil] the exception to log, or nil to log no exception
|
|
19
|
+
def log(message, thrown = nil)
|
|
20
|
+
raise NotImplementedError.new("#{self.class.name}#log() is not implemented.")
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|