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,52 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file was automatically generated.
|
|
3
|
+
#
|
|
4
|
+
require 'worldline/acquiring/sdk/api_resource'
|
|
5
|
+
require 'worldline/acquiring/sdk/communication/response_exception'
|
|
6
|
+
require 'worldline/acquiring/sdk/v1/exception_factory'
|
|
7
|
+
require 'worldline/acquiring/sdk/v1/domain/api_payment_error_response'
|
|
8
|
+
|
|
9
|
+
module Worldline
|
|
10
|
+
module Acquiring
|
|
11
|
+
module SDK
|
|
12
|
+
module V1
|
|
13
|
+
module Ping
|
|
14
|
+
# Ping client. Thread-safe.
|
|
15
|
+
class PingClient < Worldline::Acquiring::SDK::ApiResource
|
|
16
|
+
|
|
17
|
+
# @param parent [Worldline::Acquiring::SDK::ApiResource]
|
|
18
|
+
# @param path_context [Hash, nil]
|
|
19
|
+
def initialize(parent, path_context)
|
|
20
|
+
super(parent: parent, path_context: path_context)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Resource /services/v1/ping - {https://docs.acquiring.worldline-solutions.com/api-reference#tag/Ping/operation/ping Check API connection}
|
|
24
|
+
#
|
|
25
|
+
# @param context [Worldline::Acquiring::SDK::CallContext, nil]
|
|
26
|
+
# @raise [Worldline::Acquiring::SDK::V1::ValidationException] if the request was not correct and couldn't be processed (HTTP status code 400)
|
|
27
|
+
# @raise [Worldline::Acquiring::SDK::V1::AuthorizationException] if the request was not allowed (HTTP status code 403)
|
|
28
|
+
# @raise [Worldline::Acquiring::SDK::V1::ReferenceException] if an object was attempted to be referenced that doesn't exist or has been removed,
|
|
29
|
+
# or there was a conflict (HTTP status code 404, 409 or 410)
|
|
30
|
+
# @raise [Worldline::Acquiring::SDK::V1::PlatformException] if something went wrong at the Worldline Acquiring platform,
|
|
31
|
+
# the Worldline Acquiring platform was unable to process a message from a downstream partner/acquirer,
|
|
32
|
+
# or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
|
|
33
|
+
# @raise [Worldline::Acquiring::SDK::V1::ApiException] if the Worldline Acquiring platform returned any other error
|
|
34
|
+
def ping(context = nil)
|
|
35
|
+
uri = instantiate_uri('/services/v1/ping', nil)
|
|
36
|
+
@communicator.get(
|
|
37
|
+
uri,
|
|
38
|
+
nil,
|
|
39
|
+
nil,
|
|
40
|
+
nil,
|
|
41
|
+
context)
|
|
42
|
+
rescue Worldline::Acquiring::SDK::Communication::ResponseException => e
|
|
43
|
+
error_type = Worldline::Acquiring::SDK::V1::Domain::ApiPaymentErrorResponse
|
|
44
|
+
error_object = @communicator.marshaller.unmarshal(e.body, error_type)
|
|
45
|
+
raise Worldline::Acquiring::SDK::V1.create_exception(e.status_code, e.body, error_object, context)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file was automatically generated.
|
|
3
|
+
#
|
|
4
|
+
require_relative 'api_exception'
|
|
5
|
+
|
|
6
|
+
module Worldline
|
|
7
|
+
module Acquiring
|
|
8
|
+
module SDK
|
|
9
|
+
module V1
|
|
10
|
+
# Represents an error response from the Worldline Acquiring platform when something went wrong at the Worldline Acquiring platform or further downstream.
|
|
11
|
+
class PlatformException < ApiException
|
|
12
|
+
|
|
13
|
+
# Create a new PlatformException.
|
|
14
|
+
# @see ApiException#initialize
|
|
15
|
+
def initialize(status_code, response_body, type, title, status, detail, instance,
|
|
16
|
+
message='The Worldline Acquiring platform returned an error response')
|
|
17
|
+
super(status_code, response_body, type, title, status, detail, instance, message)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file was automatically generated.
|
|
3
|
+
#
|
|
4
|
+
require_relative 'api_exception'
|
|
5
|
+
|
|
6
|
+
module Worldline
|
|
7
|
+
module Acquiring
|
|
8
|
+
module SDK
|
|
9
|
+
module V1
|
|
10
|
+
# Represents an error response from the Worldline Acquiring platform when a non-existing or removed object is trying to be accessed.
|
|
11
|
+
class ReferenceException < ApiException
|
|
12
|
+
|
|
13
|
+
# Create a new ReferenceException.
|
|
14
|
+
# @see ApiException#initialize
|
|
15
|
+
def initialize(status_code, response_body, type, title, status, detail, instance,
|
|
16
|
+
message='The Worldline Acquiring platform returned a reference error response')
|
|
17
|
+
super(status_code, response_body, type, title, status, detail, instance, message)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file was automatically generated.
|
|
3
|
+
#
|
|
4
|
+
require 'worldline/acquiring/sdk/api_resource'
|
|
5
|
+
require 'worldline/acquiring/sdk/v1/acquirer/acquirer_client'
|
|
6
|
+
require 'worldline/acquiring/sdk/v1/ping/ping_client'
|
|
7
|
+
|
|
8
|
+
module Worldline
|
|
9
|
+
module Acquiring
|
|
10
|
+
module SDK
|
|
11
|
+
module V1
|
|
12
|
+
# V1 client.
|
|
13
|
+
#
|
|
14
|
+
# Thread safe.
|
|
15
|
+
class V1Client < Worldline::Acquiring::SDK::ApiResource
|
|
16
|
+
|
|
17
|
+
# @param parent [Worldline::Acquiring::SDK::ApiResource]
|
|
18
|
+
# @param path_context [Hash, nil]
|
|
19
|
+
def initialize(parent, path_context)
|
|
20
|
+
super(parent: parent, path_context: path_context)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Resource /processing/v1/{acquirerId}
|
|
24
|
+
#
|
|
25
|
+
# @param acquirer_id [String]
|
|
26
|
+
# @return [Worldline::Acquiring::SDK::V1::Acquirer::AcquirerClient]
|
|
27
|
+
def acquirer(acquirer_id)
|
|
28
|
+
Worldline::Acquiring::SDK::V1::Acquirer::AcquirerClient.new(self, {
|
|
29
|
+
'acquirerId'.freeze => acquirer_id,
|
|
30
|
+
})
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Resource /services/v1/ping
|
|
34
|
+
#
|
|
35
|
+
# @return [Worldline::Acquiring::SDK::V1::Ping::PingClient]
|
|
36
|
+
def ping
|
|
37
|
+
Worldline::Acquiring::SDK::V1::Ping::PingClient.new(self, nil)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#
|
|
2
|
+
# This file was automatically generated.
|
|
3
|
+
#
|
|
4
|
+
require_relative 'api_exception'
|
|
5
|
+
|
|
6
|
+
module Worldline
|
|
7
|
+
module Acquiring
|
|
8
|
+
module SDK
|
|
9
|
+
module V1
|
|
10
|
+
# Represents an error response from the Worldline Acquiring platform when validation of requests failed.
|
|
11
|
+
class ValidationException < ApiException
|
|
12
|
+
|
|
13
|
+
# Create a new ValidationException.
|
|
14
|
+
# @see ApiException#initialize
|
|
15
|
+
def initialize(status_code, response_body, type, title, status, detail, instance,
|
|
16
|
+
message='The Worldline Acquiring platform returned an incorrect request error response')
|
|
17
|
+
super(status_code, response_body, type, title, status, detail, instance, message)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Dir[File.join(__dir__, 'sdk', '*.rb')].each { |f| require f }
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'worldline/acquiring/sdk/communication/request_param'
|
|
2
|
+
|
|
3
|
+
module Worldline::Acquiring::SDK::Communication
|
|
4
|
+
|
|
5
|
+
# extension of the RequestParam object to support comparison
|
|
6
|
+
class RequestParam
|
|
7
|
+
|
|
8
|
+
def ==(other)
|
|
9
|
+
other.instance_variables.each do |var|
|
|
10
|
+
unless instance_variable_get(var).to_s == other.instance_variable_get(var).to_s
|
|
11
|
+
return false
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# extension of the RequestHeader object to support comparison
|
|
19
|
+
class RequestHeader
|
|
20
|
+
|
|
21
|
+
def ==(other)
|
|
22
|
+
other.instance_variables.each do |var|
|
|
23
|
+
unless instance_variable_get(var).to_s == other.instance_variable_get(var).to_s
|
|
24
|
+
return false
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Not Found
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
--- # YAML settings used in testing the SDK
|
|
2
|
+
acquiring.api.endpoint.host: api.preprod.acquiring.worldline-solutions.com
|
|
3
|
+
acquiring.api.authorizationType: OAuth2
|
|
4
|
+
acquiring.api.oauth2.tokenUri: https://sso.preprod.acquiring.worldline-solutions.com/auth/realms/acquiring_api/protocol/openid-acquiring/token
|
|
5
|
+
acquiring.api.connectTimeout: 1000
|
|
6
|
+
acquiring.api.socketTimeout: 1000
|
|
7
|
+
acquiring.api.maxConnections: 100
|
|
8
|
+
acquiring.api.integrator: Worldline
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
--- # YAML settings used in testing the SDK
|
|
2
|
+
acquiring.api.endpoint.host: api.preprod.acquiring.worldline-solutions.com
|
|
3
|
+
acquiring.api.authorizationType: OAuth2
|
|
4
|
+
acquiring.api.oauth2.tokenUri: https://sso.preprod.acquiring.worldline-solutions.com/auth/realms/acquiring_api/protocol/openid-acquiring/token
|
|
5
|
+
acquiring.api.connectTimeout: 1000
|
|
6
|
+
acquiring.api.socketTimeout: 1000
|
|
7
|
+
acquiring.api.maxConnections: 10
|
|
8
|
+
acquiring.api.integrator: Worldline
|
|
9
|
+
# change uri to preferred proxy
|
|
10
|
+
acquiring.api.proxy.uri: http://localhost:9999
|
|
11
|
+
# change username and password to authentication credentials for the proxy, omit the entries if no authentication is required
|
|
12
|
+
# authentication is done using basic proxy authentication. Therefore, to avoid leaking credentials you should connect to the proxy using SSL
|
|
13
|
+
acquiring.api.proxy.username: test-user
|
|
14
|
+
acquiring.api.proxy.password: test-password
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration_setup'
|
|
3
|
+
require 'worldline/acquiring/sdk/factory'
|
|
4
|
+
require 'yaml'
|
|
5
|
+
|
|
6
|
+
describe 'connection pooling with the server' do
|
|
7
|
+
|
|
8
|
+
before(:context){WebMock.allow_net_connect!}
|
|
9
|
+
after(:context){WebMock.disable_net_connect!}
|
|
10
|
+
|
|
11
|
+
it 'runs with one connection per request' do
|
|
12
|
+
run_connection_pooling_test(10, 10)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'runs with one connection per two requests' do
|
|
16
|
+
run_connection_pooling_test(10, 5)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'runs with one connection for 10 requests' do
|
|
20
|
+
run_connection_pooling_test(10, 1)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class Event # as per https://emptysqua.re/blog/an-event-synchronization-primitive-for-ruby/
|
|
25
|
+
def initialize
|
|
26
|
+
@lock = Mutex.new
|
|
27
|
+
@cond = ConditionVariable.new
|
|
28
|
+
@flag = false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def set
|
|
32
|
+
@lock.synchronize do
|
|
33
|
+
@flag = true
|
|
34
|
+
@cond.broadcast
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def wait
|
|
39
|
+
@lock.synchronize do
|
|
40
|
+
unless @flag
|
|
41
|
+
@cond.wait(@lock)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# sends *request_count* requests with a maximum number of connections in the connection pool equal to *max_connections*
|
|
48
|
+
def run_connection_pooling_test(request_count, max_connections)
|
|
49
|
+
configuration = Integration.init_communicator_configuration(max_connections: max_connections)
|
|
50
|
+
begin
|
|
51
|
+
communicator = Worldline::Acquiring::SDK::Factory.create_communicator_from_configuration(configuration)
|
|
52
|
+
flag = Event.new
|
|
53
|
+
runner_threads = Array.new(request_count){ |i| Thread.new{run_request(i, communicator, flag)} }
|
|
54
|
+
flag.set
|
|
55
|
+
ensure
|
|
56
|
+
communicator.close unless communicator.nil?
|
|
57
|
+
end
|
|
58
|
+
results = Array.new(request_count){ |i| runner_threads[i].value } # returned values are arrays of size 2
|
|
59
|
+
puts "running times of #{request_count} threads using #{max_connections} connections:"
|
|
60
|
+
puts "each pair is the thread's start and end time in milliseconds"
|
|
61
|
+
results.each do |pair|
|
|
62
|
+
puts pair[0].to_s + ' ' + pair[1].to_s
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def run_request(i, communicator, flag)
|
|
67
|
+
request = Integration.get_dcc_rate_request
|
|
68
|
+
|
|
69
|
+
client = Worldline::Acquiring::SDK::Factory.create_client_from_communicator(communicator)
|
|
70
|
+
flag.wait
|
|
71
|
+
start_time = Time.now
|
|
72
|
+
client.v1.acquirer(Integration::ACQUIRER_ID).merchant(Integration::MERCHANT_ID).dynamic_currency_conversion.request_dcc_rate(request)
|
|
73
|
+
[start_time.to_i*1000, Time.now.to_i*1000]
|
|
74
|
+
end
|