direct-sdk-ruby 1.0.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.
Files changed (238) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +2 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +141 -0
  5. data/Rakefile +34 -0
  6. data/direct-sdk-ruby.gemspec +28 -0
  7. data/lib/ingenico/direct/sdk.rb +26 -0
  8. data/lib/ingenico/direct/sdk/api_exception.rb +42 -0
  9. data/lib/ingenico/direct/sdk/api_resource.rb +115 -0
  10. data/lib/ingenico/direct/sdk/authenticator.rb +16 -0
  11. data/lib/ingenico/direct/sdk/authorization_exception.rb +13 -0
  12. data/lib/ingenico/direct/sdk/call_context.rb +26 -0
  13. data/lib/ingenico/direct/sdk/client.rb +85 -0
  14. data/lib/ingenico/direct/sdk/communication_exception.rb +16 -0
  15. data/lib/ingenico/direct/sdk/communicator.rb +301 -0
  16. data/lib/ingenico/direct/sdk/communicator_configuration.rb +59 -0
  17. data/lib/ingenico/direct/sdk/connection.rb +41 -0
  18. data/lib/ingenico/direct/sdk/data_object.rb +32 -0
  19. data/lib/ingenico/direct/sdk/declined_payment_exception.rb +30 -0
  20. data/lib/ingenico/direct/sdk/declined_payout_exception.rb +32 -0
  21. data/lib/ingenico/direct/sdk/declined_refund_exception.rb +32 -0
  22. data/lib/ingenico/direct/sdk/declined_transaction_exception.rb +16 -0
  23. data/lib/ingenico/direct/sdk/defaultimpl.rb +6 -0
  24. data/lib/ingenico/direct/sdk/defaultimpl/authorization_type.rb +24 -0
  25. data/lib/ingenico/direct/sdk/defaultimpl/default_authenticator.rb +108 -0
  26. data/lib/ingenico/direct/sdk/defaultimpl/default_connection.rb +293 -0
  27. data/lib/ingenico/direct/sdk/defaultimpl/default_marshaller.rb +32 -0
  28. data/lib/ingenico/direct/sdk/direct_exception.rb +15 -0
  29. data/lib/ingenico/direct/sdk/domain/account_on_file.rb +50 -0
  30. data/lib/ingenico/direct/sdk/domain/account_on_file_attribute.rb +39 -0
  31. data/lib/ingenico/direct/sdk/domain/account_on_file_display_hints.rb +38 -0
  32. data/lib/ingenico/direct/sdk/domain/additional_order_input.rb +47 -0
  33. data/lib/ingenico/direct/sdk/domain/address.rb +51 -0
  34. data/lib/ingenico/direct/sdk/domain/address_personal.rb +59 -0
  35. data/lib/ingenico/direct/sdk/domain/airline_data.rb +129 -0
  36. data/lib/ingenico/direct/sdk/domain/airline_flight_leg.rb +99 -0
  37. data/lib/ingenico/direct/sdk/domain/airline_passenger.rb +39 -0
  38. data/lib/ingenico/direct/sdk/domain/amount_breakdown.rb +31 -0
  39. data/lib/ingenico/direct/sdk/domain/amount_of_money.rb +31 -0
  40. data/lib/ingenico/direct/sdk/domain/api_error.rb +47 -0
  41. data/lib/ingenico/direct/sdk/domain/browser_data.rb +39 -0
  42. data/lib/ingenico/direct/sdk/domain/cancel_payment_response.rb +31 -0
  43. data/lib/ingenico/direct/sdk/domain/capture.rb +47 -0
  44. data/lib/ingenico/direct/sdk/domain/capture_output.rb +79 -0
  45. data/lib/ingenico/direct/sdk/domain/capture_payment_request.rb +31 -0
  46. data/lib/ingenico/direct/sdk/domain/capture_response.rb +47 -0
  47. data/lib/ingenico/direct/sdk/domain/capture_status_output.rb +27 -0
  48. data/lib/ingenico/direct/sdk/domain/captures_response.rb +34 -0
  49. data/lib/ingenico/direct/sdk/domain/card.rb +39 -0
  50. data/lib/ingenico/direct/sdk/domain/card_essentials.rb +31 -0
  51. data/lib/ingenico/direct/sdk/domain/card_fraud_results.rb +35 -0
  52. data/lib/ingenico/direct/sdk/domain/card_payment_method_specific_input.rb +95 -0
  53. data/lib/ingenico/direct/sdk/domain/card_payment_method_specific_input_base.rb +79 -0
  54. data/lib/ingenico/direct/sdk/domain/card_payment_method_specific_output.rb +67 -0
  55. data/lib/ingenico/direct/sdk/domain/card_payout_method_specific_input.rb +39 -0
  56. data/lib/ingenico/direct/sdk/domain/card_recurrence_details.rb +27 -0
  57. data/lib/ingenico/direct/sdk/domain/card_without_cvv.rb +35 -0
  58. data/lib/ingenico/direct/sdk/domain/company_information.rb +27 -0
  59. data/lib/ingenico/direct/sdk/domain/complete_payment_card_payment_method_specific_input.rb +31 -0
  60. data/lib/ingenico/direct/sdk/domain/complete_payment_request.rb +39 -0
  61. data/lib/ingenico/direct/sdk/domain/complete_payment_response.rb +47 -0
  62. data/lib/ingenico/direct/sdk/domain/contact_details.rb +43 -0
  63. data/lib/ingenico/direct/sdk/domain/create_hosted_checkout_request.rb +63 -0
  64. data/lib/ingenico/direct/sdk/domain/create_hosted_checkout_response.rb +49 -0
  65. data/lib/ingenico/direct/sdk/domain/create_hosted_tokenization_request.rb +39 -0
  66. data/lib/ingenico/direct/sdk/domain/create_hosted_tokenization_response.rb +41 -0
  67. data/lib/ingenico/direct/sdk/domain/create_payment_request.rb +67 -0
  68. data/lib/ingenico/direct/sdk/domain/create_payment_response.rb +47 -0
  69. data/lib/ingenico/direct/sdk/domain/create_payout_request.rb +47 -0
  70. data/lib/ingenico/direct/sdk/domain/create_token_request.rb +35 -0
  71. data/lib/ingenico/direct/sdk/domain/created_payment_output.rb +35 -0
  72. data/lib/ingenico/direct/sdk/domain/created_token_response.rb +51 -0
  73. data/lib/ingenico/direct/sdk/domain/customer.rb +87 -0
  74. data/lib/ingenico/direct/sdk/domain/customer_account.rb +71 -0
  75. data/lib/ingenico/direct/sdk/domain/customer_account_authentication.rb +31 -0
  76. data/lib/ingenico/direct/sdk/domain/customer_device.rb +51 -0
  77. data/lib/ingenico/direct/sdk/domain/customer_payment_activity.rb +35 -0
  78. data/lib/ingenico/direct/sdk/domain/customer_token.rb +47 -0
  79. data/lib/ingenico/direct/sdk/domain/decrypted_payment_data.rb +43 -0
  80. data/lib/ingenico/direct/sdk/domain/directory_entry.rb +35 -0
  81. data/lib/ingenico/direct/sdk/domain/empty_validator.rb +13 -0
  82. data/lib/ingenico/direct/sdk/domain/error_response.rb +38 -0
  83. data/lib/ingenico/direct/sdk/domain/external_cardholder_authentication_data.rb +59 -0
  84. data/lib/ingenico/direct/sdk/domain/external_token_linked.rb +27 -0
  85. data/lib/ingenico/direct/sdk/domain/fixed_list_validator.rb +33 -0
  86. data/lib/ingenico/direct/sdk/domain/fraud_fields.rb +31 -0
  87. data/lib/ingenico/direct/sdk/domain/fraud_results.rb +27 -0
  88. data/lib/ingenico/direct/sdk/domain/g_pay_three_d_secure.rb +47 -0
  89. data/lib/ingenico/direct/sdk/domain/get_hosted_checkout_response.rb +35 -0
  90. data/lib/ingenico/direct/sdk/domain/get_hosted_tokenization_response.rb +35 -0
  91. data/lib/ingenico/direct/sdk/domain/get_payment_product_groups_response.rb +34 -0
  92. data/lib/ingenico/direct/sdk/domain/get_payment_products_response.rb +34 -0
  93. data/lib/ingenico/direct/sdk/domain/gift_card_purchase.rb +35 -0
  94. data/lib/ingenico/direct/sdk/domain/hosted_checkout_specific_input.rb +55 -0
  95. data/lib/ingenico/direct/sdk/domain/hosted_checkout_specific_output.rb +31 -0
  96. data/lib/ingenico/direct/sdk/domain/label_template_element.rb +31 -0
  97. data/lib/ingenico/direct/sdk/domain/length_validator.rb +31 -0
  98. data/lib/ingenico/direct/sdk/domain/line_item.rb +47 -0
  99. data/lib/ingenico/direct/sdk/domain/line_item_invoice_data.rb +27 -0
  100. data/lib/ingenico/direct/sdk/domain/loan_recipient.rb +43 -0
  101. data/lib/ingenico/direct/sdk/domain/merchant_action.rb +35 -0
  102. data/lib/ingenico/direct/sdk/domain/mobile_payment_data.rb +31 -0
  103. data/lib/ingenico/direct/sdk/domain/mobile_payment_method_specific_input.rb +63 -0
  104. data/lib/ingenico/direct/sdk/domain/mobile_payment_method_specific_output.rb +59 -0
  105. data/lib/ingenico/direct/sdk/domain/mobile_payment_product320_specific_input.rb +31 -0
  106. data/lib/ingenico/direct/sdk/domain/order.rb +71 -0
  107. data/lib/ingenico/direct/sdk/domain/order_line_details.rb +55 -0
  108. data/lib/ingenico/direct/sdk/domain/order_references.rb +31 -0
  109. data/lib/ingenico/direct/sdk/domain/order_status_output.rb +50 -0
  110. data/lib/ingenico/direct/sdk/domain/order_type_information.rb +31 -0
  111. data/lib/ingenico/direct/sdk/domain/payment_account_on_file.rb +31 -0
  112. data/lib/ingenico/direct/sdk/domain/payment_creation_output.rb +39 -0
  113. data/lib/ingenico/direct/sdk/domain/payment_error_response.rb +46 -0
  114. data/lib/ingenico/direct/sdk/domain/payment_output.rb +79 -0
  115. data/lib/ingenico/direct/sdk/domain/payment_product.rb +77 -0
  116. data/lib/ingenico/direct/sdk/domain/payment_product5100_specific_input.rb +27 -0
  117. data/lib/ingenico/direct/sdk/domain/payment_product5402_specific_output.rb +27 -0
  118. data/lib/ingenico/direct/sdk/domain/payment_product5500_specific_output.rb +35 -0
  119. data/lib/ingenico/direct/sdk/domain/payment_product771_specific_output.rb +13 -0
  120. data/lib/ingenico/direct/sdk/domain/payment_product840_customer_account.rb +55 -0
  121. data/lib/ingenico/direct/sdk/domain/payment_product840_specific_output.rb +54 -0
  122. data/lib/ingenico/direct/sdk/domain/payment_product_display_hints.rb +35 -0
  123. data/lib/ingenico/direct/sdk/domain/payment_product_field.rb +47 -0
  124. data/lib/ingenico/direct/sdk/domain/payment_product_field_data_restrictions.rb +35 -0
  125. data/lib/ingenico/direct/sdk/domain/payment_product_field_display_element.rb +39 -0
  126. data/lib/ingenico/direct/sdk/domain/payment_product_field_display_hints.rb +71 -0
  127. data/lib/ingenico/direct/sdk/domain/payment_product_field_form_element.rb +38 -0
  128. data/lib/ingenico/direct/sdk/domain/payment_product_field_tooltip.rb +31 -0
  129. data/lib/ingenico/direct/sdk/domain/payment_product_field_validators.rb +91 -0
  130. data/lib/ingenico/direct/sdk/domain/payment_product_filter.rb +43 -0
  131. data/lib/ingenico/direct/sdk/domain/payment_product_filters_hosted_checkout.rb +38 -0
  132. data/lib/ingenico/direct/sdk/domain/payment_product_group.rb +43 -0
  133. data/lib/ingenico/direct/sdk/domain/payment_product_networks_response.rb +33 -0
  134. data/lib/ingenico/direct/sdk/domain/payment_references.rb +27 -0
  135. data/lib/ingenico/direct/sdk/domain/payment_response.rb +55 -0
  136. data/lib/ingenico/direct/sdk/domain/payment_status_output.rb +58 -0
  137. data/lib/ingenico/direct/sdk/domain/payout_error_response.rb +46 -0
  138. data/lib/ingenico/direct/sdk/domain/payout_output.rb +31 -0
  139. data/lib/ingenico/direct/sdk/domain/payout_response.rb +47 -0
  140. data/lib/ingenico/direct/sdk/domain/payout_result.rb +47 -0
  141. data/lib/ingenico/direct/sdk/domain/payout_status_output.rb +35 -0
  142. data/lib/ingenico/direct/sdk/domain/personal_information.rb +39 -0
  143. data/lib/ingenico/direct/sdk/domain/personal_information_token.rb +31 -0
  144. data/lib/ingenico/direct/sdk/domain/personal_name.rb +35 -0
  145. data/lib/ingenico/direct/sdk/domain/personal_name_token.rb +31 -0
  146. data/lib/ingenico/direct/sdk/domain/product_directory.rb +34 -0
  147. data/lib/ingenico/direct/sdk/domain/protection_eligibility.rb +31 -0
  148. data/lib/ingenico/direct/sdk/domain/range_validator.rb +31 -0
  149. data/lib/ingenico/direct/sdk/domain/redirect_data.rb +31 -0
  150. data/lib/ingenico/direct/sdk/domain/redirect_payment_method_specific_input.rb +67 -0
  151. data/lib/ingenico/direct/sdk/domain/redirect_payment_method_specific_output.rb +67 -0
  152. data/lib/ingenico/direct/sdk/domain/redirect_payment_product809_specific_input.rb +27 -0
  153. data/lib/ingenico/direct/sdk/domain/redirect_payment_product840_specific_input.rb +27 -0
  154. data/lib/ingenico/direct/sdk/domain/redirection_data.rb +27 -0
  155. data/lib/ingenico/direct/sdk/domain/refund_card_method_specific_output.rb +31 -0
  156. data/lib/ingenico/direct/sdk/domain/refund_e_wallet_method_specific_output.rb +39 -0
  157. data/lib/ingenico/direct/sdk/domain/refund_error_response.rb +46 -0
  158. data/lib/ingenico/direct/sdk/domain/refund_mobile_method_specific_output.rb +35 -0
  159. data/lib/ingenico/direct/sdk/domain/refund_output.rb +79 -0
  160. data/lib/ingenico/direct/sdk/domain/refund_payment_product840_customer_account.rb +35 -0
  161. data/lib/ingenico/direct/sdk/domain/refund_payment_product840_specific_output.rb +31 -0
  162. data/lib/ingenico/direct/sdk/domain/refund_redirect_method_specific_output.rb +31 -0
  163. data/lib/ingenico/direct/sdk/domain/refund_request.rb +31 -0
  164. data/lib/ingenico/direct/sdk/domain/refund_response.rb +47 -0
  165. data/lib/ingenico/direct/sdk/domain/refunds_response.rb +34 -0
  166. data/lib/ingenico/direct/sdk/domain/regular_expression_validator.rb +27 -0
  167. data/lib/ingenico/direct/sdk/domain/sepa_direct_debit_payment_method_specific_output.rb +43 -0
  168. data/lib/ingenico/direct/sdk/domain/session_request.rb +33 -0
  169. data/lib/ingenico/direct/sdk/domain/session_response.rb +49 -0
  170. data/lib/ingenico/direct/sdk/domain/shipping.rb +51 -0
  171. data/lib/ingenico/direct/sdk/domain/shopping_cart.rb +65 -0
  172. data/lib/ingenico/direct/sdk/domain/shopping_cart_extension.rb +52 -0
  173. data/lib/ingenico/direct/sdk/domain/test_connection.rb +27 -0
  174. data/lib/ingenico/direct/sdk/domain/three_d_secure.rb +63 -0
  175. data/lib/ingenico/direct/sdk/domain/three_d_secure_base.rb +47 -0
  176. data/lib/ingenico/direct/sdk/domain/three_d_secure_data.rb +35 -0
  177. data/lib/ingenico/direct/sdk/domain/three_d_secure_results.rb +31 -0
  178. data/lib/ingenico/direct/sdk/domain/token_card.rb +35 -0
  179. data/lib/ingenico/direct/sdk/domain/token_card_data.rb +31 -0
  180. data/lib/ingenico/direct/sdk/domain/token_card_specific_input.rb +31 -0
  181. data/lib/ingenico/direct/sdk/domain/token_data.rb +31 -0
  182. data/lib/ingenico/direct/sdk/domain/token_e_wallet.rb +35 -0
  183. data/lib/ingenico/direct/sdk/domain/token_response.rb +55 -0
  184. data/lib/ingenico/direct/sdk/domain/value_mapping_element.rb +38 -0
  185. data/lib/ingenico/direct/sdk/endpoint_configuration.rb +127 -0
  186. data/lib/ingenico/direct/sdk/exceptions.rb +8 -0
  187. data/lib/ingenico/direct/sdk/factory.rb +136 -0
  188. data/lib/ingenico/direct/sdk/idempotence_exception.rb +24 -0
  189. data/lib/ingenico/direct/sdk/logging.rb +10 -0
  190. data/lib/ingenico/direct/sdk/logging/communicator_logger.rb +22 -0
  191. data/lib/ingenico/direct/sdk/logging/log_message_builder.rb +56 -0
  192. data/lib/ingenico/direct/sdk/logging/logging_capable.rb +19 -0
  193. data/lib/ingenico/direct/sdk/logging/logging_util.rb +271 -0
  194. data/lib/ingenico/direct/sdk/logging/request_log_message_builder.rb +39 -0
  195. data/lib/ingenico/direct/sdk/logging/response_log_message_builder.rb +34 -0
  196. data/lib/ingenico/direct/sdk/logging/ruby_communicator_logger.rb +57 -0
  197. data/lib/ingenico/direct/sdk/logging/stdout_communicator_logger.rb +34 -0
  198. data/lib/ingenico/direct/sdk/marshaller.rb +24 -0
  199. data/lib/ingenico/direct/sdk/marshaller_syntax_exception.rb +6 -0
  200. data/lib/ingenico/direct/sdk/merchant/hostedcheckout/hosted_checkout_client.rb +87 -0
  201. data/lib/ingenico/direct/sdk/merchant/hostedtokenization/hosted_tokenization_client.rb +87 -0
  202. data/lib/ingenico/direct/sdk/merchant/merchant_client.rb +83 -0
  203. data/lib/ingenico/direct/sdk/merchant/payments/payments_client.rb +291 -0
  204. data/lib/ingenico/direct/sdk/merchant/payouts/payouts_client.rb +87 -0
  205. data/lib/ingenico/direct/sdk/merchant/productgroups/get_product_group_params.rb +58 -0
  206. data/lib/ingenico/direct/sdk/merchant/productgroups/get_product_groups_params.rb +58 -0
  207. data/lib/ingenico/direct/sdk/merchant/productgroups/product_groups_client.rb +88 -0
  208. data/lib/ingenico/direct/sdk/merchant/products/get_payment_product_networks_params.rb +39 -0
  209. data/lib/ingenico/direct/sdk/merchant/products/get_payment_product_params.rb +58 -0
  210. data/lib/ingenico/direct/sdk/merchant/products/get_payment_products_params.rb +58 -0
  211. data/lib/ingenico/direct/sdk/merchant/products/get_product_directory_params.rb +31 -0
  212. data/lib/ingenico/direct/sdk/merchant/products/products_client.rb +156 -0
  213. data/lib/ingenico/direct/sdk/merchant/services/services_client.rb +52 -0
  214. data/lib/ingenico/direct/sdk/merchant/sessions/sessions_client.rb +55 -0
  215. data/lib/ingenico/direct/sdk/merchant/tokens/tokens_client.rb +117 -0
  216. data/lib/ingenico/direct/sdk/meta_data_provider.rb +150 -0
  217. data/lib/ingenico/direct/sdk/modules.rb +71 -0
  218. data/lib/ingenico/direct/sdk/not_found_exception.rb +16 -0
  219. data/lib/ingenico/direct/sdk/param_request.rb +11 -0
  220. data/lib/ingenico/direct/sdk/pooled_connection.rb +21 -0
  221. data/lib/ingenico/direct/sdk/proxy_configuration.rb +74 -0
  222. data/lib/ingenico/direct/sdk/reference_exception.rb +14 -0
  223. data/lib/ingenico/direct/sdk/request_header.rb +50 -0
  224. data/lib/ingenico/direct/sdk/request_param.rb +23 -0
  225. data/lib/ingenico/direct/sdk/response_exception.rb +47 -0
  226. data/lib/ingenico/direct/sdk/response_header.rb +42 -0
  227. data/lib/ingenico/direct/sdk/validation_exception.rb +14 -0
  228. data/lib/ingenico/direct/sdk/webhooks.rb +11 -0
  229. data/lib/ingenico/direct/sdk/webhooks/api_version_mismatch_exception.rb +20 -0
  230. data/lib/ingenico/direct/sdk/webhooks/in_memory_secret_key_store.rb +56 -0
  231. data/lib/ingenico/direct/sdk/webhooks/secret_key_not_available_exception.rb +17 -0
  232. data/lib/ingenico/direct/sdk/webhooks/secret_key_store.rb +16 -0
  233. data/lib/ingenico/direct/sdk/webhooks/signature_validation_exception.rb +19 -0
  234. data/lib/ingenico/direct/sdk/webhooks/webhooks.rb +22 -0
  235. data/lib/ingenico/direct/sdk/webhooks/webhooks_event.rb +58 -0
  236. data/lib/ingenico/direct/sdk/webhooks/webhooks_helper.rb +99 -0
  237. data/lib/ingenico/direct/sdk/webhooks/webhooks_helper_builder.rb +25 -0
  238. metadata +385 -0
