connect-sdk-ruby 2.45.0 → 2.46.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 (588) hide show
  1. checksums.yaml +4 -4
  2. data/connect-sdk-ruby.gemspec +1 -1
  3. data/examples/merchant/captures/create_refund_capture_example.rb +1 -1
  4. data/examples/merchant/captures/get_capture_example.rb +1 -1
  5. data/examples/merchant/disputes/cancel_dispute_example.rb +1 -1
  6. data/examples/merchant/disputes/get_dispute_example.rb +1 -1
  7. data/examples/merchant/disputes/submit_dispute_example.rb +1 -1
  8. data/examples/merchant/disputes/upload_dispute_file_example.rb +1 -1
  9. data/examples/merchant/files/get_file_example.rb +1 -1
  10. data/examples/merchant/hostedcheckouts/create_hosted_checkout_example.rb +1 -1
  11. data/examples/merchant/hostedcheckouts/delete_hosted_checkout_example.rb +1 -1
  12. data/examples/merchant/hostedcheckouts/get_hosted_checkout_example.rb +1 -1
  13. data/examples/merchant/hostedmandatemanagements/create_hosted_mandate_management_example.rb +1 -1
  14. data/examples/merchant/hostedmandatemanagements/get_hosted_mandate_management_example.rb +1 -1
  15. data/examples/merchant/installments/get_installments_info_example.rb +1 -1
  16. data/examples/merchant/mandates/block_mandate_example.rb +1 -1
  17. data/examples/merchant/mandates/create_mandate_example.rb +1 -1
  18. data/examples/merchant/mandates/create_mandate_with_reference_example.rb +1 -1
  19. data/examples/merchant/mandates/get_mandate_example.rb +1 -1
  20. data/examples/merchant/mandates/revoke_mandate_example.rb +1 -1
  21. data/examples/merchant/mandates/unblock_mandate_example.rb +1 -1
  22. data/examples/merchant/payments/approve_payment_example.rb +1 -1
  23. data/examples/merchant/payments/cancel_approval_payment_example.rb +1 -1
  24. data/examples/merchant/payments/cancel_payment_example.rb +1 -1
  25. data/examples/merchant/payments/capture_payment_example.rb +1 -1
  26. data/examples/merchant/payments/complete_payment_example.rb +1 -1
  27. data/examples/merchant/payments/create_payment_dispute_example.rb +1 -1
  28. data/examples/merchant/payments/create_payment_example.rb +1 -1
  29. data/examples/merchant/payments/find_payments_example.rb +1 -1
  30. data/examples/merchant/payments/get_payment_captures_example.rb +1 -1
  31. data/examples/merchant/payments/get_payment_device_fingerprint_details_example.rb +1 -1
  32. data/examples/merchant/payments/get_payment_disputes_example.rb +1 -1
  33. data/examples/merchant/payments/get_payment_example.rb +1 -1
  34. data/examples/merchant/payments/get_refunds_example.rb +1 -1
  35. data/examples/merchant/payments/get_third_party_status_example.rb +1 -1
  36. data/examples/merchant/payments/process_challenged_payment_example.rb +1 -1
  37. data/examples/merchant/payments/refund_payment_example.rb +1 -1
  38. data/examples/merchant/payments/tokenize_payment_example.rb +1 -1
  39. data/examples/merchant/payouts/approve_payout_example.rb +1 -1
  40. data/examples/merchant/payouts/cancel_approval_payout_example.rb +1 -1
  41. data/examples/merchant/payouts/cancel_payout_example.rb +1 -1
  42. data/examples/merchant/payouts/create_payout_example.rb +1 -1
  43. data/examples/merchant/payouts/find_payouts_example.rb +1 -1
  44. data/examples/merchant/payouts/get_payout_example.rb +1 -1
  45. data/examples/merchant/productgroups/get_device_fingerprint_for_groups_example.rb +1 -1
  46. data/examples/merchant/productgroups/get_payment_product_group_example.rb +1 -1
  47. data/examples/merchant/productgroups/get_payment_product_groups_example.rb +1 -1
  48. data/examples/merchant/products/create_payment_product_session_example.rb +1 -1
  49. data/examples/merchant/products/get_customer_details_example.rb +1 -1
  50. data/examples/merchant/products/get_device_fingerprint_example.rb +1 -1
  51. data/examples/merchant/products/get_directory_example.rb +1 -1
  52. data/examples/merchant/products/get_networks_example.rb +1 -1
  53. data/examples/merchant/products/get_payment_product_example.rb +1 -1
  54. data/examples/merchant/products/get_payment_products_example.rb +1 -1
  55. data/examples/merchant/refunds/approve_refund_example.rb +1 -1
  56. data/examples/merchant/refunds/cancel_approval_refund_example.rb +1 -1
  57. data/examples/merchant/refunds/cancel_refund_example.rb +1 -1
  58. data/examples/merchant/refunds/find_refunds_example.rb +1 -1
  59. data/examples/merchant/refunds/get_refund_example.rb +1 -1
  60. data/examples/merchant/riskassessments/risk_assessment_bank_account_example.rb +1 -1
  61. data/examples/merchant/riskassessments/risk_assessment_cards_example.rb +1 -1
  62. data/examples/merchant/services/convert_amount_example.rb +1 -1
  63. data/examples/merchant/services/convert_bank_account_example.rb +1 -1
  64. data/examples/merchant/services/get_privacy_policy_example.rb +1 -1
  65. data/examples/merchant/services/iin_details_example.rb +1 -1
  66. data/examples/merchant/services/test_connection_example.rb +1 -1
  67. data/examples/merchant/sessions/create_session_example.rb +1 -1
  68. data/examples/merchant/tokens/approve_sepa_direct_debit_token_example.rb +1 -1
  69. data/examples/merchant/tokens/create_token_example.rb +1 -1
  70. data/examples/merchant/tokens/delete_token_example.rb +1 -1
  71. data/examples/merchant/tokens/get_token_example.rb +1 -1
  72. data/examples/merchant/tokens/update_token_example.rb +1 -1
  73. data/lib/ingenico/connect/sdk/api_exception.rb +46 -43
  74. data/lib/ingenico/connect/sdk/api_resource.rb +124 -107
  75. data/lib/ingenico/connect/sdk/authenticator.rb +15 -12
  76. data/lib/ingenico/connect/sdk/authorization_exception.rb +13 -8
  77. data/lib/ingenico/connect/sdk/call_context.rb +24 -21
  78. data/lib/ingenico/connect/sdk/client.rb +3 -4
  79. data/lib/ingenico/connect/sdk/communication_exception.rb +14 -11
  80. data/lib/ingenico/connect/sdk/communicator.rb +475 -471
  81. data/lib/ingenico/connect/sdk/communicator_configuration.rb +79 -73
  82. data/lib/ingenico/connect/sdk/connection.rb +38 -33
  83. data/lib/ingenico/connect/sdk/data_object.rb +26 -24
  84. data/lib/ingenico/connect/sdk/declined_payment_exception.rb +38 -35
  85. data/lib/ingenico/connect/sdk/declined_payout_exception.rb +38 -35
  86. data/lib/ingenico/connect/sdk/declined_refund_exception.rb +37 -36
  87. data/lib/ingenico/connect/sdk/declined_transaction_exception.rb +15 -10
  88. data/lib/ingenico/connect/sdk/defaultimpl/authorization_type.rb +16 -13
  89. data/lib/ingenico/connect/sdk/defaultimpl/default_authenticator.rb +98 -94
  90. data/lib/ingenico/connect/sdk/defaultimpl/default_connection.rb +365 -347
  91. data/lib/ingenico/connect/sdk/defaultimpl/default_marshaller.rb +30 -25
  92. data/lib/ingenico/connect/sdk/defaultimpl.rb +1 -6
  93. data/lib/ingenico/connect/sdk/domain/capture/capture.rb +35 -32
  94. data/lib/ingenico/connect/sdk/domain/capture/capture_output.rb +117 -114
  95. data/lib/ingenico/connect/sdk/domain/capture/capture_response.rb +9 -6
  96. data/lib/ingenico/connect/sdk/domain/capture/capture_status_output.rb +36 -33
  97. data/lib/ingenico/connect/sdk/domain/capture/captures_response.rb +24 -21
  98. data/lib/ingenico/connect/sdk/domain/capture.rb +5 -0
  99. data/lib/ingenico/connect/sdk/domain/definitions/abstract_order_status.rb +21 -18
  100. data/lib/ingenico/connect/sdk/domain/definitions/abstract_payment_method_specific_input.rb +21 -18
  101. data/lib/ingenico/connect/sdk/domain/definitions/additional_order_input_airline_data.rb +29 -26
  102. data/lib/ingenico/connect/sdk/domain/definitions/address.rb +63 -60
  103. data/lib/ingenico/connect/sdk/domain/definitions/airline_data.rb +200 -197
  104. data/lib/ingenico/connect/sdk/domain/definitions/airline_flight_leg.rb +159 -156
  105. data/lib/ingenico/connect/sdk/domain/definitions/airline_passenger.rb +45 -42
  106. data/lib/ingenico/connect/sdk/domain/definitions/amount_of_money.rb +27 -24
  107. data/lib/ingenico/connect/sdk/domain/definitions/bank_account.rb +21 -18
  108. data/lib/ingenico/connect/sdk/domain/definitions/bank_account_bban.rb +51 -48
  109. data/lib/ingenico/connect/sdk/domain/definitions/bank_account_iban.rb +21 -18
  110. data/lib/ingenico/connect/sdk/domain/definitions/card.rb +27 -24
  111. data/lib/ingenico/connect/sdk/domain/definitions/card_essentials.rb +33 -30
  112. data/lib/ingenico/connect/sdk/domain/definitions/card_fraud_results.rb +47 -44
  113. data/lib/ingenico/connect/sdk/domain/definitions/card_without_cvv.rb +21 -18
  114. data/lib/ingenico/connect/sdk/domain/definitions/company_information.rb +27 -24
  115. data/lib/ingenico/connect/sdk/domain/definitions/contact_details_base.rb +27 -24
  116. data/lib/ingenico/connect/sdk/domain/definitions/customer_base.rb +36 -33
  117. data/lib/ingenico/connect/sdk/domain/definitions/fraud_fields.rb +171 -168
  118. data/lib/ingenico/connect/sdk/domain/definitions/fraud_fields_shipping_details.rb +40 -37
  119. data/lib/ingenico/connect/sdk/domain/definitions/fraud_results.rb +35 -32
  120. data/lib/ingenico/connect/sdk/domain/definitions/fraud_results_retail_decisions.rb +33 -30
  121. data/lib/ingenico/connect/sdk/domain/definitions/fraugster_results.rb +27 -24
  122. data/lib/ingenico/connect/sdk/domain/definitions/in_auth.rb +52 -49
  123. data/lib/ingenico/connect/sdk/domain/definitions/key_value_pair.rb +27 -24
  124. data/lib/ingenico/connect/sdk/domain/definitions/lodging_charge.rb +33 -30
  125. data/lib/ingenico/connect/sdk/domain/definitions/lodging_data.rb +135 -132
  126. data/lib/ingenico/connect/sdk/domain/definitions/lodging_room.rb +69 -66
  127. data/lib/ingenico/connect/sdk/domain/definitions/microsoft_fraud_results.rb +57 -54
  128. data/lib/ingenico/connect/sdk/domain/definitions/order_status_output.rb +64 -61
  129. data/lib/ingenico/connect/sdk/domain/definitions/payment_product_filter.rb +34 -31
  130. data/lib/ingenico/connect/sdk/domain/definitions/personal_name_base.rb +33 -30
  131. data/lib/ingenico/connect/sdk/domain/definitions/redirect_data_base.rb +27 -24
  132. data/lib/ingenico/connect/sdk/domain/definitions/result_do_risk_assessment.rb +47 -44
  133. data/lib/ingenico/connect/sdk/domain/definitions/retail_decisions_cc_fraud_check_output.rb +33 -30
  134. data/lib/ingenico/connect/sdk/domain/definitions/validation_bank_account_check.rb +33 -30
  135. data/lib/ingenico/connect/sdk/domain/definitions/validation_bank_account_output.rb +48 -45
  136. data/lib/ingenico/connect/sdk/domain/definitions.rb +5 -0
  137. data/lib/ingenico/connect/sdk/domain/dispute/create_dispute_request.rb +46 -43
  138. data/lib/ingenico/connect/sdk/domain/dispute/dispute.rb +47 -44
  139. data/lib/ingenico/connect/sdk/domain/dispute/dispute_creation_detail.rb +33 -30
  140. data/lib/ingenico/connect/sdk/domain/dispute/dispute_output.rb +75 -72
  141. data/lib/ingenico/connect/sdk/domain/dispute/dispute_reference.rb +52 -49
  142. data/lib/ingenico/connect/sdk/domain/dispute/dispute_response.rb +9 -6
  143. data/lib/ingenico/connect/sdk/domain/dispute/dispute_status_output.rb +45 -42
  144. data/lib/ingenico/connect/sdk/domain/dispute/disputes_response.rb +24 -21
  145. data/lib/ingenico/connect/sdk/domain/dispute/upload_dispute_file_response.rb +27 -24
  146. data/lib/ingenico/connect/sdk/domain/dispute.rb +5 -0
  147. data/lib/ingenico/connect/sdk/domain/errors/api_error.rb +57 -54
  148. data/lib/ingenico/connect/sdk/domain/errors/error_response.rb +30 -27
  149. data/lib/ingenico/connect/sdk/domain/errors.rb +5 -0
  150. data/lib/ingenico/connect/sdk/domain/file/hosted_file.rb +45 -42
  151. data/lib/ingenico/connect/sdk/domain/file.rb +5 -0
  152. data/lib/ingenico/connect/sdk/domain/hostedcheckout/create_hosted_checkout_request.rb +92 -89
  153. data/lib/ingenico/connect/sdk/domain/hostedcheckout/create_hosted_checkout_response.rb +48 -45
  154. data/lib/ingenico/connect/sdk/domain/hostedcheckout/created_payment_output.rb +62 -59
  155. data/lib/ingenico/connect/sdk/domain/hostedcheckout/displayed_data.rb +36 -33
  156. data/lib/ingenico/connect/sdk/domain/hostedcheckout/frequency.rb +27 -24
  157. data/lib/ingenico/connect/sdk/domain/hostedcheckout/get_hosted_checkout_response.rb +28 -25
  158. data/lib/ingenico/connect/sdk/domain/hostedcheckout/hosted_checkout_specific_input.rb +77 -74
  159. data/lib/ingenico/connect/sdk/domain/hostedcheckout/mobile_payment_method_specific_input_hosted_checkout.rb +53 -50
  160. data/lib/ingenico/connect/sdk/domain/hostedcheckout/mobile_payment_product302_specific_input_hosted_checkout.rb +21 -18
  161. data/lib/ingenico/connect/sdk/domain/hostedcheckout/mobile_payment_product320_specific_input_hosted_checkout.rb +34 -31
  162. data/lib/ingenico/connect/sdk/domain/hostedcheckout/payment_product_filters_hosted_checkout.rb +35 -32
  163. data/lib/ingenico/connect/sdk/domain/hostedcheckout/recurring_payments_data.rb +29 -26
  164. data/lib/ingenico/connect/sdk/domain/hostedcheckout/trial_information.rb +48 -45
  165. data/lib/ingenico/connect/sdk/domain/hostedcheckout/trial_period.rb +27 -24
  166. data/lib/ingenico/connect/sdk/domain/hostedcheckout.rb +5 -0
  167. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/create_hosted_mandate_management_request.rb +29 -26
  168. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/create_hosted_mandate_management_response.rb +33 -30
  169. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/get_hosted_mandate_management_response.rb +28 -25
  170. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/hosted_mandate_info.rb +52 -49
  171. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement/hosted_mandate_management_specific_input.rb +45 -42
  172. data/lib/ingenico/connect/sdk/domain/hostedmandatemanagement.rb +5 -0
  173. data/lib/ingenico/connect/sdk/domain/installments/get_installment_request.rb +46 -43
  174. data/lib/ingenico/connect/sdk/domain/installments/installment_display_hints.rb +33 -30
  175. data/lib/ingenico/connect/sdk/domain/installments/installment_options.rb +37 -34
  176. data/lib/ingenico/connect/sdk/domain/installments/installment_options_response.rb +24 -21
  177. data/lib/ingenico/connect/sdk/domain/installments.rb +5 -0
  178. data/lib/ingenico/connect/sdk/domain/mandates/create_mandate_base.rb +58 -55
  179. data/lib/ingenico/connect/sdk/domain/mandates/create_mandate_request.rb +9 -6
  180. data/lib/ingenico/connect/sdk/domain/mandates/create_mandate_response.rb +29 -26
  181. data/lib/ingenico/connect/sdk/domain/mandates/create_mandate_with_return_url.rb +21 -18
  182. data/lib/ingenico/connect/sdk/domain/mandates/get_mandate_response.rb +22 -19
  183. data/lib/ingenico/connect/sdk/domain/mandates/mandate_address.rb +52 -49
  184. data/lib/ingenico/connect/sdk/domain/mandates/mandate_contact_details.rb +21 -18
  185. data/lib/ingenico/connect/sdk/domain/mandates/mandate_customer.rb +49 -46
  186. data/lib/ingenico/connect/sdk/domain/mandates/mandate_merchant_action.rb +28 -25
  187. data/lib/ingenico/connect/sdk/domain/mandates/mandate_personal_information.rb +28 -25
  188. data/lib/ingenico/connect/sdk/domain/mandates/mandate_personal_name.rb +27 -24
  189. data/lib/ingenico/connect/sdk/domain/mandates/mandate_redirect_data.rb +9 -6
  190. data/lib/ingenico/connect/sdk/domain/mandates/mandate_response.rb +52 -49
  191. data/lib/ingenico/connect/sdk/domain/mandates.rb +5 -0
  192. data/lib/ingenico/connect/sdk/domain/metadata/shopping_cart_extension.rb +49 -42
  193. data/lib/ingenico/connect/sdk/domain/metadata.rb +1 -0
  194. data/lib/ingenico/connect/sdk/domain/payment/abstract_bank_transfer_payment_method_specific_input.rb +21 -18
  195. data/lib/ingenico/connect/sdk/domain/payment/abstract_card_payment_method_specific_input.rb +129 -119
  196. data/lib/ingenico/connect/sdk/domain/payment/abstract_cash_payment_method_specific_input.rb +9 -6
  197. data/lib/ingenico/connect/sdk/domain/payment/abstract_e_invoice_payment_method_specific_input.rb +21 -18
  198. data/lib/ingenico/connect/sdk/domain/payment/abstract_payment_method_specific_output.rb +21 -18
  199. data/lib/ingenico/connect/sdk/domain/payment/abstract_redirect_payment_method_specific_input.rb +52 -49
  200. data/lib/ingenico/connect/sdk/domain/payment/abstract_redirect_payment_product4101_specific_input.rb +9 -6
  201. data/lib/ingenico/connect/sdk/domain/payment/abstract_redirect_payment_product840_specific_input.rb +21 -18
  202. data/lib/ingenico/connect/sdk/domain/payment/abstract_sepa_direct_debit_payment_method_specific_input.rb +9 -6
  203. data/lib/ingenico/connect/sdk/domain/payment/abstract_sepa_direct_debit_payment_product771_specific_input.rb +23 -20
  204. data/lib/ingenico/connect/sdk/domain/payment/abstract_three_d_secure.rb +72 -69
  205. data/lib/ingenico/connect/sdk/domain/payment/account_funding_recipient.rb +53 -50
  206. data/lib/ingenico/connect/sdk/domain/payment/additional_order_input.rb +82 -79
  207. data/lib/ingenico/connect/sdk/domain/payment/address_personal.rb +22 -19
  208. data/lib/ingenico/connect/sdk/domain/payment/afr_name.rb +27 -24
  209. data/lib/ingenico/connect/sdk/domain/payment/amount_breakdown.rb +27 -24
  210. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_card_payment_method_specific_output.rb +21 -18
  211. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_direct_debit_payment_method_specific_input.rb +9 -6
  212. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_mobile_payment_method_specific_output.rb +21 -18
  213. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_non_sepa_direct_debit_payment_method_specific_input.rb +9 -6
  214. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_payment_method_specific_input.rb +27 -24
  215. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_request.rb +48 -45
  216. data/lib/ingenico/connect/sdk/domain/payment/approve_payment_sepa_direct_debit_payment_method_specific_input.rb +9 -6
  217. data/lib/ingenico/connect/sdk/domain/payment/bank_transfer_payment_method_specific_input.rb +9 -6
  218. data/lib/ingenico/connect/sdk/domain/payment/bank_transfer_payment_method_specific_input_base.rb +9 -6
  219. data/lib/ingenico/connect/sdk/domain/payment/bank_transfer_payment_method_specific_output.rb +22 -19
  220. data/lib/ingenico/connect/sdk/domain/payment/browser_data.rb +57 -54
  221. data/lib/ingenico/connect/sdk/domain/payment/cancel_approval_payment_response.rb +22 -19
  222. data/lib/ingenico/connect/sdk/domain/payment/cancel_payment_card_payment_method_specific_output.rb +21 -18
  223. data/lib/ingenico/connect/sdk/domain/payment/cancel_payment_mobile_payment_method_specific_output.rb +21 -18
  224. data/lib/ingenico/connect/sdk/domain/payment/cancel_payment_response.rb +36 -33
  225. data/lib/ingenico/connect/sdk/domain/payment/capture_payment_request.rb +27 -24
  226. data/lib/ingenico/connect/sdk/domain/payment/card_payment_method_specific_input.rb +65 -62
  227. data/lib/ingenico/connect/sdk/domain/payment/card_payment_method_specific_input_base.rb +22 -19
  228. data/lib/ingenico/connect/sdk/domain/payment/card_payment_method_specific_output.rb +60 -57
  229. data/lib/ingenico/connect/sdk/domain/payment/card_recurrence_details.rb +33 -30
  230. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_method_specific_input.rb +66 -63
  231. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_method_specific_input_base.rb +9 -6
  232. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_method_specific_output.rb +22 -19
  233. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1503_specific_input.rb +24 -21
  234. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1504_specific_input.rb +9 -6
  235. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1521_specific_input.rb +9 -6
  236. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1522_specific_input.rb +9 -6
  237. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1523_specific_input.rb +9 -6
  238. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1524_specific_input.rb +9 -6
  239. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product1526_specific_input.rb +9 -6
  240. data/lib/ingenico/connect/sdk/domain/payment/cash_payment_product_with_redirect_specific_input_base.rb +21 -18
  241. data/lib/ingenico/connect/sdk/domain/payment/complete_payment_card_payment_method_specific_input.rb +22 -19
  242. data/lib/ingenico/connect/sdk/domain/payment/complete_payment_request.rb +36 -33
  243. data/lib/ingenico/connect/sdk/domain/payment/complete_payment_response.rb +9 -6
  244. data/lib/ingenico/connect/sdk/domain/payment/contact_details.rb +45 -42
  245. data/lib/ingenico/connect/sdk/domain/payment/create_payment_request.rb +120 -117
  246. data/lib/ingenico/connect/sdk/domain/payment/create_payment_response.rb +9 -6
  247. data/lib/ingenico/connect/sdk/domain/payment/create_payment_result.rb +36 -33
  248. data/lib/ingenico/connect/sdk/domain/payment/customer.rb +89 -86
  249. data/lib/ingenico/connect/sdk/domain/payment/customer_account.rb +104 -101
  250. data/lib/ingenico/connect/sdk/domain/payment/customer_account_authentication.rb +33 -30
  251. data/lib/ingenico/connect/sdk/domain/payment/customer_approve_payment.rb +21 -18
  252. data/lib/ingenico/connect/sdk/domain/payment/customer_device.rb +64 -61
  253. data/lib/ingenico/connect/sdk/domain/payment/customer_payment_activity.rb +33 -30
  254. data/lib/ingenico/connect/sdk/domain/payment/decrypted_payment_data.rb +65 -62
  255. data/lib/ingenico/connect/sdk/domain/payment/device_fingerprint_details.rb +27 -24
  256. data/lib/ingenico/connect/sdk/domain/payment/device_render_options.rb +38 -35
  257. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_method_specific_input.rb +28 -25
  258. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_method_specific_input_base.rb +9 -6
  259. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_method_specific_output.rb +29 -26
  260. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_product9000_specific_input.rb +28 -25
  261. data/lib/ingenico/connect/sdk/domain/payment/e_invoice_payment_product9000_specific_output.rb +21 -18
  262. data/lib/ingenico/connect/sdk/domain/payment/exemption_output.rb +33 -30
  263. data/lib/ingenico/connect/sdk/domain/payment/external_cardholder_authentication_data.rb +83 -80
  264. data/lib/ingenico/connect/sdk/domain/payment/find_payments_response.rb +47 -44
  265. data/lib/ingenico/connect/sdk/domain/payment/g_pay_three_d_secure.rb +46 -43
  266. data/lib/ingenico/connect/sdk/domain/payment/gift_card_purchase.rb +28 -25
  267. data/lib/ingenico/connect/sdk/domain/payment/hosted_checkout_specific_output.rb +27 -24
  268. data/lib/ingenico/connect/sdk/domain/payment/installments.rb +53 -50
  269. data/lib/ingenico/connect/sdk/domain/payment/invoice_payment_method_specific_input.rb +21 -18
  270. data/lib/ingenico/connect/sdk/domain/payment/invoice_payment_method_specific_output.rb +22 -19
  271. data/lib/ingenico/connect/sdk/domain/payment/level3_summary_data.rb +40 -37
  272. data/lib/ingenico/connect/sdk/domain/payment/line_item.rb +45 -42
  273. data/lib/ingenico/connect/sdk/domain/payment/line_item_invoice_data.rb +52 -49
  274. data/lib/ingenico/connect/sdk/domain/payment/line_item_level3_interchange_information.rb +63 -60
  275. data/lib/ingenico/connect/sdk/domain/payment/loan_recipient.rb +56 -53
  276. data/lib/ingenico/connect/sdk/domain/payment/merchant.rb +46 -43
  277. data/lib/ingenico/connect/sdk/domain/payment/merchant_action.rb +67 -64
  278. data/lib/ingenico/connect/sdk/domain/payment/mobile_payment_data.rb +27 -24
  279. data/lib/ingenico/connect/sdk/domain/payment/mobile_payment_method_specific_input.rb +59 -56
  280. data/lib/ingenico/connect/sdk/domain/payment/mobile_payment_method_specific_output.rb +48 -45
  281. data/lib/ingenico/connect/sdk/domain/payment/mobile_payment_product320_specific_input.rb +28 -25
  282. data/lib/ingenico/connect/sdk/domain/payment/mobile_three_d_secure_challenge_parameters.rb +45 -42
  283. data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_method_specific_input.rb +71 -68
  284. data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_method_specific_output.rb +22 -19
  285. data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_product705_specific_input.rb +34 -31
  286. data/lib/ingenico/connect/sdk/domain/payment/non_sepa_direct_debit_payment_product730_specific_input.rb +22 -19
  287. data/lib/ingenico/connect/sdk/domain/payment/order.rb +77 -74
  288. data/lib/ingenico/connect/sdk/domain/payment/order_approve_payment.rb +36 -33
  289. data/lib/ingenico/connect/sdk/domain/payment/order_invoice_data.rb +47 -44
  290. data/lib/ingenico/connect/sdk/domain/payment/order_line_details.rb +101 -98
  291. data/lib/ingenico/connect/sdk/domain/payment/order_output.rb +29 -26
  292. data/lib/ingenico/connect/sdk/domain/payment/order_references.rb +52 -49
  293. data/lib/ingenico/connect/sdk/domain/payment/order_references_approve_payment.rb +21 -18
  294. data/lib/ingenico/connect/sdk/domain/payment/order_type_information.rb +45 -42
  295. data/lib/ingenico/connect/sdk/domain/payment/payment.rb +48 -45
  296. data/lib/ingenico/connect/sdk/domain/payment/payment_account_on_file.rb +27 -24
  297. data/lib/ingenico/connect/sdk/domain/payment/payment_approval_response.rb +45 -42
  298. data/lib/ingenico/connect/sdk/domain/payment/payment_creation_output.rb +45 -42
  299. data/lib/ingenico/connect/sdk/domain/payment/payment_creation_references.rb +27 -24
  300. data/lib/ingenico/connect/sdk/domain/payment/payment_error_response.rb +37 -34
  301. data/lib/ingenico/connect/sdk/domain/payment/payment_output.rb +117 -114
  302. data/lib/ingenico/connect/sdk/domain/payment/payment_product3201_specific_output.rb +22 -19
  303. data/lib/ingenico/connect/sdk/domain/payment/payment_product771_specific_output.rb +21 -18
  304. data/lib/ingenico/connect/sdk/domain/payment/payment_product806_specific_output.rb +29 -26
  305. data/lib/ingenico/connect/sdk/domain/payment/payment_product836_specific_output.rb +21 -18
  306. data/lib/ingenico/connect/sdk/domain/payment/payment_product840_customer_account.rb +75 -72
  307. data/lib/ingenico/connect/sdk/domain/payment/payment_product840_specific_output.rb +49 -46
  308. data/lib/ingenico/connect/sdk/domain/payment/payment_product863_third_party_data.rb +57 -54
  309. data/lib/ingenico/connect/sdk/domain/payment/payment_references.rb +57 -54
  310. data/lib/ingenico/connect/sdk/domain/payment/payment_response.rb +9 -6
  311. data/lib/ingenico/connect/sdk/domain/payment/payment_status_output.rb +33 -30
  312. data/lib/ingenico/connect/sdk/domain/payment/personal_identification.rb +33 -30
  313. data/lib/ingenico/connect/sdk/domain/payment/personal_information.rb +47 -44
  314. data/lib/ingenico/connect/sdk/domain/payment/personal_name.rb +21 -18
  315. data/lib/ingenico/connect/sdk/domain/payment/protection_eligibility.rb +27 -24
  316. data/lib/ingenico/connect/sdk/domain/payment/redirect_data.rb +9 -6
  317. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_method_specific_input.rb +92 -89
  318. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_method_specific_input_base.rb +29 -26
  319. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_method_specific_output.rb +76 -73
  320. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product4101_specific_input.rb +33 -30
  321. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product4101_specific_input_base.rb +21 -18
  322. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product809_specific_input.rb +29 -26
  323. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product816_specific_input.rb +22 -19
  324. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product840_specific_input.rb +29 -26
  325. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product840_specific_input_base.rb +9 -6
  326. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product861_specific_input.rb +21 -18
  327. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product863_specific_input.rb +27 -24
  328. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product869_specific_input.rb +33 -30
  329. data/lib/ingenico/connect/sdk/domain/payment/redirect_payment_product882_specific_input.rb +21 -18
  330. data/lib/ingenico/connect/sdk/domain/payment/redirection_data.rb +27 -24
  331. data/lib/ingenico/connect/sdk/domain/payment/refund_bank_method_specific_output.rb +9 -6
  332. data/lib/ingenico/connect/sdk/domain/payment/refund_card_method_specific_output.rb +28 -25
  333. data/lib/ingenico/connect/sdk/domain/payment/refund_cash_method_specific_output.rb +9 -6
  334. data/lib/ingenico/connect/sdk/domain/payment/refund_e_invoice_method_specific_output.rb +9 -6
  335. data/lib/ingenico/connect/sdk/domain/payment/refund_e_wallet_method_specific_output.rb +22 -19
  336. data/lib/ingenico/connect/sdk/domain/payment/refund_method_specific_output.rb +33 -30
  337. data/lib/ingenico/connect/sdk/domain/payment/refund_mobile_method_specific_output.rb +21 -18
  338. data/lib/ingenico/connect/sdk/domain/payment/refund_output.rb +69 -66
  339. data/lib/ingenico/connect/sdk/domain/payment/refund_payment_product840_customer_account.rb +33 -30
  340. data/lib/ingenico/connect/sdk/domain/payment/refund_payment_product840_specific_output.rb +22 -19
  341. data/lib/ingenico/connect/sdk/domain/payment/scheme_token_data.rb +52 -49
  342. data/lib/ingenico/connect/sdk/domain/payment/sdk_data_input.rb +58 -55
  343. data/lib/ingenico/connect/sdk/domain/payment/sdk_data_output.rb +21 -18
  344. data/lib/ingenico/connect/sdk/domain/payment/seller.rb +102 -99
  345. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_method_specific_input.rb +64 -61
  346. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_method_specific_input_base.rb +22 -19
  347. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_method_specific_output.rb +35 -32
  348. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_product771_specific_input.rb +28 -25
  349. data/lib/ingenico/connect/sdk/domain/payment/sepa_direct_debit_payment_product771_specific_input_base.rb +28 -25
  350. data/lib/ingenico/connect/sdk/domain/payment/shipping.rb +64 -61
  351. data/lib/ingenico/connect/sdk/domain/payment/shopping_cart.rb +59 -56
  352. data/lib/ingenico/connect/sdk/domain/payment/third_party_data.rb +22 -19
  353. data/lib/ingenico/connect/sdk/domain/payment/third_party_status_response.rb +21 -18
  354. data/lib/ingenico/connect/sdk/domain/payment/three_d_secure.rb +29 -26
  355. data/lib/ingenico/connect/sdk/domain/payment/three_d_secure_base.rb +9 -6
  356. data/lib/ingenico/connect/sdk/domain/payment/three_d_secure_data.rb +33 -30
  357. data/lib/ingenico/connect/sdk/domain/payment/three_d_secure_results.rb +112 -109
  358. data/lib/ingenico/connect/sdk/domain/payment/tokenize_payment_request.rb +21 -18
  359. data/lib/ingenico/connect/sdk/domain/payment/trustly_bank_account.rb +45 -42
  360. data/lib/ingenico/connect/sdk/domain/payment.rb +5 -0
  361. data/lib/ingenico/connect/sdk/domain/payout/abstract_payout_method_specific_input.rb +9 -6
  362. data/lib/ingenico/connect/sdk/domain/payout/approve_payout_request.rb +21 -18
  363. data/lib/ingenico/connect/sdk/domain/payout/bank_transfer_payout_method_specific_input.rb +56 -53
  364. data/lib/ingenico/connect/sdk/domain/payout/card_payout_method_specific_input.rb +47 -44
  365. data/lib/ingenico/connect/sdk/domain/payout/create_payout_request.rb +126 -123
  366. data/lib/ingenico/connect/sdk/domain/payout/find_payouts_response.rb +47 -44
  367. data/lib/ingenico/connect/sdk/domain/payout/payout_customer.rb +49 -46
  368. data/lib/ingenico/connect/sdk/domain/payout/payout_details.rb +36 -33
  369. data/lib/ingenico/connect/sdk/domain/payout/payout_error_response.rb +37 -34
  370. data/lib/ingenico/connect/sdk/domain/payout/payout_merchant.rb +21 -18
  371. data/lib/ingenico/connect/sdk/domain/payout/payout_recipient.rb +33 -30
  372. data/lib/ingenico/connect/sdk/domain/payout/payout_references.rb +33 -30
  373. data/lib/ingenico/connect/sdk/domain/payout/payout_response.rb +9 -6
  374. data/lib/ingenico/connect/sdk/domain/payout/payout_result.rb +35 -32
  375. data/lib/ingenico/connect/sdk/domain/payout.rb +5 -0
  376. data/lib/ingenico/connect/sdk/domain/product/abstract_indicator.rb +27 -24
  377. data/lib/ingenico/connect/sdk/domain/product/account_on_file.rb +48 -45
  378. data/lib/ingenico/connect/sdk/domain/product/account_on_file_attribute.rb +27 -24
  379. data/lib/ingenico/connect/sdk/domain/product/account_on_file_display_hints.rb +30 -27
  380. data/lib/ingenico/connect/sdk/domain/product/authentication_indicator.rb +9 -6
  381. data/lib/ingenico/connect/sdk/domain/product/boleto_bancario_requiredness_validator.rb +21 -18
  382. data/lib/ingenico/connect/sdk/domain/product/create_payment_product_session_request.rb +22 -19
  383. data/lib/ingenico/connect/sdk/domain/product/create_payment_product_session_response.rb +22 -19
  384. data/lib/ingenico/connect/sdk/domain/product/device_fingerprint_request.rb +21 -18
  385. data/lib/ingenico/connect/sdk/domain/product/device_fingerprint_response.rb +27 -24
  386. data/lib/ingenico/connect/sdk/domain/product/directory.rb +24 -21
  387. data/lib/ingenico/connect/sdk/domain/product/directory_entry.rb +47 -44
  388. data/lib/ingenico/connect/sdk/domain/product/empty_validator.rb +9 -6
  389. data/lib/ingenico/connect/sdk/domain/product/fixed_list_validator.rb +24 -21
  390. data/lib/ingenico/connect/sdk/domain/product/get_customer_details_request.rb +30 -27
  391. data/lib/ingenico/connect/sdk/domain/product/get_customer_details_response.rb +75 -72
  392. data/lib/ingenico/connect/sdk/domain/product/label_template_element.rb +27 -24
  393. data/lib/ingenico/connect/sdk/domain/product/length_validator.rb +27 -24
  394. data/lib/ingenico/connect/sdk/domain/product/mobile_payment_product_session302_specific_input.rb +33 -30
  395. data/lib/ingenico/connect/sdk/domain/product/mobile_payment_product_session302_specific_output.rb +21 -18
  396. data/lib/ingenico/connect/sdk/domain/product/payment_product.rb +203 -200
  397. data/lib/ingenico/connect/sdk/domain/product/payment_product302_specific_data.rb +24 -21
  398. data/lib/ingenico/connect/sdk/domain/product/payment_product320_specific_data.rb +30 -27
  399. data/lib/ingenico/connect/sdk/domain/product/payment_product863_specific_data.rb +24 -21
  400. data/lib/ingenico/connect/sdk/domain/product/payment_product_display_hints.rb +33 -30
  401. data/lib/ingenico/connect/sdk/domain/product/payment_product_field.rb +47 -44
  402. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_data_restrictions.rb +28 -25
  403. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_display_element.rb +45 -42
  404. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_display_hints.rb +77 -74
  405. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_form_element.rb +30 -27
  406. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_tooltip.rb +27 -24
  407. data/lib/ingenico/connect/sdk/domain/product/payment_product_field_validators.rb +92 -89
  408. data/lib/ingenico/connect/sdk/domain/product/payment_product_group.rb +59 -56
  409. data/lib/ingenico/connect/sdk/domain/product/payment_product_group_response.rb +9 -6
  410. data/lib/ingenico/connect/sdk/domain/product/payment_product_groups.rb +24 -21
  411. data/lib/ingenico/connect/sdk/domain/product/payment_product_networks_response.rb +24 -21
  412. data/lib/ingenico/connect/sdk/domain/product/payment_product_response.rb +9 -6
  413. data/lib/ingenico/connect/sdk/domain/product/payment_products.rb +24 -21
  414. data/lib/ingenico/connect/sdk/domain/product/range_validator.rb +27 -24
  415. data/lib/ingenico/connect/sdk/domain/product/regular_expression_validator.rb +21 -18
  416. data/lib/ingenico/connect/sdk/domain/product/value_mapping_element.rb +38 -35
  417. data/lib/ingenico/connect/sdk/domain/product.rb +5 -0
  418. data/lib/ingenico/connect/sdk/domain/refund/approve_refund_request.rb +21 -18
  419. data/lib/ingenico/connect/sdk/domain/refund/bank_account_bban_refund.rb +33 -30
  420. data/lib/ingenico/connect/sdk/domain/refund/bank_refund_method_specific_input.rb +35 -32
  421. data/lib/ingenico/connect/sdk/domain/refund/find_refunds_response.rb +47 -44
  422. data/lib/ingenico/connect/sdk/domain/refund/refund_customer.rb +48 -45
  423. data/lib/ingenico/connect/sdk/domain/refund/refund_error_response.rb +37 -34
  424. data/lib/ingenico/connect/sdk/domain/refund/refund_references.rb +21 -18
  425. data/lib/ingenico/connect/sdk/domain/refund/refund_request.rb +49 -46
  426. data/lib/ingenico/connect/sdk/domain/refund/refund_response.rb +9 -6
  427. data/lib/ingenico/connect/sdk/domain/refund/refund_result.rb +35 -32
  428. data/lib/ingenico/connect/sdk/domain/refund/refunds_response.rb +24 -21
  429. data/lib/ingenico/connect/sdk/domain/refund.rb +5 -0
  430. data/lib/ingenico/connect/sdk/domain/riskassessments/contact_details_risk_assessment.rb +21 -18
  431. data/lib/ingenico/connect/sdk/domain/riskassessments/customer_account_risk_assessment.rb +27 -24
  432. data/lib/ingenico/connect/sdk/domain/riskassessments/customer_device_risk_assessment.rb +27 -24
  433. data/lib/ingenico/connect/sdk/domain/riskassessments/customer_risk_assessment.rb +77 -74
  434. data/lib/ingenico/connect/sdk/domain/riskassessments/merchant_risk_assessment.rb +21 -18
  435. data/lib/ingenico/connect/sdk/domain/riskassessments/order_risk_assessment.rb +43 -40
  436. data/lib/ingenico/connect/sdk/domain/riskassessments/personal_information_risk_assessment.rb +22 -19
  437. data/lib/ingenico/connect/sdk/domain/riskassessments/personal_name_risk_assessment.rb +9 -6
  438. data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment.rb +48 -45
  439. data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment_bank_account.rb +29 -26
  440. data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment_card.rb +22 -19
  441. data/lib/ingenico/connect/sdk/domain/riskassessments/risk_assessment_response.rb +24 -21
  442. data/lib/ingenico/connect/sdk/domain/riskassessments/shipping_risk_assessment.rb +34 -31
  443. data/lib/ingenico/connect/sdk/domain/riskassessments.rb +5 -0
  444. data/lib/ingenico/connect/sdk/domain/services/bank_data.rb +45 -42
  445. data/lib/ingenico/connect/sdk/domain/services/bank_details.rb +29 -26
  446. data/lib/ingenico/connect/sdk/domain/services/bank_details_request.rb +9 -6
  447. data/lib/ingenico/connect/sdk/domain/services/bank_details_response.rb +43 -40
  448. data/lib/ingenico/connect/sdk/domain/services/convert_amount.rb +21 -18
  449. data/lib/ingenico/connect/sdk/domain/services/get_iin_details_request.rb +28 -25
  450. data/lib/ingenico/connect/sdk/domain/services/get_iin_details_response.rb +47 -44
  451. data/lib/ingenico/connect/sdk/domain/services/get_privacy_policy_response.rb +21 -18
  452. data/lib/ingenico/connect/sdk/domain/services/iin_detail.rb +27 -24
  453. data/lib/ingenico/connect/sdk/domain/services/payment_context.rb +46 -43
  454. data/lib/ingenico/connect/sdk/domain/services/swift.rb +75 -72
  455. data/lib/ingenico/connect/sdk/domain/services/test_connection.rb +21 -18
  456. data/lib/ingenico/connect/sdk/domain/services.rb +5 -0
  457. data/lib/ingenico/connect/sdk/domain/sessions/payment_product_filters_client_session.rb +29 -26
  458. data/lib/ingenico/connect/sdk/domain/sessions/session_request.rb +31 -28
  459. data/lib/ingenico/connect/sdk/domain/sessions/session_response.rb +54 -51
  460. data/lib/ingenico/connect/sdk/domain/sessions.rb +5 -0
  461. data/lib/ingenico/connect/sdk/domain/token/abstract_token.rb +21 -18
  462. data/lib/ingenico/connect/sdk/domain/token/approve_token_request.rb +9 -6
  463. data/lib/ingenico/connect/sdk/domain/token/contact_details_token.rb +9 -6
  464. data/lib/ingenico/connect/sdk/domain/token/create_token_request.rb +55 -52
  465. data/lib/ingenico/connect/sdk/domain/token/create_token_response.rb +33 -30
  466. data/lib/ingenico/connect/sdk/domain/token/creditor.rb +81 -78
  467. data/lib/ingenico/connect/sdk/domain/token/customer_token.rb +29 -26
  468. data/lib/ingenico/connect/sdk/domain/token/customer_token_with_contact_details.rb +22 -19
  469. data/lib/ingenico/connect/sdk/domain/token/debtor.rb +81 -78
  470. data/lib/ingenico/connect/sdk/domain/token/mandate_approval.rb +33 -30
  471. data/lib/ingenico/connect/sdk/domain/token/mandate_non_sepa_direct_debit.rb +29 -26
  472. data/lib/ingenico/connect/sdk/domain/token/mandate_sepa_direct_debit.rb +22 -19
  473. data/lib/ingenico/connect/sdk/domain/token/mandate_sepa_direct_debit_with_mandate_id.rb +21 -18
  474. data/lib/ingenico/connect/sdk/domain/token/mandate_sepa_direct_debit_without_creditor.rb +54 -51
  475. data/lib/ingenico/connect/sdk/domain/token/personal_information_token.rb +22 -19
  476. data/lib/ingenico/connect/sdk/domain/token/personal_name_token.rb +9 -6
  477. data/lib/ingenico/connect/sdk/domain/token/token_card.rb +29 -26
  478. data/lib/ingenico/connect/sdk/domain/token/token_card_data.rb +34 -31
  479. data/lib/ingenico/connect/sdk/domain/token/token_e_wallet.rb +29 -26
  480. data/lib/ingenico/connect/sdk/domain/token/token_e_wallet_data.rb +21 -18
  481. data/lib/ingenico/connect/sdk/domain/token/token_non_sepa_direct_debit.rb +29 -26
  482. data/lib/ingenico/connect/sdk/domain/token/token_non_sepa_direct_debit_payment_product705_specific_data.rb +28 -25
  483. data/lib/ingenico/connect/sdk/domain/token/token_non_sepa_direct_debit_payment_product730_specific_data.rb +22 -19
  484. data/lib/ingenico/connect/sdk/domain/token/token_response.rb +61 -58
  485. data/lib/ingenico/connect/sdk/domain/token/token_sepa_direct_debit.rb +29 -26
  486. data/lib/ingenico/connect/sdk/domain/token/token_sepa_direct_debit_without_creditor.rb +29 -26
  487. data/lib/ingenico/connect/sdk/domain/token/update_token_request.rb +49 -46
  488. data/lib/ingenico/connect/sdk/domain/token.rb +5 -0
  489. data/lib/ingenico/connect/sdk/domain.rb +1 -0
  490. data/lib/ingenico/connect/sdk/endpoint_configuration.rb +120 -116
  491. data/lib/ingenico/connect/sdk/exceptions.rb +1 -8
  492. data/lib/ingenico/connect/sdk/factory.rb +193 -182
  493. data/lib/ingenico/connect/sdk/global_collect_exception.rb +15 -10
  494. data/lib/ingenico/connect/sdk/idempotence_exception.rb +23 -19
  495. data/lib/ingenico/connect/sdk/logging/communicator_logger.rb +20 -16
  496. data/lib/ingenico/connect/sdk/logging/log_message_builder.rb +73 -67
  497. data/lib/ingenico/connect/sdk/logging/logging_capable.rb +12 -12
  498. data/lib/ingenico/connect/sdk/logging/logging_util.rb +304 -297
  499. data/lib/ingenico/connect/sdk/logging/obfuscation/body_obfuscator.rb +83 -79
  500. data/lib/ingenico/connect/sdk/logging/obfuscation/header_obfuscator.rb +42 -38
  501. data/lib/ingenico/connect/sdk/logging/obfuscation/obfuscation_capable.rb +17 -12
  502. data/lib/ingenico/connect/sdk/logging/obfuscation/obfuscation_rule.rb +40 -36
  503. data/lib/ingenico/connect/sdk/logging/obfuscation.rb +1 -0
  504. data/lib/ingenico/connect/sdk/logging/request_log_message_builder.rb +42 -34
  505. data/lib/ingenico/connect/sdk/logging/response_log_message_builder.rb +35 -29
  506. data/lib/ingenico/connect/sdk/logging/ruby_communicator_logger.rb +51 -47
  507. data/lib/ingenico/connect/sdk/logging/stdout_communicator_logger.rb +26 -22
  508. data/lib/ingenico/connect/sdk/logging.rb +1 -14
  509. data/lib/ingenico/connect/sdk/marshaller.rb +22 -19
  510. data/lib/ingenico/connect/sdk/marshaller_syntax_exception.rb +7 -4
  511. data/lib/ingenico/connect/sdk/merchant/captures/captures_client.rb +75 -72
  512. data/lib/ingenico/connect/sdk/merchant/captures.rb +5 -0
  513. data/lib/ingenico/connect/sdk/merchant/disputes/disputes_client.rb +134 -131
  514. data/lib/ingenico/connect/sdk/merchant/disputes/upload_file_request.rb +17 -14
  515. data/lib/ingenico/connect/sdk/merchant/disputes.rb +5 -0
  516. data/lib/ingenico/connect/sdk/merchant/files/files_client.rb +43 -40
  517. data/lib/ingenico/connect/sdk/merchant/files.rb +5 -0
  518. data/lib/ingenico/connect/sdk/merchant/hostedcheckouts/hostedcheckouts_client.rb +98 -95
  519. data/lib/ingenico/connect/sdk/merchant/hostedcheckouts.rb +5 -0
  520. data/lib/ingenico/connect/sdk/merchant/hostedmandatemanagements/hostedmandatemanagements_client.rb +70 -67
  521. data/lib/ingenico/connect/sdk/merchant/hostedmandatemanagements.rb +5 -0
  522. data/lib/ingenico/connect/sdk/merchant/installments/installments_client.rb +41 -38
  523. data/lib/ingenico/connect/sdk/merchant/installments.rb +5 -0
  524. data/lib/ingenico/connect/sdk/merchant/mandates/mandates_client.rb +191 -188
  525. data/lib/ingenico/connect/sdk/merchant/mandates.rb +5 -0
  526. data/lib/ingenico/connect/sdk/merchant/merchant_client.rb +110 -107
  527. data/lib/ingenico/connect/sdk/merchant/payments/find_payments_params.rb +35 -32
  528. data/lib/ingenico/connect/sdk/merchant/payments/payments_client.rb +519 -516
  529. data/lib/ingenico/connect/sdk/merchant/payments.rb +5 -0
  530. data/lib/ingenico/connect/sdk/merchant/payouts/find_payouts_params.rb +26 -23
  531. data/lib/ingenico/connect/sdk/merchant/payouts/payouts_client.rb +186 -183
  532. data/lib/ingenico/connect/sdk/merchant/payouts.rb +5 -0
  533. data/lib/ingenico/connect/sdk/merchant/productgroups/find_productgroups_params.rb +49 -46
  534. data/lib/ingenico/connect/sdk/merchant/productgroups/get_productgroup_params.rb +49 -46
  535. data/lib/ingenico/connect/sdk/merchant/productgroups/productgroups_client.rb +101 -98
  536. data/lib/ingenico/connect/sdk/merchant/productgroups.rb +5 -0
  537. data/lib/ingenico/connect/sdk/merchant/products/directory_params.rb +20 -17
  538. data/lib/ingenico/connect/sdk/merchant/products/find_products_params.rb +49 -46
  539. data/lib/ingenico/connect/sdk/merchant/products/get_product_params.rb +44 -41
  540. data/lib/ingenico/connect/sdk/merchant/products/networks_params.rb +26 -23
  541. data/lib/ingenico/connect/sdk/merchant/products/products_client.rb +223 -220
  542. data/lib/ingenico/connect/sdk/merchant/products.rb +5 -0
  543. data/lib/ingenico/connect/sdk/merchant/refunds/find_refunds_params.rb +35 -32
  544. data/lib/ingenico/connect/sdk/merchant/refunds/refunds_client.rb +157 -154
  545. data/lib/ingenico/connect/sdk/merchant/refunds.rb +5 -0
  546. data/lib/ingenico/connect/sdk/merchant/riskassessments/riskassessments_client.rb +68 -65
  547. data/lib/ingenico/connect/sdk/merchant/riskassessments.rb +5 -0
  548. data/lib/ingenico/connect/sdk/merchant/services/convert_amount_params.rb +23 -20
  549. data/lib/ingenico/connect/sdk/merchant/services/privacypolicy_params.rb +20 -17
  550. data/lib/ingenico/connect/sdk/merchant/services/services_client.rb +145 -142
  551. data/lib/ingenico/connect/sdk/merchant/services.rb +5 -0
  552. data/lib/ingenico/connect/sdk/merchant/sessions/sessions_client.rb +41 -38
  553. data/lib/ingenico/connect/sdk/merchant/sessions.rb +5 -0
  554. data/lib/ingenico/connect/sdk/merchant/tokens/delete_token_params.rb +17 -14
  555. data/lib/ingenico/connect/sdk/merchant/tokens/tokens_client.rb +159 -156
  556. data/lib/ingenico/connect/sdk/merchant/tokens.rb +5 -0
  557. data/lib/ingenico/connect/sdk/merchant.rb +5 -0
  558. data/lib/ingenico/connect/sdk/meta_data_provider.rb +151 -146
  559. data/lib/ingenico/connect/sdk/multipart_form_data_object.rb +36 -33
  560. data/lib/ingenico/connect/sdk/multipart_form_data_request.rb +10 -6
  561. data/lib/ingenico/connect/sdk/not_found_exception.rb +14 -11
  562. data/lib/ingenico/connect/sdk/param_request.rb +11 -8
  563. data/lib/ingenico/connect/sdk/pooled_connection.rb +20 -15
  564. data/lib/ingenico/connect/sdk/proxy_configuration.rb +63 -61
  565. data/lib/ingenico/connect/sdk/reference_exception.rb +14 -9
  566. data/lib/ingenico/connect/sdk/request_header.rb +52 -44
  567. data/lib/ingenico/connect/sdk/request_param.rb +22 -19
  568. data/lib/ingenico/connect/sdk/response_exception.rb +46 -41
  569. data/lib/ingenico/connect/sdk/response_header.rb +63 -55
  570. data/lib/ingenico/connect/sdk/session.rb +34 -31
  571. data/lib/ingenico/connect/sdk/uploadable_file.rb +23 -20
  572. data/lib/ingenico/connect/sdk/validation_exception.rb +14 -9
  573. data/lib/ingenico/connect/sdk/webhooks/api_version_mismatch_exception.rb +19 -15
  574. data/lib/ingenico/connect/sdk/webhooks/in_memory_secret_key_store.rb +49 -44
  575. data/lib/ingenico/connect/sdk/webhooks/secret_key_not_available_exception.rb +18 -12
  576. data/lib/ingenico/connect/sdk/webhooks/secret_key_store.rb +15 -11
  577. data/lib/ingenico/connect/sdk/webhooks/signature_validation_exception.rb +17 -14
  578. data/lib/ingenico/connect/sdk/webhooks/signature_validator.rb +83 -0
  579. data/lib/ingenico/connect/sdk/webhooks/webhooks.rb +20 -15
  580. data/lib/ingenico/connect/sdk/webhooks/webhooks_event.rb +60 -50
  581. data/lib/ingenico/connect/sdk/webhooks/webhooks_helper.rb +43 -94
  582. data/lib/ingenico/connect/sdk/webhooks/webhooks_helper_builder.rb +22 -17
  583. data/lib/ingenico/connect/sdk/webhooks.rb +1 -11
  584. data/lib/ingenico/connect/sdk.rb +1 -30
  585. data/spec/integration/connection_pooling_spec.rb +1 -1
  586. data/spec/lib/defaultimpl/default_connection_logger_spec.rb +17 -17
  587. data/spec/lib/webhooks/webhooks_spec.rb +2 -1
  588. metadata +40 -2