@@ -0,0 +1,39 @@
1
+ module Ingenico::Direct::SDK
2
+ module Logging
3
+
4
+ # Class that converts data about a request into a properly formatted log message.
5
+ # Formats request id, http method, uri, headers and body into a helpful message.
6
+ class RequestLogMessageBuilder < Ingenico::Direct::SDK::Logging::LogMessageBuilder
7
+
8
+ def initialize(request_id, method, uri)
9
+ super(request_id)
10
+ @method = method
11
+ @uri = uri
12
+ end
13
+
14
+ # Constructs and returns a log message based on the request data. The log message is a string.
15
+ def get_message
16
+ @body ?
17
+ sprintf(MSG_TEMPLATE_WITH_BODY, @request_id, empty_if_null(@method),
18
+ format_uri, @headers, empty_if_null(@content_type), @body) :
19
+ sprintf(MSG_TEMPLATE_WITHOUT_BODY, @request_id, empty_if_null(@method), format_uri, @headers)
20
+ end
21
+
22
+ private
23
+
24
+ MSG_TEMPLATE_WITHOUT_BODY = "Outgoing request (requestId=\"%s\"):\n"\
25
+ " method: \"%s\"\n"\
26
+ " uri: \"%s\"\n"\
27
+ " headers: \"%s\"".freeze
28
+ MSG_TEMPLATE_WITH_BODY = "#{MSG_TEMPLATE_WITHOUT_BODY}\n"\
29
+ " content-type: \"%s\"\n"\
30
+ " body: \"%s\"".freeze
31
+
32
+ def format_uri
33
+ return '' unless @uri && @uri.path
34
+ return @uri.path unless @uri.query
35
+ "#{@uri.path}?#{@uri.query}"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,34 @@
1
+ module Ingenico::Direct::SDK
2
+ module Logging
3
+
4
+ class ResponseLogMessageBuilder < LogMessageBuilder
5
+
6
+ # Class that converts data about a response into a properly formatted log message.
7
+ # Formats request id, status code, headers, body and time between request and response into a helpful message.
8
+ #
9
+ # @param request_id [String] identifier of the request corresponding to this response.
10
+ # @param status_code [Integer] HTTP status code of the response.
11
+ # @param duration [Float] time elapsed between request and response.
12
+ def initialize(request_id, status_code, duration = -1)
13
+ super(request_id)
14
+ @status_code = status_code
15
+ @duration = duration
16
+ end
17
+
18
+ # Constructs and returns a log message based on the request data. The log message is a string.
19
+ def get_message
20
+ msg_template = "Incoming response (requestId=\"%s\"#{(@duration.positive?) ? ", %.3f ms" : ""}):\n" +
21
+ " status-code: \"%s\"\n" +
22
+ " headers: \"%s\"\n" +
23
+ " content-type: \"%s\"\n" +
24
+ " body: \"%s\""
25
+
26
+ @duration.positive? ?
27
+ sprintf(msg_template, @request_id, @duration, @status_code, @headers,
28
+ empty_if_null(@content_type), empty_if_null(@body)) :
29
+ sprintf(msg_template, @request_id, @status_code, @headers,
30
+ empty_if_null(@content_type), empty_if_null(@body))
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,57 @@
1
+ require 'English'
2
+
3
+ module Ingenico::Direct::SDK
4
+ module Logging
5
+
6
+ # Logging class that Logs messages and errors to a logger.
7
+ # Errors can be logged at a separate level compared to regular messages.
8
+ class RubyCommunicatorLogger < CommunicatorLogger
9
+
10
+ # Creates a new RubyCommunicatorLogger instance.
11
+ #
12
+ # @param logger [Logger] the logger to log messages to. Messages to log will be provided using logger#log(message level, message)
13
+ # @param log_level [String] log level to use for non-error messages.
14
+ # @param error_level [String] error logging level to use.
15
+ def initialize(logger, log_level, error_level = false)
16
+ # implement the interface
17
+ error_level ||= log_level
18
+ raise ArgumentError unless logger
19
+ raise ArgumentError unless log_level
20
+ raise ArgumentError unless error_level
21
+
22
+ @logger = logger
23
+ @log_level = log_level
24
+ @errorLevel = error_level
25
+ end
26
+
27
+ # Logs a single error or non-error message to the logger.
28
+ def log(msg, thrown = nil)
29
+ # use Ruby Logger
30
+ if thrown
31
+ @logger.log(@errorLevel) { msg + $RS + thrown.to_s + $RS + thrown.backtrace.join($RS) }
32
+ else
33
+ @logger.log(@log_level, msg)
34
+ end
35
+ end
36
+
37
+ # Opens or creates a new file in write-only mode with _filename_.
38
+ def self.create_logfile(filename)
39
+ logdev = begin
40
+ open(filename, (File::WRONLY | File::APPEND | File::CREAT | File::EXCL))
41
+ rescue Errno::EEXIST
42
+ # file is created by another process
43
+ open_logfile(filename)
44
+ end
45
+ logdev.sync = true
46
+ logdev
47
+ end
48
+
49
+ # Opens or creates a new file in write-only mode with _filename_.
50
+ def self.open_logfile(filename)
51
+ open(filename, (File::WRONLY | File::APPEND))
52
+ rescue Errno::ENOENT
53
+ create_logfile(filename)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,34 @@
1
+ require 'English'
2
+ require 'singleton'
3
+
4
+ module Ingenico::Direct::SDK
5
+ module Logging
6
+
7
+ # {Ingenico::Direct::SDK::Logging::CommunicatorLogger} that logs the messages to $stdout.
8
+ class StdoutCommunicatorLogger < CommunicatorLogger
9
+ include Singleton
10
+
11
+ def initialize
12
+ # implement the interface
13
+ end
14
+
15
+ # NOTE: this alias is needed to not break existing method calls depending on old interface
16
+ class << self
17
+ alias_method :INSTANCE, :instance
18
+ end
19
+
20
+ # Logs a single error or non-error message to $stdout.
21
+ def log(msg, thrown = nil)
22
+ $stdout.puts get_date_prefix + msg
23
+ $stdout.puts thrown.to_s if thrown
24
+ $stdout.puts thrown.backtrace.join($RS) if thrown
25
+ end
26
+
27
+ private
28
+
29
+ def get_date_prefix
30
+ Time.now.strftime("%Y-%m-%dT%H:%M:%S ")
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,24 @@
1
+ module Ingenico::Direct::SDK
2
+
3
+ # Class responsible for marshalling and unmarshalling objects to and from JSON
4
+ class Marshaller
5
+
6
+ # Marshals _request_object_ to JSON format by calling #to_h on it.
7
+ #
8
+ # @param request_object [Ingenico::Direct::SDK::DataObject] the object to format
9
+ # @return [String] _request_object_ converted to JSON
10
+ def marshal(request_object)
11
+ raise NotImplementedError
12
+ end
13
+
14
+ # Unmarshals a JSON string into an object of type _type_.
15
+ # The new object is initialized by calling .new_from_hash with contents of the JSON as a Hash object.
16
+ #
17
+ # @param response_json [String] The JSON to unmarshal
18
+ # @param type [Type] The class of the object that will be instantiated using _type.new_from_hash_
19
+ # @return The JSON unmarshalled to the given type
20
+ def unmarshal(response_json, type)
21
+ raise NotImplementedError
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,6 @@
1
+ module Ingenico::Direct::SDK
2
+
3
+ # Raised when an error occurred while marshalling/unmarshalling data to/from JSON
4
+ class MarshallerSyntaxException < RuntimeError
5
+ end
6
+ end
@@ -0,0 +1,87 @@
1
+ #
2
+ # This class was auto-generated from the API references found at
3
+ # https://support.direct.ingenico.com/documentation/api/reference/
4
+ #
5
+ require 'ingenico/direct/sdk/api_resource'
6
+ require 'ingenico/direct/sdk/response_exception'
7
+ require 'ingenico/direct/sdk/domain/create_hosted_checkout_request'
8
+ require 'ingenico/direct/sdk/domain/create_hosted_checkout_response'
9
+ require 'ingenico/direct/sdk/domain/error_response'
10
+ require 'ingenico/direct/sdk/domain/get_hosted_checkout_response'
11
+
12
+ module Ingenico::Direct::SDK
13
+ module Merchant
14
+ module HostedCheckout
15
+
16
+ # HostedCheckout client. Thread-safe.
17
+ class HostedCheckoutClient < Ingenico::Direct::SDK::ApiResource
18
+
19
+ # @param parent [Ingenico::Direct::SDK::ApiResource]
20
+ # @param path_context [Hash, nil]
21
+ def initialize(parent, path_context = nil)
22
+ super(parent, path_context)
23
+ end
24
+
25
+ # Resource /v2/!{merchantId}/hostedcheckouts - {https://support.direct.ingenico.com/documentation/api/reference#operation/CreateHostedCheckoutApi Create hosted checkout}
26
+ # @param body [Ingenico::Direct::SDK::Domain::CreateHostedCheckoutRequest]
27
+ # @param context [Ingenico::Direct::SDK::CallContext]
28
+ # @return [Ingenico::Direct::SDK::Domain::CreateHostedCheckoutResponse]
29
+ # @raise [Ingenico::Direct::SDK::ValidationException] if the request was not correct and couldn't be processed (HTTP status code 400)
30
+ # @raise [Ingenico::Direct::SDK::AuthorizationException] if the request was not allowed (HTTP status code 403)
31
+ # @raise [Ingenico::Direct::SDK::IdempotenceException] if an idempotent request caused a conflict (HTTP status code 409)
32
+ # @raise [Ingenico::Direct::SDK::ReferenceException] if an object was attempted to be referenced that doesn't exist or has been removed,
33
+ # or there was a conflict (HTTP status code 404, 409 or 410)
34
+ # @raise [Ingenico::Direct::SDK::GlobalCollectException] if something went wrong at the Ingenico ePayments platform,
35
+ # the Ingenico ePayments platform was unable to process a message from a downstream partner/acquirer,
36
+ # or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
37
+ # @raise [Ingenico::Direct::SDK::ApiException]if the Ingenico ePayments platform returned any other error
38
+ def create_hosted_checkout(body, context = nil)
39
+ uri = instantiate_uri('/v2/{merchantId}/hostedcheckouts')
40
+ @communicator.post(
41
+ uri,
42
+ client_headers,
43
+ nil,
44
+ body,
45
+ Ingenico::Direct::SDK::Domain::CreateHostedCheckoutResponse,
46
+ context
47
+ )
48
+ rescue ResponseException => e
49
+ error_type = Ingenico::Direct::SDK::Domain::ErrorResponse
50
+ error_object = @communicator.marshaller.unmarshal(e.body, error_type)
51
+ raise create_exception(e.status_code, e.body, error_object, context)
52
+ end
53
+
54
+ # Resource /v2/!{merchantId}/hostedcheckouts/!{hostedCheckoutId} - {https://support.direct.ingenico.com/documentation/api/reference#operation/GetHostedCheckoutApi Get hosted checkout status}
55
+ # @param hosted_checkout_id [String]
56
+ # @param context [Ingenico::Direct::SDK::CallContext]
57
+ # @return [Ingenico::Direct::SDK::Domain::GetHostedCheckoutResponse]
58
+ # @raise [Ingenico::Direct::SDK::ValidationException] if the request was not correct and couldn't be processed (HTTP status code 400)
59
+ # @raise [Ingenico::Direct::SDK::AuthorizationException] if the request was not allowed (HTTP status code 403)
60
+ # @raise [Ingenico::Direct::SDK::IdempotenceException] if an idempotent request caused a conflict (HTTP status code 409)
61
+ # @raise [Ingenico::Direct::SDK::ReferenceException] if an object was attempted to be referenced that doesn't exist or has been removed,
62
+ # or there was a conflict (HTTP status code 404, 409 or 410)
63
+ # @raise [Ingenico::Direct::SDK::GlobalCollectException] if something went wrong at the Ingenico ePayments platform,
64
+ # the Ingenico ePayments platform was unable to process a message from a downstream partner/acquirer,
65
+ # or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
66
+ # @raise [Ingenico::Direct::SDK::ApiException]if the Ingenico ePayments platform returned any other error
67
+ def get_hosted_checkout(hosted_checkout_id, context = nil)
68
+ path_context = {
69
+ 'hostedCheckoutId'.freeze => hosted_checkout_id,
70
+ }
71
+ uri = instantiate_uri('/v2/{merchantId}/hostedcheckouts/{hostedCheckoutId}', path_context)
72
+ @communicator.get(
73
+ uri,
74
+ client_headers,
75
+ nil,
76
+ Ingenico::Direct::SDK::Domain::GetHostedCheckoutResponse,
77
+ context
78
+ )
79
+ rescue ResponseException => e
80
+ error_type = Ingenico::Direct::SDK::Domain::ErrorResponse
81
+ error_object = @communicator.marshaller.unmarshal(e.body, error_type)
82
+ raise create_exception(e.status_code, e.body, error_object, context)
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,87 @@
1
+ #
2
+ # This class was auto-generated from the API references found at
3
+ # https://support.direct.ingenico.com/documentation/api/reference/
4
+ #
5
+ require 'ingenico/direct/sdk/api_resource'
6
+ require 'ingenico/direct/sdk/response_exception'
7
+ require 'ingenico/direct/sdk/domain/create_hosted_tokenization_request'
8
+ require 'ingenico/direct/sdk/domain/create_hosted_tokenization_response'
9
+ require 'ingenico/direct/sdk/domain/error_response'
10
+ require 'ingenico/direct/sdk/domain/get_hosted_tokenization_response'
11
+
12
+ module Ingenico::Direct::SDK
13
+ module Merchant
14
+ module HostedTokenization
15
+
16
+ # HostedTokenization client. Thread-safe.
17
+ class HostedTokenizationClient < Ingenico::Direct::SDK::ApiResource
18
+
19
+ # @param parent [Ingenico::Direct::SDK::ApiResource]
20
+ # @param path_context [Hash, nil]
21
+ def initialize(parent, path_context = nil)
22
+ super(parent, path_context)
23
+ end
24
+
25
+ # Resource /v2/!{merchantId}/hostedtokenizations - {https://support.direct.ingenico.com/documentation/api/reference#operation/CreateHostedTokenizationApi Create hosted tokenization session}
26
+ # @param body [Ingenico::Direct::SDK::Domain::CreateHostedTokenizationRequest]
27
+ # @param context [Ingenico::Direct::SDK::CallContext]
28
+ # @return [Ingenico::Direct::SDK::Domain::CreateHostedTokenizationResponse]
29
+ # @raise [Ingenico::Direct::SDK::ValidationException] if the request was not correct and couldn't be processed (HTTP status code 400)
30
+ # @raise [Ingenico::Direct::SDK::AuthorizationException] if the request was not allowed (HTTP status code 403)
31
+ # @raise [Ingenico::Direct::SDK::IdempotenceException] if an idempotent request caused a conflict (HTTP status code 409)
32
+ # @raise [Ingenico::Direct::SDK::ReferenceException] if an object was attempted to be referenced that doesn't exist or has been removed,
33
+ # or there was a conflict (HTTP status code 404, 409 or 410)
34
+ # @raise [Ingenico::Direct::SDK::GlobalCollectException] if something went wrong at the Ingenico ePayments platform,
35
+ # the Ingenico ePayments platform was unable to process a message from a downstream partner/acquirer,
36
+ # or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
37
+ # @raise [Ingenico::Direct::SDK::ApiException]if the Ingenico ePayments platform returned any other error
38
+ def create_hosted_tokenization(body, context = nil)
39
+ uri = instantiate_uri('/v2/{merchantId}/hostedtokenizations')
40
+ @communicator.post(
41
+ uri,
42
+ client_headers,
43
+ nil,
44
+ body,
45
+ Ingenico::Direct::SDK::Domain::CreateHostedTokenizationResponse,
46
+ context
47
+ )
48
+ rescue ResponseException => e
49
+ error_type = Ingenico::Direct::SDK::Domain::ErrorResponse
50
+ error_object = @communicator.marshaller.unmarshal(e.body, error_type)
51
+ raise create_exception(e.status_code, e.body, error_object, context)
52
+ end
53
+
54
+ # Resource /v2/!{merchantId}/hostedtokenizations/!{hostedTokenizationId} - {https://support.direct.ingenico.com/documentation/api/reference#operation/GetHostedTokenizationApi Get hosted tokenization session}
55
+ # @param hosted_tokenization_id [String]
56
+ # @param context [Ingenico::Direct::SDK::CallContext]
57
+ # @return [Ingenico::Direct::SDK::Domain::GetHostedTokenizationResponse]
58
+ # @raise [Ingenico::Direct::SDK::ValidationException] if the request was not correct and couldn't be processed (HTTP status code 400)
59
+ # @raise [Ingenico::Direct::SDK::AuthorizationException] if the request was not allowed (HTTP status code 403)
60
+ # @raise [Ingenico::Direct::SDK::IdempotenceException] if an idempotent request caused a conflict (HTTP status code 409)
61
+ # @raise [Ingenico::Direct::SDK::ReferenceException] if an object was attempted to be referenced that doesn't exist or has been removed,
62
+ # or there was a conflict (HTTP status code 404, 409 or 410)
63
+ # @raise [Ingenico::Direct::SDK::GlobalCollectException] if something went wrong at the Ingenico ePayments platform,
64
+ # the Ingenico ePayments platform was unable to process a message from a downstream partner/acquirer,
65
+ # or the service that you're trying to reach is temporary unavailable (HTTP status code 500, 502 or 503)
66
+ # @raise [Ingenico::Direct::SDK::ApiException]if the Ingenico ePayments platform returned any other error
67
+ def get_hosted_tokenization(hosted_tokenization_id, context = nil)
68
+ path_context = {
69
+ 'hostedTokenizationId'.freeze => hosted_tokenization_id,
70
+ }
71
+ uri = instantiate_uri('/v2/{merchantId}/hostedtokenizations/{hostedTokenizationId}', path_context)
72
+ @communicator.get(
73
+ uri,
74
+ client_headers,
75
+ nil,
76
+ Ingenico::Direct::SDK::Domain::GetHostedTokenizationResponse,
77
+ context
78
+ )
79
+ rescue ResponseException => e
80
+ error_type = Ingenico::Direct::SDK::Domain::ErrorResponse
81
+ error_object = @communicator.marshaller.unmarshal(e.body, error_type)
82
+ raise create_exception(e.status_code, e.body, error_object, context)
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,83 @@
1
+ #
2
+ # This class was auto-generated from the API references found at
3
+ # https://support.direct.ingenico.com/documentation/api/reference/
4
+ #
5
+ require 'ingenico/direct/sdk/api_resource'
6
+ require 'ingenico/direct/sdk/merchant/hostedcheckout/hosted_checkout_client'
7
+ require 'ingenico/direct/sdk/merchant/hostedtokenization/hosted_tokenization_client'
8
+ require 'ingenico/direct/sdk/merchant/payments/payments_client'
9
+ require 'ingenico/direct/sdk/merchant/payouts/payouts_client'
10
+ require 'ingenico/direct/sdk/merchant/productgroups/product_groups_client'
11
+ require 'ingenico/direct/sdk/merchant/products/products_client'
12
+ require 'ingenico/direct/sdk/merchant/services/services_client'
13
+ require 'ingenico/direct/sdk/merchant/sessions/sessions_client'
14
+ require 'ingenico/direct/sdk/merchant/tokens/tokens_client'
15
+
16
+ module Ingenico::Direct::SDK
17
+ module Merchant
18
+
19
+ # Merchant client. Thread-safe.
20
+ class MerchantClient < Ingenico::Direct::SDK::ApiResource
21
+
22
+ # @param parent [Ingenico::Direct::SDK::ApiResource]
23
+ # @param path_context [Hash, nil]
24
+ def initialize(parent, path_context = nil)
25
+ super(parent, path_context)
26
+ end
27
+
28
+ # Resource /v2/!{merchantId}/products
29
+ # @return [Ingenico::Direct::SDK::Merchant::Products::ProductsClient]
30
+ def products
31
+ Ingenico::Direct::SDK::Merchant::Products::ProductsClient.new(self, nil)
32
+ end
33
+
34
+ # Resource /v2/!{merchantId}/sessions
35
+ # @return [Ingenico::Direct::SDK::Merchant::Sessions::SessionsClient]
36
+ def sessions
37
+ Ingenico::Direct::SDK::Merchant::Sessions::SessionsClient.new(self, nil)
38
+ end
39
+
40
+ # Resource /v2/!{merchantId}/payouts
41
+ # @return [Ingenico::Direct::SDK::Merchant::Payouts::PayoutsClient]
42
+ def payouts
43
+ Ingenico::Direct::SDK::Merchant::Payouts::PayoutsClient.new(self, nil)
44
+ end
45
+
46
+ # Resource /v2/!{merchantId}/payments
47
+ # @return [Ingenico::Direct::SDK::Merchant::Payments::PaymentsClient]
48
+ def payments
49
+ Ingenico::Direct::SDK::Merchant::Payments::PaymentsClient.new(self, nil)
50
+ end
51
+
52
+ # Resource /v2/!{merchantId}/services/testconnection
53
+ # @return [Ingenico::Direct::SDK::Merchant::Services::ServicesClient]
54
+ def services
55
+ Ingenico::Direct::SDK::Merchant::Services::ServicesClient.new(self, nil)
56
+ end
57
+
58
+ # Resource /v2/!{merchantId}/productgroups
59
+ # @return [Ingenico::Direct::SDK::Merchant::ProductGroups::ProductGroupsClient]
60
+ def product_groups
61
+ Ingenico::Direct::SDK::Merchant::ProductGroups::ProductGroupsClient.new(self, nil)
62
+ end
63
+
64
+ # Resource /v2/!{merchantId}/hostedtokenizations
65
+ # @return [Ingenico::Direct::SDK::Merchant::HostedTokenization::HostedTokenizationClient]
66
+ def hosted_tokenization
67
+ Ingenico::Direct::SDK::Merchant::HostedTokenization::HostedTokenizationClient.new(self, nil)
68
+ end
69
+
70
+ # Resource /v2/!{merchantId}/tokens
71
+ # @return [Ingenico::Direct::SDK::Merchant::Tokens::TokensClient]
72
+ def tokens
73
+ Ingenico::Direct::SDK::Merchant::Tokens::TokensClient.new(self, nil)
74
+ end
75
+
76
+ # Resource /v2/!{merchantId}/hostedcheckouts
77
+ # @return [Ingenico::Direct::SDK::Merchant::HostedCheckout::HostedCheckoutClient]
78
+ def hosted_checkout
79
+ Ingenico::Direct::SDK::Merchant::HostedCheckout::HostedCheckoutClient.new(self, nil)
80
+ end
81
+ end
82
+ end
83
+ end