@@ -1,6 +1,15 @@
1
+ require 'httpclient'
1
2
  require 'securerandom'
2
3
  require 'uri'
3
- require 'httpclient'
4
+ require 'ingenico/connect/sdk/communication_exception'
5
+ require 'ingenico/connect/sdk/logging/obfuscation/body_obfuscator'
6
+ require 'ingenico/connect/sdk/logging/obfuscation/header_obfuscator'
7
+ require 'ingenico/connect/sdk/logging/obfuscation/obfuscation_capable'
8
+ require 'ingenico/connect/sdk/logging/request_log_message_builder'
9
+ require 'ingenico/connect/sdk/logging/response_log_message_builder'
10
+ require 'ingenico/connect/sdk/pooled_connection'
11
+ require 'ingenico/connect/sdk/multipart_form_data_object'
12
+ require 'ingenico/connect/sdk/response_header'
4
13
 
5
14
  # @private :nodoc: this is not our class
6
15
  module RefineHTTPClient
@@ -13,397 +22,406 @@ module RefineHTTPClient
13
22
  end
14
23
  end
15
24
 
16
- module Ingenico::Connect::SDK
17
- module DefaultImpl
18
- class DefaultConnection < PooledConnection
19
- include Ingenico::Connect::SDK::Logging::Obfuscation::ObfuscationCapable
20
- using RefineHTTPClient
21
-
22
- CONTENT_TYPE = 'Content-Type'.freeze
23
- JSON_CONTENT_TYPE = 'application/json'.freeze
24
-
25
- # @param args [Hash] the parameters to initialize the connection with
26
- # @option args [Integer] :connect_timeout connection timeout in seconds.
27
- # @option args [Integer] :socket_timeout socket timeout in seconds.
28
- # @option args [Integer] :max_connections number of connections kept alive in the thread pool.
29
- # Uses {Ingenico::Connect::SDK::CommunicatorConfiguration.DEFAULT_MAX_CONNECTIONS} if not given.
30
- # @option args [Ingenico::Connect::SDK::ProxyConfiguration] :proxy_configuration object that stores the proxy to use.
31
- # If not given the system default proxy is used;
32
- # if there is no system default proxy set either, no proxy is used.
33
- def initialize(args)
34
- raise ArgumentError unless args.is_a? Hash
35
-
36
- # Set timeouts to nil if they are negative
37
- @connect_timeout = args[:connect_timeout]
38
- @connect_timeout = nil unless @connect_timeout.nil? || @connect_timeout > 0
39
- @socket_timeout = args[:socket_timeout]
40
- @socket_timeout = nil unless @socket_timeout.nil? || @socket_timeout > 0
41
- @max_connections = args[:max_connections] || CommunicatorConfiguration.DEFAULT_MAX_CONNECTIONS
42
- @proxy_configuration = args[:proxy_configuration]
43
-
44
- # HTTPClient provides the following features:
45
- # 1) thread safe, an instance can be used by multiple threads without
46
- # explicit synchronization
47
- # 2) use persistent connection if HTTP 1.1 is supported. The connection
48
- # will be left open until explicitly closed or keep_alive_timeout
49
- # 3) a built-in connection pool with no limit for max connections
50
- @http_client = create_http_client
51
- @http_client.connect_timeout = @connect_timeout
52
- @http_client.send_timeout = @socket_timeout
53
- @http_client.receive_timeout = @socket_timeout
54
-
55
- @body_obfuscator = Ingenico::Connect::SDK::Logging::Obfuscation::BodyObfuscator.default_obfuscator
56
- @header_obfuscator = Ingenico::Connect::SDK::Logging::Obfuscation::HeaderObfuscator.default_obfuscator
57
- end
58
-
59
- private
60
-
61
- # Create a HTTPClient instance that uses @proxy_configuration or the system proxy if @proxy_configuration is not set
62
- def create_http_client
63
- if @proxy_configuration
64
- httpclient = HTTPClient.new(@proxy_configuration.proxy_uri)
65
- httpclient.set_proxy_auth(@proxy_configuration.username, @proxy_configuration.password)
66
- httpclient.force_basic_auth = true unless @proxy_configuration.username.nil? || @proxy_configuration.password.nil?
67
- httpclient
68
- else # use system settings
69
- proxy_string = ENV['https_proxy'] || ENV['http_proxy']
70
- # proxy string format = 'http://username:password@hostname:port'
71
- proxy_string =~ %r{https?//(?<username>[^:]):(?<password>[^@])@.*}
72
- username = Regexp.last_match(1)
73
- password = Regexp.last_match(2)
74
- httpclient = HTTPClient.new(proxy_string)
75
- httpclient.set_proxy_auth(username, password) unless username.nil? || password.nil?
76
- httpclient.force_basic_auth = true unless username.nil? || password.nil?
77
- httpclient
78
- end
79
- end
80
-
81
- public
25
+ module Ingenico
26
+ module Connect
27
+ module SDK
28
+ module DefaultImpl
29
+ class DefaultConnection < PooledConnection
30
+ include Ingenico::Connect::SDK::Logging::Obfuscation::ObfuscationCapable
31
+ using RefineHTTPClient
32
+
33
+ CONTENT_TYPE = 'Content-Type'.freeze
34
+ JSON_CONTENT_TYPE = 'application/json'.freeze
35
+
36
+ # @param args [Hash] the parameters to initialize the connection with
37
+ # @option args [Integer] :connect_timeout connection timeout in seconds.
38
+ # @option args [Integer] :socket_timeout socket timeout in seconds.
39
+ # @option args [Integer] :max_connections number of connections kept alive in the thread pool.
40
+ # Uses {Ingenico::Connect::SDK::CommunicatorConfiguration.DEFAULT_MAX_CONNECTIONS} if not given.
41
+ # @option args [Ingenico::Connect::SDK::ProxyConfiguration] :proxy_configuration object that stores the proxy to use.
42
+ # If not given the system default proxy is used;
43
+ # if there is no system default proxy set either, no proxy is used.
44
+ def initialize(args)
45
+ raise ArgumentError unless args.is_a? Hash
46
+
47
+ # Set timeouts to nil if they are negative
48
+ @connect_timeout = args[:connect_timeout]
49
+ @connect_timeout = nil unless @connect_timeout.nil? || @connect_timeout > 0
50
+ @socket_timeout = args[:socket_timeout]
51
+ @socket_timeout = nil unless @socket_timeout.nil? || @socket_timeout > 0
52
+ @max_connections = args[:max_connections] || CommunicatorConfiguration.DEFAULT_MAX_CONNECTIONS
53
+ @proxy_configuration = args[:proxy_configuration]
54
+
55
+ # HTTPClient provides the following features:
56
+ # 1) thread safe, an instance can be used by multiple threads without
57
+ # explicit synchronization
58
+ # 2) use persistent connection if HTTP 1.1 is supported. The connection
59
+ # will be left open until explicitly closed or keep_alive_timeout
60
+ # 3) a built-in connection pool with no limit for max connections
61
+ @http_client = create_http_client
62
+ @http_client.connect_timeout = @connect_timeout
63
+ @http_client.send_timeout = @socket_timeout
64
+ @http_client.receive_timeout = @socket_timeout
65
+
66
+ @body_obfuscator = Ingenico::Connect::SDK::Logging::Obfuscation::BodyObfuscator.default_obfuscator
67
+ @header_obfuscator = Ingenico::Connect::SDK::Logging::Obfuscation::HeaderObfuscator.default_obfuscator
68
+ end
82
69
 
83
- # Closes all connections idle for longer than _idle_time_ seconds.
84
- # In addition, the keep_alive_timeout is set to _idle_time_
85
- # so any future connections idle for longer than _idle_time_ seconds will also be closed.
86
- def close_idle_connections(idle_time) # in sec
87
- @http_client.keep_alive_timeout = idle_time # set timeout value
88
- close_expired_connections
89
- end
70
+ private
71
+
72
+ # Create a HTTPClient instance that uses @proxy_configuration or the system proxy if @proxy_configuration is not set
73
+ def create_http_client
74
+ if @proxy_configuration
75
+ httpclient = HTTPClient.new(@proxy_configuration.proxy_uri)
76
+ httpclient.set_proxy_auth(@proxy_configuration.username, @proxy_configuration.password)
77
+ httpclient.force_basic_auth = true unless @proxy_configuration.username.nil? || @proxy_configuration.password.nil?
78
+ httpclient
79
+ else
80
+ # use system settings
81
+ proxy_string = ENV['https_proxy'] || ENV['http_proxy']
82
+ # proxy string format = 'http://username:password@hostname:port'
83
+ proxy_string =~ %r{https?//(?<username>[^:]):(?<password>[^@])@.*}
84
+ username = Regexp.last_match(1)
85
+ password = Regexp.last_match(2)
86
+ httpclient = HTTPClient.new(proxy_string)
87
+ httpclient.set_proxy_auth(username, password) unless username.nil? || password.nil?
88
+ httpclient.force_basic_auth = true unless username.nil? || password.nil?
89
+ httpclient
90
+ end
91
+ end
90
92
 
91
- # HTTPClient automatically closes expired connections so _close_expired_connections_ is a no-operation.
92
- def close_expired_connections
93
- # By default the keep alive timeout is 15 sec, which is the HTTP 1.1
94
- # standard. To change the value, use keep_alive_timeout= method
95
- # do nothing, handled by HTTPClient
96
- end
93
+ public
97
94
 
98
- # Frees all networking resources used.
99
- def close
100
- @http_client.reset_all
101
- end
95
+ # Closes all connections idle for longer than _idle_time_ seconds.
96
+ # In addition, the keep_alive_timeout is set to _idle_time_
97
+ # so any future connections idle for longer than _idle_time_ seconds will also be closed.
98
+ def close_idle_connections(idle_time)
99
+ # in sec
100
+ @http_client.keep_alive_timeout = idle_time # set timeout value
101
+ close_expired_connections
102
+ end
102
103
 
103
- # Returns the number of open connections
104
- def session_count
105
- @http_client.session_count
106
- end
104
+ # HTTPClient automatically closes expired connections so _close_expired_connections_ is a no-operation.
105
+ def close_expired_connections
106
+ # By default the keep alive timeout is 15 sec, which is the HTTP 1.1
107
+ # standard. To change the value, use keep_alive_timeout= method
108
+ # do nothing, handled by HTTPClient
109
+ end
107
110
 
108
- # Performs a GET request to the Ingenico ePayments platform
109
- # @see request
110
- def get(uri, request_headers)
111
- request('get', uri, request_headers) do |response_status_code, response_headers, response_body|
112
- yield response_status_code, response_headers, response_body
113
- end
114
- end
111
+ # Frees all networking resources used.
112
+ def close
113
+ @http_client.reset_all
114
+ end
115
115
 
116
- # Performs a DELETE request to the Ingenico ePayments platform
117
- # @see request
118
- def delete(uri, request_headers)
119
- request('delete', uri, request_headers) do |response_status_code, response_headers, response_body|
120
- yield response_status_code, response_headers, response_body
121
- end
122
- end
116
+ # Returns the number of open connections
117
+ def session_count
118
+ @http_client.session_count
119
+ end
123
120
 
124
- # Performs a POST request to the Ingenico ePayments platform
125
- # @see request
126
- def post(uri, request_headers, body)
127
- request('post', uri, request_headers, body) do |response_status_code, response_headers, response_body|
128
- yield response_status_code, response_headers, response_body
129
- end
130
- end
121
+ # Performs a GET request to the Ingenico ePayments platform
122
+ # @see request
123
+ def get(uri, request_headers)
124
+ request('get', uri, request_headers) do |response_status_code, response_headers, response_body|
125
+ yield response_status_code, response_headers, response_body
126
+ end
127
+ end
131
128
 
132
- # Performs a PUT request to the Ingenico ePayments platform
133
- # @see request
134
- def put(uri, request_headers, body)
135
- request('put', uri, request_headers, body) do |response_status_code, response_headers, response_body|
136
- yield response_status_code, response_headers, response_body
137
- end
138
- end
129
+ # Performs a DELETE request to the Ingenico ePayments platform
130
+ # @see request
131
+ def delete(uri, request_headers)
132
+ request('delete', uri, request_headers) do |response_status_code, response_headers, response_body|
133
+ yield response_status_code, response_headers, response_body
134
+ end
135
+ end
139
136
 
140
- # Performs a HTTP request and yields the response as the status code, headers and body.
141
- # Also ensures the request is logged when sent and its response is logged when received.
142
- #
143
- # @param method [String] 'GET', 'DELETE', 'POST' or 'PUT' depending on the HTTP method being used.
144
- # @param uri [URI::HTTP] full URI of the location the request is targeted at, including query parameters.
145
- # @param request_headers [Array<Ingenico::Connect::SDK::RequestHeader>] list of headers that should be used as HTTP headers in the request.
146
- # @param body [String, Ingenico::Connect::SDK::MultipartFormDataObject] request body.
147
- # @yield (Integer, Array<Ingenico::Connect::SDK::ResponseHeader>, IO) The status code, headers and body of the response.
148
- # @raise [Ingenico::Connect::SDK::CommunicationException] when communication with the Ingenico ePayments platform was not successful.
149
- def request(method, uri, request_headers, body = nil)
150
- request_headers = convert_from_sdk_headers(request_headers)
151
- request_id = SecureRandom.uuid
152
- content_type = request_headers[CONTENT_TYPE]
153
-
154
- info = { headers: request_headers, content_type: content_type }
155
- info[:body] = body unless body.nil?
156
-
157
- log_request(request_id, method.upcase, uri, info)
158
-
159
- start_time = Time.now
160
- begin
161
- response_headers = nil
162
- response_status_code = nil
163
- response_content_type = nil
164
- response_body = ''
165
-
166
- if body.is_a? Ingenico::Connect::SDK::MultipartFormDataObject
167
- multipart_request(method, uri, request_headers, body) do |status_code, headers, r_content_type, r_body|
168
- response_headers = headers
169
- response_status_code = status_code
170
- response_content_type = r_content_type
171
- unless binary_content_type? response_content_type
172
- response_body = r_body.read.force_encoding('UTF-8')
173
- r_body = StringIO.new(response_body)
174
- end
137
+ # Performs a POST request to the Ingenico ePayments platform
138
+ # @see request
139
+ def post(uri, request_headers, body)
140
+ request('post', uri, request_headers, body) do |response_status_code, response_headers, response_body|
141
+ yield response_status_code, response_headers, response_body
142
+ end
143
+ end
175
144
 
176
- yield status_code, headers, r_body
145
+ # Performs a PUT request to the Ingenico ePayments platform
146
+ # @see request
147
+ def put(uri, request_headers, body)
148
+ request('put', uri, request_headers, body) do |response_status_code, response_headers, response_body|
149
+ yield response_status_code, response_headers, response_body
177
150
  end
178
- else
179
- raw_request(method, uri, request_headers, body) do |status_code, headers, r_content_type, r_body|
180
- response_headers = headers
181
- response_status_code = status_code
182
- response_content_type = r_content_type
183
- unless binary_content_type? response_content_type
184
- response_body = r_body.read.force_encoding('UTF-8')
185
- r_body = StringIO.new(response_body)
151
+ end
152
+
153
+ # Performs a HTTP request and yields the response as the status code, headers and body.
154
+ # Also ensures the request is logged when sent and its response is logged when received.
155
+ #
156
+ # @param method [String] 'GET', 'DELETE', 'POST' or 'PUT' depending on the HTTP method being used.
157
+ # @param uri [URI::HTTP] full URI of the location the request is targeted at, including query parameters.
158
+ # @param request_headers [Array<Ingenico::Connect::SDK::RequestHeader>] list of headers that should be used as HTTP headers in the request.
159
+ # @param body [String, Ingenico::Connect::SDK::MultipartFormDataObject] request body.
160
+ # @yield (Integer, Array<Ingenico::Connect::SDK::ResponseHeader>, IO) The status code, headers and body of the response.
161
+ # @raise [Ingenico::Connect::SDK::CommunicationException] when communication with the Ingenico ePayments platform was not successful.
162
+ def request(method, uri, request_headers, body = nil)
163
+ request_headers = convert_from_sdk_headers(request_headers)
164
+ request_id = SecureRandom.uuid
165
+ content_type = request_headers[CONTENT_TYPE]
166
+
167
+ info = { headers: request_headers, content_type: content_type }
168
+ info[:body] = body unless body.nil?
169
+
170
+ log_request(request_id, method.upcase, uri, info)
171
+
172
+ start_time = Time.now
173
+ begin
174
+ response_headers = nil
175
+ response_status_code = nil
176
+ response_content_type = nil
177
+ response_body = ''
178
+
179
+ if body.is_a? Ingenico::Connect::SDK::MultipartFormDataObject
180
+ multipart_request(method, uri, request_headers, body) do |status_code, headers, r_content_type, r_body|
181
+ response_headers = headers
182
+ response_status_code = status_code
183
+ response_content_type = r_content_type
184
+ unless binary_content_type? response_content_type
185
+ response_body = r_body.read.force_encoding('UTF-8')
186
+ r_body = StringIO.new(response_body)
187
+ end
188
+
189
+ yield status_code, headers, r_body
190
+ end
191
+ else
192
+ raw_request(method, uri, request_headers, body) do |status_code, headers, r_content_type, r_body|
193
+ response_headers = headers
194
+ response_status_code = status_code
195
+ response_content_type = r_content_type
196
+ unless binary_content_type? response_content_type
197
+ response_body = r_body.read.force_encoding('UTF-8')
198
+ r_body = StringIO.new(response_body)
199
+ end
200
+
201
+ yield status_code, headers, r_body
202
+ end
186
203
  end
187
204
 
188
- yield status_code, headers, r_body
205
+ log_response(request_id, response_status_code, start_time,
206
+ headers: response_headers, body: response_body,
207
+ content_type: response_content_type)
208
+ rescue HTTPClient::TimeoutError => e
209
+ log_error(request_id, start_time, e)
210
+ raise Ingenico::Connect::SDK::CommunicationException, e
211
+ rescue HTTPClient::KeepAliveDisconnected, HTTPClient::RetryableResponse => e # retry these?
212
+ log_error(request_id, start_time, e)
213
+ raise Ingenico::Connect::SDK::CommunicationException, e
214
+ rescue StandardError => e
215
+ log_error(request_id, start_time, e)
216
+ raise Ingenico::Connect::SDK::CommunicationException, e
189
217
  end
190
218
  end
191
219
 
192
- log_response(request_id, response_status_code, start_time,
193
- headers: response_headers, body: response_body,
194
- content_type: response_content_type)
195
- rescue HTTPClient::TimeoutError => e
196
- log_error(request_id, start_time, e)
197
- raise Ingenico::Connect::SDK::CommunicationException, e
198
- rescue HTTPClient::KeepAliveDisconnected, HTTPClient::RetryableResponse => e # retry these?
199
- log_error(request_id, start_time, e)
200
- raise Ingenico::Connect::SDK::CommunicationException, e
201
- rescue StandardError => e
202
- log_error(request_id, start_time, e)
203
- raise Ingenico::Connect::SDK::CommunicationException, e
204
- end
205
- end
206
-
207
- # logging code
220
+ # logging code
208
221
 
209
- # Sets the current body obfuscator to use.
210
- # @param body_obfuscator [Ingenico::Connect::SDK::Logging::Obfuscation::BodyObfuscator]
211
- def set_body_obfuscator(body_obfuscator)
212
- raise ArgumentError, 'body_obfuscator is required' unless body_obfuscator
222
+ # Sets the current body obfuscator to use.
223
+ # @param body_obfuscator [Ingenico::Connect::SDK::Logging::Obfuscation::BodyObfuscator]
224
+ def set_body_obfuscator(body_obfuscator)
225
+ raise ArgumentError, 'body_obfuscator is required' unless body_obfuscator
213
226
 
214
- @body_obfuscator = body_obfuscator
215
- end
227
+ @body_obfuscator = body_obfuscator
228
+ end
216
229
 
217
- # Sets the current header obfuscator to use.
218
- # @param header_obfuscator [Ingenico::Connect::SDK::Logging::Obfuscation::HeaderObfuscator]
219
- def set_header_obfuscator(header_obfuscator)
220
- raise ArgumentError, 'header_obfuscator is required' unless header_obfuscator
230
+ # Sets the current header obfuscator to use.
231
+ # @param header_obfuscator [Ingenico::Connect::SDK::Logging::Obfuscation::HeaderObfuscator]
232
+ def set_header_obfuscator(header_obfuscator)
233
+ raise ArgumentError, 'header_obfuscator is required' unless header_obfuscator
221
234
 
222
- @header_obfuscator = header_obfuscator
223
- end
235
+ @header_obfuscator = header_obfuscator
236
+ end
224
237
 
225
- # Enables logging outgoing requests and incoming responses by registering the _communicator_logger_.
226
- # Note that only one logger can be registered at a time and calling _enable_logging_
227
- # a second time will override the old logger instance with the new one.
228
- #
229
- # @param communicator_logger [Ingenico::Connect::SDK::Logging::CommunicatorLogger] the communicator logger the requests and responses are logged to
230
- def enable_logging(communicator_logger)
231
- raise ArgumentError, 'communicator_logger is required' unless communicator_logger
238
+ # Enables logging outgoing requests and incoming responses by registering the _communicator_logger_.
239
+ # Note that only one logger can be registered at a time and calling _enable_logging_
240
+ # a second time will override the old logger instance with the new one.
241
+ #
242
+ # @param communicator_logger [Ingenico::Connect::SDK::Logging::CommunicatorLogger] the communicator logger the requests and responses are logged to
243
+ def enable_logging(communicator_logger)
244
+ raise ArgumentError, 'communicator_logger is required' unless communicator_logger
232
245
 
233
- @communicator_logger = communicator_logger
234
- end
246
+ @communicator_logger = communicator_logger
247
+ end
235
248
 
236
- # Disables logging by unregistering any previous logger that might be registered.
237
- def disable_logging
238
- @communicator_logger = nil
239
- end
249
+ # Disables logging by unregistering any previous logger that might be registered.
250
+ def disable_logging
251
+ @communicator_logger = nil
252
+ end
240
253
 
241
- private
254
+ private
242
255
 
243
- # Converts a {Ingenico::Connect::SDK::RequestHeader} list headers to a hash
244
- def convert_from_sdk_headers(headers)
245
- headers.each_with_object({}) { |h, hash| hash[h.name] = h.value }
246
- end
247
-
248
- # Converts a hash to a {Ingenico::Connect::SDK::ResponseHeader} list
249
- def convert_to_sdk_response_headers(headers)
250
- arr ||= []
251
- headers.each { |k, v| arr << Ingenico::Connect::SDK::ResponseHeader.new(k, v) }
252
- arr
253
- end
256
+ # Converts a {Ingenico::Connect::SDK::RequestHeader} list headers to a hash
257
+ def convert_from_sdk_headers(headers)
258
+ headers.each_with_object({}) { |h, hash| hash[h.name] = h.value }
259
+ end
254
260
 
255
- def log_request(request_id, method, uri, args = {})
256
- return unless @communicator_logger
257
-
258
- headers = args[:headers]
259
- body = args[:body]
260
- content_type = args[:content_type]
261
- log_msg_builder = Ingenico::Connect::SDK::Logging::RequestLogMessageBuilder.new(request_id, method, uri,
262
- @body_obfuscator,
263
- @header_obfuscator)
264
- headers.each { |k, v| log_msg_builder.add_headers(k, v) } if headers
265
-
266
- if binary?(headers)
267
- log_msg_builder.set_body('<binary content>', content_type)
268
- else
269
- log_msg_builder.set_body(body, content_type)
270
- end
261
+ # Converts a hash to a {Ingenico::Connect::SDK::ResponseHeader} list
262
+ def convert_to_sdk_response_headers(headers)
263
+ arr ||= []
264
+ headers.each { |k, v| arr << Ingenico::Connect::SDK::ResponseHeader.new(k, v) }
265
+ arr
266
+ end
271
267
 
272
- begin
273
- @communicator_logger.log(log_msg_builder.get_message)
274
- rescue StandardError => e
275
- @communicator_logger.log("An error occurred trying to log request #{request_id}", e)
276
- end
277
- end
268
+ def log_request(request_id, method, uri, args = {})
269
+ logger = @communicator_logger
270
+ return unless logger
271
+
272
+ headers = args[:headers]
273
+ body = args[:body]
274
+ content_type = args[:content_type]
275
+ log_msg_builder = Ingenico::Connect::SDK::Logging::RequestLogMessageBuilder.new(request_id, method, uri,
276
+ @body_obfuscator,
277
+ @header_obfuscator)
278
+ headers.each { |k, v| log_msg_builder.add_headers(k, v) } if headers
279
+
280
+ if binary?(headers)
281
+ log_msg_builder.set_body('<binary content>', content_type)
282
+ else
283
+ log_msg_builder.set_body(body, content_type)
284
+ end
278
285
 
279
- # Creates the log_response stream
280
- # both based on whether or not it is binary and on the rest of the response
281
- def log_response(request_id, status_code, start_time, args = {})
282
- return unless @communicator_logger
283
-
284
- duration = (Time.now - start_time) * 1000 # in milliseconds
285
- headers = args[:headers]
286
- body = args[:body] unless args[:body].nil?
287
- content_type = args[:content_type]
288
-
289
- log_msg_builder = Ingenico::Connect::SDK::Logging::ResponseLogMessageBuilder.new(request_id, status_code, duration,
290
- @body_obfuscator,
291
- @header_obfuscator)
292
- unless headers.nil?
293
- headers = convert_from_sdk_headers(headers)
294
- headers.each do |key, value|
295
- log_msg_builder.add_headers(key, value)
286
+ begin
287
+ logger.log(log_msg_builder.get_message)
288
+ rescue StandardError => e
289
+ logger.log("An error occurred trying to log request #{request_id}", e)
290
+ end
296
291
  end
297
- end
298
292
 
299
- if binary_content_type?(content_type)
300
- log_msg_builder.set_body('<binary content>', content_type)
301
- else
302
- log_msg_builder.set_body(body, content_type)
303
- end
293
+ # Creates the log_response stream
294
+ # both based on whether or not it is binary and on the rest of the response
295
+ def log_response(request_id, status_code, start_time, args = {})
296
+ logger = @communicator_logger
297
+ return unless logger
298
+
299
+ duration = (Time.now - start_time) * 1000 # in milliseconds
300
+ headers = args[:headers]
301
+ body = args[:body] unless args[:body].nil?
302
+ content_type = args[:content_type]
303
+
304
+ log_msg_builder = Ingenico::Connect::SDK::Logging::ResponseLogMessageBuilder.new(request_id, status_code, duration,
305
+ @body_obfuscator,
306
+ @header_obfuscator)
307
+ unless headers.nil?
308
+ headers = convert_from_sdk_headers(headers)
309
+ headers.each do |key, value|
310
+ log_msg_builder.add_headers(key, value)
311
+ end
312
+ end
304
313
 
305
- begin
306
- @communicator_logger.log(log_msg_builder.get_message)
307
- rescue StandardError => e
308
- @communicator_logger.log("An error occurred trying to log response #{request_id}", e)
309
- end
310
- end
314
+ if binary_content_type?(content_type)
315
+ log_msg_builder.set_body('<binary content>', content_type)
316
+ else
317
+ log_msg_builder.set_body(body, content_type)
318
+ end
311
319
 
312
- def log_error(request_id, start_time, thrown)
313
- return unless @communicator_logger
320
+ begin
321
+ logger.log(log_msg_builder.get_message)
322
+ rescue StandardError => e
323
+ logger.log("An error occurred trying to log response #{request_id}", e)
324
+ end
325
+ end
314
326
 
315
- duration = (Time.now - start_time) * 1000 # in millisecs
316
- @communicator_logger.log("Error occurred for outgoing request (requestId='#{request_id}', #{duration} ms)", thrown)
317
- end
327
+ def log_error(request_id, start_time, thrown)
328
+ logger = @communicator_logger
329
+ return unless logger
318
330
 
319
- # @param headers [Hash]
320
- def binary?(headers)
321
- unless headers.nil?
322
- content_type = nil
323
- headers.each { |k, v| content_type = v if k.casecmp(CONTENT_TYPE).zero? }
331
+ duration = (Time.now - start_time) * 1000 # in millisecs
332
+ logger.log("Error occurred for outgoing request (requestId='#{request_id}', #{duration} ms)", thrown)
333
+ end
324
334
 
325
- binary_content_type?(content_type)
326
- end
327
- end
335
+ # @param headers [Hash]
336
+ def binary?(headers)
337
+ unless headers.nil?
338
+ content_type = nil
339
+ headers.each { |k, v| content_type = v if k.casecmp(CONTENT_TYPE).zero? }
328
340
 
329
- # @param content_type [String]
330
- def binary_content_type?(content_type)
331
- unless content_type.nil?
332
- content_type = content_type.downcase
333
- return !content_type.start_with?('text/') &&
334
- !content_type.include?('json') &&
335
- !content_type.include?('xml')
336
- end
337
- false
338
- end
341
+ binary_content_type?(content_type)
342
+ end
343
+ end
339
344
 
340
- # Makes a request using the specified method
341
- #
342
- # Yields a status code, an array of {Ingenico::Connect::SDK::ResponseHeader},
343
- # the content_type and body
344
- def raw_request(method, uri, headers, body = nil)
345
- connection = if body
346
- @http_client.send(method + '_async', uri, body: body, header: headers)
347
- else
348
- @http_client.send(method + '_async', uri, header: headers)
349
- end
350
-
351
- response = connection.pop
352
- pipe = response.content
353
- response_headers = convert_to_sdk_response_headers(response.headers)
354
-
355
- begin
356
- yield response.status_code, response_headers, response.content_type, pipe
357
- ensure
358
- pipe.close
359
- end
360
- end
345
+ # @param content_type [String]
346
+ def binary_content_type?(content_type)
347
+ unless content_type.nil?
348
+ content_type = content_type.downcase
349
+ return !content_type.start_with?('text/') &&
350
+ !content_type.include?('json') &&
351
+ !content_type.include?('xml')
352
+ end
353
+ false
354
+ end
361
355
 
362
- # Makes a request using the specified method
363
- #
364
- # Yields a status code, an array of {Ingenico::Connect::SDK::ResponseHeader},
365
- # the content_type and body
366
- def multipart_request(method, uri, headers, body = nil)
367
- unless body.is_a? Ingenico::Connect::SDK::MultipartFormDataObject
368
- raise ArgumentError, 'body should be a MultipartFormDataObject'
369
- end
356
+ # Makes a request using the specified method
357
+ #
358
+ # Yields a status code, an array of {Ingenico::Connect::SDK::ResponseHeader},
359
+ # the content_type and body
360
+ def raw_request(method, uri, headers, body = nil)
361
+ connection = if body
362
+ @http_client.send(method + '_async', uri, body: body, header: headers)
363
+ else
364
+ @http_client.send(method + '_async', uri, header: headers)
365
+ end
366
+
367
+ response = connection.pop
368
+ pipe = response.content
369
+ response_headers = convert_to_sdk_response_headers(response.headers)
370
+
371
+ begin
372
+ yield response.status_code, response_headers, response.content_type, pipe
373
+ ensure
374
+ pipe.close
375
+ end
376
+ end
370
377
 
371
- if method != 'post' && method != 'put'
372
- raise ArgumentError, "method #{method} is not supported"
373
- end
378
+ # Makes a request using the specified method
379
+ #
380
+ # Yields a status code, an array of {Ingenico::Connect::SDK::ResponseHeader},
381
+ # the content_type and body
382
+ def multipart_request(method, uri, headers, body = nil)
383
+ unless body.is_a? Ingenico::Connect::SDK::MultipartFormDataObject
384
+ raise ArgumentError, 'body should be a MultipartFormDataObject'
385
+ end
374
386
 
375
- connection = @http_client.send method + '_async',
376
- uri,
377
- body: multipart_request_body(body),
378
- header: headers
387
+ if method != 'post' && method != 'put'
388
+ raise ArgumentError, "method #{method} is not supported"
389
+ end
379
390
 
380
- response = connection.pop
381
- pipe = response.content
382
- response_headers = convert_to_sdk_response_headers(response.headers)
391
+ connection = @http_client.send method + '_async',
392
+ uri,
393
+ body: multipart_request_body(body),
394
+ header: headers
383
395
 
384
- begin
385
- yield response.status_code, response_headers, response.content_type, pipe
386
- ensure
387
- pipe.close
388
- end
389
- end
396
+ response = connection.pop
397
+ pipe = response.content
398
+ response_headers = convert_to_sdk_response_headers(response.headers)
390
399
 
391
- # Creates a request body for the multipart request
392
- def multipart_request_body( body )
393
- request_body = []
394
- body.files.each do |k, v|
395
- request_body.push :content => v.content,
396
- 'Content-Type' => v.content_type,
397
- 'Content-Disposition' => "form-data; name=\"#{k}\"; filename=\"#{v.file_name}\"",
398
- 'Content-Transfer-Encoding' => 'binary'
399
- end
400
+ begin
401
+ yield response.status_code, response_headers, response.content_type, pipe
402
+ ensure
403
+ pipe.close
404
+ end
405
+ end
400
406
 
401
- body.values.each do |k, v|
402
- request_body << { :content => v,
403
- 'Content-Disposition' => "form-data; name=\"#{k}\"" }
407
+ # Creates a request body for the multipart request
408
+ def multipart_request_body(body)
409
+ request_body = []
410
+ body.files.each do |k, v|
411
+ request_body.push :content => v.content,
412
+ 'Content-Type' => v.content_type,
413
+ 'Content-Disposition' => "form-data; name=\"#{k}\"; filename=\"#{v.file_name}\"",
414
+ 'Content-Transfer-Encoding' => 'binary'
415
+ end
416
+
417
+ body.values.each do |k, v|
418
+ request_body << { :content => v,
419
+ 'Content-Disposition' => "form-data; name=\"#{k}\"" }
420
+ end
421
+ request_body
422
+ end
404
423
  end
405
- request_body
406
424
  end
407
425
  end
408
426
  end
409
- end
427
+ end