cybersource_rest_client 0.0.73 → 0.0.75

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 (148) hide show
  1. checksums.yaml +4 -4
  2. data/lib/AuthenticationSDK/core/MerchantConfig.rb +2 -1
  3. data/lib/cybersource_rest_client/api/batches_api.rb +9 -9
  4. data/lib/cybersource_rest_client/api/bin_lookup_api.rb +5 -5
  5. data/lib/cybersource_rest_client/api/create_new_webhooks_api.rb +6 -6
  6. data/lib/cybersource_rest_client/api/decision_manager_api.rb +3 -3
  7. data/lib/cybersource_rest_client/api/device_de_association_api.rb +168 -0
  8. data/lib/cybersource_rest_client/api/device_search_api.rb +78 -5
  9. data/lib/cybersource_rest_client/api/manage_webhooks_api.rb +9 -9
  10. data/lib/cybersource_rest_client/api/merchant_boarding_api.rb +3 -3
  11. data/lib/cybersource_rest_client/api/payment_tokens_api.rb +96 -0
  12. data/lib/cybersource_rest_client/api/subscriptions_api.rb +5 -2
  13. data/lib/cybersource_rest_client/models/create_order_request.rb +269 -229
  14. data/lib/cybersource_rest_client/models/de_association_request_body.rb +190 -0
  15. data/lib/cybersource_rest_client/models/generate_capture_context_request.rb +1 -1
  16. data/lib/cybersource_rest_client/models/generate_unified_checkout_capture_context_request.rb +2 -2
  17. data/lib/cybersource_rest_client/models/get_subscription_response.rb +15 -5
  18. data/lib/cybersource_rest_client/models/get_subscription_response_reactivation_information.rb +213 -0
  19. data/lib/cybersource_rest_client/models/inline_response_200_10.rb +292 -0
  20. data/lib/cybersource_rest_client/models/{inline_response_200_9_records.rb → inline_response_200_10_records.rb} +3 -3
  21. data/lib/cybersource_rest_client/models/{inline_response_200_9_response_record.rb → inline_response_200_10_response_record.rb} +2 -2
  22. data/lib/cybersource_rest_client/models/{inline_response_200_9_response_record_additional_updates.rb → inline_response_200_10_response_record_additional_updates.rb} +1 -1
  23. data/lib/cybersource_rest_client/models/{inline_response_200_9_source_record.rb → inline_response_200_10_source_record.rb} +1 -1
  24. data/lib/cybersource_rest_client/models/inline_response_200_2.rb +253 -253
  25. data/lib/cybersource_rest_client/models/inline_response_200_5.rb +55 -10
  26. data/lib/cybersource_rest_client/models/inline_response_200_5_devices.rb +357 -0
  27. data/lib/cybersource_rest_client/models/inline_response_200_6.rb +10 -55
  28. data/lib/cybersource_rest_client/models/inline_response_200_7.rb +33 -37
  29. data/lib/cybersource_rest_client/models/{inline_response_200_6_devices.rb → inline_response_200_7_devices.rb} +2 -2
  30. data/lib/cybersource_rest_client/models/{inline_response_200_6_payment_processor_to_terminal_map.rb → inline_response_200_7_payment_processor_to_terminal_map.rb} +1 -1
  31. data/lib/cybersource_rest_client/models/inline_response_200_8.rb +47 -86
  32. data/lib/cybersource_rest_client/models/{inline_response_200_7__embedded.rb → inline_response_200_8__embedded.rb} +2 -2
  33. data/lib/cybersource_rest_client/models/{inline_response_200_7__embedded__links.rb → inline_response_200_8__embedded__links.rb} +2 -2
  34. data/lib/cybersource_rest_client/models/{inline_response_200_7__embedded__links_reports.rb → inline_response_200_8__embedded__links_reports.rb} +1 -1
  35. data/lib/cybersource_rest_client/models/{inline_response_200_7__embedded_batches.rb → inline_response_200_8__embedded_batches.rb} +3 -3
  36. data/lib/cybersource_rest_client/models/{inline_response_200_7__embedded_totals.rb → inline_response_200_8__embedded_totals.rb} +1 -1
  37. data/lib/cybersource_rest_client/models/inline_response_200_8__links.rb +16 -17
  38. data/lib/cybersource_rest_client/models/inline_response_200_9.rb +47 -49
  39. data/lib/cybersource_rest_client/models/inline_response_200_9__links.rb +201 -0
  40. data/lib/cybersource_rest_client/models/{inline_response_200_8__links_report.rb → inline_response_200_9__links_report.rb} +1 -1
  41. data/lib/cybersource_rest_client/models/{inline_response_200_8_billing.rb → inline_response_200_9_billing.rb} +1 -1
  42. data/lib/cybersource_rest_client/models/inline_response_201.rb +227 -218
  43. data/lib/cybersource_rest_client/models/inline_response_201_1.rb +218 -248
  44. data/lib/cybersource_rest_client/models/inline_response_201_2.rb +248 -281
  45. data/lib/cybersource_rest_client/models/{inline_response_201_1_payout_information.rb → inline_response_201_2_payout_information.rb} +216 -216
  46. data/lib/cybersource_rest_client/models/{inline_response_201_1_payout_information_pull_funds.rb → inline_response_201_2_payout_information_pull_funds.rb} +213 -213
  47. data/lib/cybersource_rest_client/models/{inline_response_201_1_payout_information_push_funds.rb → inline_response_201_2_payout_information_push_funds.rb} +417 -417
  48. data/lib/cybersource_rest_client/models/inline_response_201_3.rb +281 -222
  49. data/lib/cybersource_rest_client/models/{inline_response_201_2_integration_information.rb → inline_response_201_3_integration_information.rb} +192 -192
  50. data/lib/cybersource_rest_client/models/{inline_response_201_2_integration_information_tenant_configurations.rb → inline_response_201_3_integration_information_tenant_configurations.rb} +253 -253
  51. data/lib/cybersource_rest_client/models/{inline_response_201_2_organization_information.rb → inline_response_201_3_organization_information.rb} +217 -217
  52. data/lib/cybersource_rest_client/models/{inline_response_201_2_product_information_setups.rb → inline_response_201_3_product_information_setups.rb} +214 -214
  53. data/lib/cybersource_rest_client/models/{inline_response_201_2_registration_information.rb → inline_response_201_3_registration_information.rb} +222 -222
  54. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups.rb → inline_response_201_3_setups.rb} +219 -219
  55. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_commerce_solutions.rb → inline_response_201_3_setups_commerce_solutions.rb} +209 -209
  56. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_payments.rb → inline_response_201_3_setups_payments.rb} +369 -369
  57. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_payments_alternative_payment_methods.rb → inline_response_201_3_setups_payments_alternative_payment_methods.rb} +221 -221
  58. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_payments_alternative_payment_methods_configuration_status.rb → inline_response_201_3_setups_payments_alternative_payment_methods_configuration_status.rb} +200 -200
  59. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_payments_card_processing.rb → inline_response_201_3_setups_payments_card_processing.rb} +199 -199
  60. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_payments_card_processing_configuration_status.rb → inline_response_201_3_setups_payments_card_processing_configuration_status.rb} +255 -255
  61. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_payments_card_processing_subscription_status.rb → inline_response_201_3_setups_payments_card_processing_subscription_status.rb} +234 -234
  62. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_payments_digital_payments.rb → inline_response_201_3_setups_payments_digital_payments.rb} +189 -189
  63. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_risk.rb → inline_response_201_3_setups_risk.rb} +199 -199
  64. data/lib/cybersource_rest_client/models/{inline_response_201_2_setups_value_added_services.rb → inline_response_201_3_setups_value_added_services.rb} +209 -209
  65. data/lib/cybersource_rest_client/models/inline_response_201_4.rb +222 -312
  66. data/lib/cybersource_rest_client/models/{inline_response_201_3_key_information.rb → inline_response_201_4_key_information.rb} +300 -300
  67. data/lib/cybersource_rest_client/models/{inline_response_201_3_key_information_error_information.rb → inline_response_201_4_key_information_error_information.rb} +202 -202
  68. data/lib/cybersource_rest_client/models/{inline_response_201_3_key_information_error_information_details.rb → inline_response_201_4_key_information_error_information_details.rb} +201 -201
  69. data/lib/cybersource_rest_client/models/inline_response_201_5.rb +312 -277
  70. data/lib/cybersource_rest_client/models/inline_response_201_6.rb +277 -202
  71. data/lib/cybersource_rest_client/models/{inline_response_201_5_payloads.rb → inline_response_201_6_payloads.rb} +189 -189
  72. data/lib/cybersource_rest_client/models/{inline_response_201_5_payloads_test_payload.rb → inline_response_201_6_payloads_test_payload.rb} +190 -190
  73. data/lib/cybersource_rest_client/models/inline_response_201_7.rb +202 -0
  74. data/lib/cybersource_rest_client/models/inline_response_201_order_information.rb +189 -0
  75. data/lib/cybersource_rest_client/models/inline_response_201_order_information_ship_to.rb +315 -0
  76. data/lib/cybersource_rest_client/models/inline_response_201_payment_information.rb +199 -0
  77. data/lib/cybersource_rest_client/models/inline_response_201_payment_information_e_wallet.rb +196 -0
  78. data/lib/cybersource_rest_client/models/inline_response_201_payment_information_tokenized_payment_method.rb +213 -0
  79. data/lib/cybersource_rest_client/models/payments_products.rb +1 -1
  80. data/lib/cybersource_rest_client/models/payments_products_unified_checkout.rb +199 -0
  81. data/lib/cybersource_rest_client/models/payments_products_unified_checkout_configuration_information.rb +189 -0
  82. data/lib/cybersource_rest_client/models/payments_products_unified_checkout_configuration_information_configurations.rb +189 -0
  83. data/lib/cybersource_rest_client/models/payments_products_unified_checkout_configuration_information_configurations_features.rb +189 -0
  84. data/lib/cybersource_rest_client/models/payments_products_unified_checkout_configuration_information_configurations_features_paze.rb +213 -0
  85. data/lib/cybersource_rest_client/models/payments_products_unified_checkout_subscription_information.rb +225 -0
  86. data/lib/cybersource_rest_client/models/payments_products_unified_checkout_subscription_information_features.rb +189 -0
  87. data/lib/cybersource_rest_client/models/payments_products_unified_checkout_subscription_information_features_paze_for_unified_checkout.rb +190 -0
  88. data/lib/cybersource_rest_client/models/post_device_search_request.rb +223 -0
  89. data/lib/cybersource_rest_client/models/pts_v2_payments_post201_response_installment_information.rb +609 -609
  90. data/lib/cybersource_rest_client/models/pts_v2_payments_post201_response_payment_account_information_card.rb +269 -269
  91. data/lib/cybersource_rest_client/models/pts_v2_payments_post201_response_payment_information.rb +364 -354
  92. data/lib/cybersource_rest_client/models/pts_v2_payments_post201_response_payment_information_tokenized_card.rb +309 -309
  93. data/lib/cybersource_rest_client/models/pts_v2_payments_post201_response_payment_information_tokenized_payment_method.rb +213 -0
  94. data/lib/cybersource_rest_client/models/pts_v2_retrieve_payment_token_get400_response.rb +252 -0
  95. data/lib/cybersource_rest_client/models/pts_v2_retrieve_payment_token_get502_response.rb +240 -0
  96. data/lib/cybersource_rest_client/models/ptsv2billingagreements_payment_information_card.rb +258 -258
  97. data/lib/cybersource_rest_client/models/ptsv2billingagreements_payment_information_tokenized_card.rb +275 -275
  98. data/lib/cybersource_rest_client/models/ptsv2intents_event_information.rb +212 -0
  99. data/lib/cybersource_rest_client/models/ptsv2intents_order_information_ship_to.rb +354 -332
  100. data/lib/cybersource_rest_client/models/ptsv2intents_payment_information.rb +220 -189
  101. data/lib/cybersource_rest_client/models/ptsv2intents_payment_information_e_wallet.rb +196 -0
  102. data/lib/cybersource_rest_client/models/ptsv2intents_payment_information_tokenized_payment_method.rb +241 -0
  103. data/lib/cybersource_rest_client/models/ptsv2intents_processing_information.rb +351 -219
  104. data/lib/cybersource_rest_client/models/ptsv2intents_recipient_information.rb +245 -0
  105. data/lib/cybersource_rest_client/models/ptsv2intents_sender_information.rb +277 -0
  106. data/lib/cybersource_rest_client/models/ptsv2intents_sender_information_account.rb +190 -0
  107. data/lib/cybersource_rest_client/models/ptsv2intents_travel_information.rb +211 -0
  108. data/lib/cybersource_rest_client/models/ptsv2intents_travel_information_agency.rb +245 -0
  109. data/lib/cybersource_rest_client/models/{inline_response_200_7__links.rb → ptsv2intentsid_payment_information.rb} +189 -200
  110. data/lib/cybersource_rest_client/models/ptsv2paymentreferences_order_information_amount_details.rb +417 -400
  111. data/lib/cybersource_rest_client/models/ptsv2paymentreferences_payment_information_card.rb +275 -275
  112. data/lib/cybersource_rest_client/models/ptsv2payments_installment_information.rb +433 -416
  113. data/lib/cybersource_rest_client/models/ptsv2payments_order_information_amount_details.rb +668 -651
  114. data/lib/cybersource_rest_client/models/ptsv2payments_order_information_line_items.rb +716 -699
  115. data/lib/cybersource_rest_client/models/ptsv2payments_payment_information.rb +356 -346
  116. data/lib/cybersource_rest_client/models/ptsv2payments_payment_information_card.rb +445 -445
  117. data/lib/cybersource_rest_client/models/ptsv2payments_payment_information_tokenized_card.rb +377 -377
  118. data/lib/cybersource_rest_client/models/ptsv2payments_payment_information_tokenized_payment_method.rb +196 -0
  119. data/lib/cybersource_rest_client/models/ptsv2paymentsidcaptures_installment_information.rb +604 -604
  120. data/lib/cybersource_rest_client/models/ptsv2paymentsidrefunds_payment_information_card.rb +377 -377
  121. data/lib/cybersource_rest_client/models/ptsv2paymenttokens_payment_information.rb +199 -0
  122. data/lib/cybersource_rest_client/models/ptsv2paymenttokens_processing_information.rb +192 -0
  123. data/lib/cybersource_rest_client/models/ptsv2payouts_payment_information_card.rb +258 -258
  124. data/lib/cybersource_rest_client/models/request.rb +199 -0
  125. data/lib/cybersource_rest_client/models/riskv1authenticationresults_payment_information_card.rb +241 -241
  126. data/lib/cybersource_rest_client/models/riskv1authenticationresults_payment_information_tokenized_card.rb +258 -258
  127. data/lib/cybersource_rest_client/models/riskv1authentications_payment_information_tokenized_card.rb +351 -351
  128. data/lib/cybersource_rest_client/models/riskv1authenticationsetups_payment_information_card.rb +268 -268
  129. data/lib/cybersource_rest_client/models/riskv1authenticationsetups_payment_information_tokenized_card.rb +299 -299
  130. data/lib/cybersource_rest_client/models/riskv1decisions_payment_information_card.rb +259 -259
  131. data/lib/cybersource_rest_client/models/riskv1decisions_payment_information_tokenized_card.rb +259 -259
  132. data/lib/cybersource_rest_client/models/riskv1decisions_travel_information_legs.rb +16 -5
  133. data/lib/cybersource_rest_client/models/riskv1liststypeentries_payment_information_card.rb +224 -224
  134. data/lib/cybersource_rest_client/models/tms_bin_lookup_issuer_information.rb +264 -264
  135. data/lib/cybersource_rest_client/models/tms_bin_lookup_payment_account_information_card.rb +277 -277
  136. data/lib/cybersource_rest_client/models/tms_bin_lookup_payment_account_information_card_brands.rb +213 -213
  137. data/lib/cybersource_rest_client/models/tms_bin_lookup_payment_account_information_features.rb +430 -430
  138. data/lib/cybersource_rest_client/models/tss_v2_transactions_get200_response_payment_information_brands.rb +201 -201
  139. data/lib/cybersource_rest_client/models/tss_v2_transactions_get200_response_payment_information_card.rb +365 -365
  140. data/lib/cybersource_rest_client/models/tss_v2_transactions_get200_response_processor_information.rb +12 -1
  141. data/lib/cybersource_rest_client/models/tss_v2_transactions_post201_response__embedded_payment_information_card.rb +218 -218
  142. data/lib/cybersource_rest_client/models/tss_v2_transactions_post201_response__embedded_processor_information.rb +245 -234
  143. data/lib/cybersource_rest_client/models/update_order_request.rb +229 -229
  144. data/lib/cybersource_rest_client/models/upv1capturecontexts_capture_mandate.rb +12 -1
  145. data/lib/cybersource_rest_client/models/upv1capturecontexts_complete_mandate.rb +18 -7
  146. data/lib/cybersource_rest_client.rb +75 -39
  147. metadata +77 -41
  148. data/lib/cybersource_rest_client/api/device_de_association_v3_api.rb +0 -96
@@ -1,346 +1,356 @@
1
- =begin
2
- #CyberSource Merged Spec
3
-
4
- #All CyberSource API specs merged together. These are available at https://developer.cybersource.com/api/reference/api-reference.html
5
-
6
- OpenAPI spec version: 0.0.1
7
-
8
- Generated by: https://github.com/swagger-api/swagger-codegen.git
9
- Swagger Codegen version: 2.4.38
10
- =end
11
-
12
- require 'date'
13
-
14
- module CyberSource
15
- class Ptsv2paymentsPaymentInformation
16
- attr_accessor :card
17
-
18
- attr_accessor :tokenized_card
19
-
20
- attr_accessor :direct_debit
21
-
22
- attr_accessor :fluid_data
23
-
24
- attr_accessor :customer
25
-
26
- attr_accessor :payment_instrument
27
-
28
- attr_accessor :instrument_identifier
29
-
30
- attr_accessor :shipping_address
31
-
32
- attr_accessor :legacy_token
33
-
34
- attr_accessor :bank
35
-
36
- attr_accessor :options
37
-
38
- attr_accessor :payment_type
39
-
40
- # Mastercard-defined code that indicates how the account information was obtained. - `00`: Card - `01`: Mobile Network Operator (MNO) controlled removable secure element (SIM or UICC) personalized for use with a mobile phone or smartphone - `02`: Key fob - `03`: Watch using a contactless chip or a fixed (non-removable) secure element not controlled by the MNO - `04`: Mobile tag - `05`: Wristband - `06`: Mobile phone case or sleeve - `07`: Mobile phone or smartphone with a fixed (non-removable) secure element controlled by the MNO,for example, code division multiple access (CDMA) - `08`: Removable secure element not controlled by the MNO, for example, memory card personalized forused with a mobile phone or smartphone - `09`: Mobile Phone or smartphone with a fixed (non-removable) secure element not controlled by the MNO - `10`: MNO controlled removable secure element (SIM or UICC) personalized for use with a tablet or e-book - `11`: Tablet or e-book with a fixed (non-removable) secure element controlled by the MNO - `12`: Removable secure element not controlled by the MNO, for example, memory card personalized foruse with a tablet or e-book - `13`: Tablet or e-book with fixed (non-removable) secure element not controlled by the MNO - `14`: Mobile phone or smartphone with a payment application running in a host processor - `15`: Tablet or e-book with a payment application running in a host processor - `16`: Mobile phone or smartphone with a payment application running in the Trusted ExecutionEnvironment (TEE) of a host processor - `17`: Tablet or e-book with a payment application running in the TEE of a host processor - `18`: Watch with a payment application running in the TEE of a host processor - `19`: Watch with a payment application running in a host processor Values from 20–99 exclusively indicate the form factor only without also indicating the storage technology - `20`: Card - `21`: Phone e.g. Mobile Phone - `22`: Tablet/e-reader - `23`: Watch/Wristband e.g. Watch or wristband, including a fitness band, smart strap, disposable band, watch add-on, and security/ID band - `24`: Sticker - `25`: PC - `26`: Device Peripheral e.g. mobile phone case or sleeve - `27`: Tag e.g. key fob or mobile tag - `28`: Jewelry e.g. ring, bracelet, necklace and cuff links - `29`: Fashion Accessory e.g. handbag, bag charm and glasses - `30`: Garment e.g. dress - `31`: Domestic Appliance e.g refrigerator, washing machine - `32`: Vehicle e.g. vehicle, including vehicle attached devices - `33`: Media/Gaming Device e.g. media or gaming device, including a set top box, media player and television 34–99 are reserved for future form factors. Any value in this range may occur within form factor and transaction data without prior notice. This field is supported only for Mastercard on CyberSource through VisaNet. When initiation channel is not provided via this API field, the value is extracted from EMV tag 9F6E for Mastercard transactions. To enable this feature please call support. #### Used by **Authorization** Optional field.
41
- attr_accessor :initiation_channel
42
-
43
- attr_accessor :sepa
44
-
45
- attr_accessor :e_wallet
46
-
47
- attr_accessor :payment_account_reference
48
-
49
- # Attribute mapping from ruby-style variable name to JSON key.
50
- def self.attribute_map
51
- {
52
- :'card' => :'card',
53
- :'tokenized_card' => :'tokenizedCard',
54
- :'direct_debit' => :'directDebit',
55
- :'fluid_data' => :'fluidData',
56
- :'customer' => :'customer',
57
- :'payment_instrument' => :'paymentInstrument',
58
- :'instrument_identifier' => :'instrumentIdentifier',
59
- :'shipping_address' => :'shippingAddress',
60
- :'legacy_token' => :'legacyToken',
61
- :'bank' => :'bank',
62
- :'options' => :'options',
63
- :'payment_type' => :'paymentType',
64
- :'initiation_channel' => :'initiationChannel',
65
- :'sepa' => :'sepa',
66
- :'e_wallet' => :'eWallet',
67
- :'payment_account_reference' => :'paymentAccountReference'
68
- }
69
- end
70
-
71
- # Attribute mapping from JSON key to ruby-style variable name.
72
- def self.json_map
73
- {
74
- :'card' => :'card',
75
- :'tokenized_card' => :'tokenized_card',
76
- :'direct_debit' => :'direct_debit',
77
- :'fluid_data' => :'fluid_data',
78
- :'customer' => :'customer',
79
- :'payment_instrument' => :'payment_instrument',
80
- :'instrument_identifier' => :'instrument_identifier',
81
- :'shipping_address' => :'shipping_address',
82
- :'legacy_token' => :'legacy_token',
83
- :'bank' => :'bank',
84
- :'options' => :'options',
85
- :'payment_type' => :'payment_type',
86
- :'initiation_channel' => :'initiation_channel',
87
- :'sepa' => :'sepa',
88
- :'e_wallet' => :'e_wallet',
89
- :'payment_account_reference' => :'payment_account_reference'
90
- }
91
- end
92
-
93
- # Attribute type mapping.
94
- def self.swagger_types
95
- {
96
- :'card' => :'Ptsv2paymentsPaymentInformationCard',
97
- :'tokenized_card' => :'Ptsv2paymentsPaymentInformationTokenizedCard',
98
- :'direct_debit' => :'Ptsv2paymentsPaymentInformationDirectDebit',
99
- :'fluid_data' => :'Ptsv2paymentsPaymentInformationFluidData',
100
- :'customer' => :'Ptsv2paymentsPaymentInformationCustomer',
101
- :'payment_instrument' => :'Ptsv2paymentsPaymentInformationPaymentInstrument',
102
- :'instrument_identifier' => :'Ptsv2paymentsPaymentInformationInstrumentIdentifier',
103
- :'shipping_address' => :'Ptsv2paymentsPaymentInformationShippingAddress',
104
- :'legacy_token' => :'Ptsv2paymentsPaymentInformationLegacyToken',
105
- :'bank' => :'Ptsv2paymentsPaymentInformationBank',
106
- :'options' => :'Ptsv2paymentsPaymentInformationOptions',
107
- :'payment_type' => :'Ptsv2paymentsPaymentInformationPaymentType',
108
- :'initiation_channel' => :'String',
109
- :'sepa' => :'Ptsv2paymentsPaymentInformationSepa',
110
- :'e_wallet' => :'Ptsv2paymentsPaymentInformationEWallet',
111
- :'payment_account_reference' => :'Ptsv2paymentsPaymentInformationPaymentAccountReference'
112
- }
113
- end
114
-
115
- # Initializes the object
116
- # @param [Hash] attributes Model attributes in the form of hash
117
- def initialize(attributes = {})
118
- return unless attributes.is_a?(Hash)
119
-
120
- # convert string to symbol for hash key
121
- attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
122
-
123
- if attributes.has_key?(:'card')
124
- self.card = attributes[:'card']
125
- end
126
-
127
- if attributes.has_key?(:'tokenizedCard')
128
- self.tokenized_card = attributes[:'tokenizedCard']
129
- end
130
-
131
- if attributes.has_key?(:'directDebit')
132
- self.direct_debit = attributes[:'directDebit']
133
- end
134
-
135
- if attributes.has_key?(:'fluidData')
136
- self.fluid_data = attributes[:'fluidData']
137
- end
138
-
139
- if attributes.has_key?(:'customer')
140
- self.customer = attributes[:'customer']
141
- end
142
-
143
- if attributes.has_key?(:'paymentInstrument')
144
- self.payment_instrument = attributes[:'paymentInstrument']
145
- end
146
-
147
- if attributes.has_key?(:'instrumentIdentifier')
148
- self.instrument_identifier = attributes[:'instrumentIdentifier']
149
- end
150
-
151
- if attributes.has_key?(:'shippingAddress')
152
- self.shipping_address = attributes[:'shippingAddress']
153
- end
154
-
155
- if attributes.has_key?(:'legacyToken')
156
- self.legacy_token = attributes[:'legacyToken']
157
- end
158
-
159
- if attributes.has_key?(:'bank')
160
- self.bank = attributes[:'bank']
161
- end
162
-
163
- if attributes.has_key?(:'options')
164
- self.options = attributes[:'options']
165
- end
166
-
167
- if attributes.has_key?(:'paymentType')
168
- self.payment_type = attributes[:'paymentType']
169
- end
170
-
171
- if attributes.has_key?(:'initiationChannel')
172
- self.initiation_channel = attributes[:'initiationChannel']
173
- end
174
-
175
- if attributes.has_key?(:'sepa')
176
- self.sepa = attributes[:'sepa']
177
- end
178
-
179
- if attributes.has_key?(:'eWallet')
180
- self.e_wallet = attributes[:'eWallet']
181
- end
182
-
183
- if attributes.has_key?(:'paymentAccountReference')
184
- self.payment_account_reference = attributes[:'paymentAccountReference']
185
- end
186
- end
187
-
188
- # Show invalid properties with the reasons. Usually used together with valid?
189
- # @return Array for valid properties with the reasons
190
- def list_invalid_properties
191
- invalid_properties = Array.new
192
- invalid_properties
193
- end
194
-
195
- # Check to see if the all the properties in the model are valid
196
- # @return true if the model is valid
197
- def valid?
198
- true
199
- end
200
-
201
- # Custom attribute writer method with validation
202
- # @param [Object] initiation_channel Value to be assigned
203
- def initiation_channel=(initiation_channel)
204
- @initiation_channel = initiation_channel
205
- end
206
-
207
- # Checks equality by comparing each attribute.
208
- # @param [Object] Object to be compared
209
- def ==(o)
210
- return true if self.equal?(o)
211
- self.class == o.class &&
212
- card == o.card &&
213
- tokenized_card == o.tokenized_card &&
214
- direct_debit == o.direct_debit &&
215
- fluid_data == o.fluid_data &&
216
- customer == o.customer &&
217
- payment_instrument == o.payment_instrument &&
218
- instrument_identifier == o.instrument_identifier &&
219
- shipping_address == o.shipping_address &&
220
- legacy_token == o.legacy_token &&
221
- bank == o.bank &&
222
- options == o.options &&
223
- payment_type == o.payment_type &&
224
- initiation_channel == o.initiation_channel &&
225
- sepa == o.sepa &&
226
- e_wallet == o.e_wallet &&
227
- payment_account_reference == o.payment_account_reference
228
- end
229
-
230
- # @see the `==` method
231
- # @param [Object] Object to be compared
232
- def eql?(o)
233
- self == o
234
- end
235
-
236
- # Calculates hash code according to all attributes.
237
- # @return [Fixnum] Hash code
238
- def hash
239
- [card, tokenized_card, direct_debit, fluid_data, customer, payment_instrument, instrument_identifier, shipping_address, legacy_token, bank, options, payment_type, initiation_channel, sepa, e_wallet, payment_account_reference].hash
240
- end
241
-
242
- # Builds the object from hash
243
- # @param [Hash] attributes Model attributes in the form of hash
244
- # @return [Object] Returns the model itself
245
- def build_from_hash(attributes)
246
- return nil unless attributes.is_a?(Hash)
247
- self.class.swagger_types.each_pair do |key, type|
248
- if type =~ /\AArray<(.*)>/i
249
- # check to ensure the input is an array given that the the attribute
250
- # is documented as an array but the input is not
251
- if attributes[self.class.attribute_map[key]].is_a?(Array)
252
- self.send("#{self.class.json_map[key]}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
253
- end
254
- elsif !attributes[self.class.attribute_map[key]].nil?
255
- self.send("#{self.class.json_map[key]}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
256
- end # or else data not found in attributes(hash), not an issue as the data can be optional
257
- end
258
-
259
- self
260
- end
261
-
262
- # Deserializes the data based on type
263
- # @param string type Data type
264
- # @param string value Value to be deserialized
265
- # @return [Object] Deserialized data
266
- def _deserialize(type, value)
267
- case type.to_sym
268
- when :DateTime
269
- DateTime.parse(value)
270
- when :Date
271
- Date.parse(value)
272
- when :String
273
- value.to_s
274
- when :Integer
275
- value.to_i
276
- when :Float
277
- value.to_f
278
- when :BOOLEAN
279
- if value.to_s =~ /\A(true|t|yes|y|1)\z/i
280
- true
281
- else
282
- false
283
- end
284
- when :Object
285
- # generic object (usually a Hash), return directly
286
- value
287
- when /\AArray<(?<inner_type>.+)>\z/
288
- inner_type = Regexp.last_match[:inner_type]
289
- value.map { |v| _deserialize(inner_type, v) }
290
- when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
291
- k_type = Regexp.last_match[:k_type]
292
- v_type = Regexp.last_match[:v_type]
293
- {}.tap do |hash|
294
- value.each do |k, v|
295
- hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
296
- end
297
- end
298
- else # model
299
- temp_model = CyberSource.const_get(type).new
300
- temp_model.build_from_hash(value)
301
- end
302
- end
303
-
304
- # Returns the string representation of the object
305
- # @return [String] String presentation of the object
306
- def to_s
307
- to_hash.to_s
308
- end
309
-
310
- # to_body is an alias to to_hash (backward compatibility)
311
- # @return [Hash] Returns the object in the form of hash
312
- def to_body
313
- to_hash
314
- end
315
-
316
- # Returns the object in the form of hash
317
- # @return [Hash] Returns the object in the form of hash
318
- def to_hash
319
- hash = {}
320
- self.class.attribute_map.each_pair do |attr, param|
321
- value = self.send(attr)
322
- next if value.nil?
323
- hash[param] = _to_hash(value)
324
- end
325
- hash
326
- end
327
-
328
- # Outputs non-array value in the form of hash
329
- # For object, use to_hash. Otherwise, just return the value
330
- # @param [Object] value Any valid value
331
- # @return [Hash] Returns the value in the form of hash
332
- def _to_hash(value)
333
- if value.is_a?(Array)
334
- value.compact.map { |v| _to_hash(v) }
335
- elsif value.is_a?(Hash)
336
- {}.tap do |hash|
337
- value.each { |k, v| hash[k] = _to_hash(v) }
338
- end
339
- elsif value.respond_to? :to_hash
340
- value.to_hash
341
- else
342
- value
343
- end
344
- end
345
- end
346
- end
1
+ =begin
2
+ #CyberSource Merged Spec
3
+
4
+ #All CyberSource API specs merged together. These are available at https://developer.cybersource.com/api/reference/api-reference.html
5
+
6
+ OpenAPI spec version: 0.0.1
7
+
8
+ Generated by: https://github.com/swagger-api/swagger-codegen.git
9
+ Swagger Codegen version: 2.4.38
10
+ =end
11
+
12
+ require 'date'
13
+
14
+ module CyberSource
15
+ class Ptsv2paymentsPaymentInformation
16
+ attr_accessor :card
17
+
18
+ attr_accessor :tokenized_card
19
+
20
+ attr_accessor :tokenized_payment_method
21
+
22
+ attr_accessor :direct_debit
23
+
24
+ attr_accessor :fluid_data
25
+
26
+ attr_accessor :customer
27
+
28
+ attr_accessor :payment_instrument
29
+
30
+ attr_accessor :instrument_identifier
31
+
32
+ attr_accessor :shipping_address
33
+
34
+ attr_accessor :legacy_token
35
+
36
+ attr_accessor :bank
37
+
38
+ attr_accessor :options
39
+
40
+ attr_accessor :payment_type
41
+
42
+ # Mastercard-defined code that indicates how the account information was obtained. - `00`: Card - `01`: Mobile Network Operator (MNO) controlled removable secure element (SIM or UICC) personalized for use with a mobile phone or smartphone - `02`: Key fob - `03`: Watch using a contactless chip or a fixed (non-removable) secure element not controlled by the MNO - `04`: Mobile tag - `05`: Wristband - `06`: Mobile phone case or sleeve - `07`: Mobile phone or smartphone with a fixed (non-removable) secure element controlled by the MNO,for example, code division multiple access (CDMA) - `08`: Removable secure element not controlled by the MNO, for example, memory card personalized forused with a mobile phone or smartphone - `09`: Mobile Phone or smartphone with a fixed (non-removable) secure element not controlled by the MNO - `10`: MNO controlled removable secure element (SIM or UICC) personalized for use with a tablet or e-book - `11`: Tablet or e-book with a fixed (non-removable) secure element controlled by the MNO - `12`: Removable secure element not controlled by the MNO, for example, memory card personalized foruse with a tablet or e-book - `13`: Tablet or e-book with fixed (non-removable) secure element not controlled by the MNO - `14`: Mobile phone or smartphone with a payment application running in a host processor - `15`: Tablet or e-book with a payment application running in a host processor - `16`: Mobile phone or smartphone with a payment application running in the Trusted ExecutionEnvironment (TEE) of a host processor - `17`: Tablet or e-book with a payment application running in the TEE of a host processor - `18`: Watch with a payment application running in the TEE of a host processor - `19`: Watch with a payment application running in a host processor Values from 20–99 exclusively indicate the form factor only without also indicating the storage technology - `20`: Card - `21`: Phone e.g. Mobile Phone - `22`: Tablet/e-reader - `23`: Watch/Wristband e.g. Watch or wristband, including a fitness band, smart strap, disposable band, watch add-on, and security/ID band - `24`: Sticker - `25`: PC - `26`: Device Peripheral e.g. mobile phone case or sleeve - `27`: Tag e.g. key fob or mobile tag - `28`: Jewelry e.g. ring, bracelet, necklace and cuff links - `29`: Fashion Accessory e.g. handbag, bag charm and glasses - `30`: Garment e.g. dress - `31`: Domestic Appliance e.g refrigerator, washing machine - `32`: Vehicle e.g. vehicle, including vehicle attached devices - `33`: Media/Gaming Device e.g. media or gaming device, including a set top box, media player and television 34–99 are reserved for future form factors. Any value in this range may occur within form factor and transaction data without prior notice. This field is supported only for Mastercard on CyberSource through VisaNet. When initiation channel is not provided via this API field, the value is extracted from EMV tag 9F6E for Mastercard transactions. To enable this feature please call support. #### Used by **Authorization** Optional field.
43
+ attr_accessor :initiation_channel
44
+
45
+ attr_accessor :sepa
46
+
47
+ attr_accessor :e_wallet
48
+
49
+ attr_accessor :payment_account_reference
50
+
51
+ # Attribute mapping from ruby-style variable name to JSON key.
52
+ def self.attribute_map
53
+ {
54
+ :'card' => :'card',
55
+ :'tokenized_card' => :'tokenizedCard',
56
+ :'tokenized_payment_method' => :'tokenizedPaymentMethod',
57
+ :'direct_debit' => :'directDebit',
58
+ :'fluid_data' => :'fluidData',
59
+ :'customer' => :'customer',
60
+ :'payment_instrument' => :'paymentInstrument',
61
+ :'instrument_identifier' => :'instrumentIdentifier',
62
+ :'shipping_address' => :'shippingAddress',
63
+ :'legacy_token' => :'legacyToken',
64
+ :'bank' => :'bank',
65
+ :'options' => :'options',
66
+ :'payment_type' => :'paymentType',
67
+ :'initiation_channel' => :'initiationChannel',
68
+ :'sepa' => :'sepa',
69
+ :'e_wallet' => :'eWallet',
70
+ :'payment_account_reference' => :'paymentAccountReference'
71
+ }
72
+ end
73
+
74
+ # Attribute mapping from JSON key to ruby-style variable name.
75
+ def self.json_map
76
+ {
77
+ :'card' => :'card',
78
+ :'tokenized_card' => :'tokenized_card',
79
+ :'tokenized_payment_method' => :'tokenized_payment_method',
80
+ :'direct_debit' => :'direct_debit',
81
+ :'fluid_data' => :'fluid_data',
82
+ :'customer' => :'customer',
83
+ :'payment_instrument' => :'payment_instrument',
84
+ :'instrument_identifier' => :'instrument_identifier',
85
+ :'shipping_address' => :'shipping_address',
86
+ :'legacy_token' => :'legacy_token',
87
+ :'bank' => :'bank',
88
+ :'options' => :'options',
89
+ :'payment_type' => :'payment_type',
90
+ :'initiation_channel' => :'initiation_channel',
91
+ :'sepa' => :'sepa',
92
+ :'e_wallet' => :'e_wallet',
93
+ :'payment_account_reference' => :'payment_account_reference'
94
+ }
95
+ end
96
+
97
+ # Attribute type mapping.
98
+ def self.swagger_types
99
+ {
100
+ :'card' => :'Ptsv2paymentsPaymentInformationCard',
101
+ :'tokenized_card' => :'Ptsv2paymentsPaymentInformationTokenizedCard',
102
+ :'tokenized_payment_method' => :'Ptsv2paymentsPaymentInformationTokenizedPaymentMethod',
103
+ :'direct_debit' => :'Ptsv2paymentsPaymentInformationDirectDebit',
104
+ :'fluid_data' => :'Ptsv2paymentsPaymentInformationFluidData',
105
+ :'customer' => :'Ptsv2paymentsPaymentInformationCustomer',
106
+ :'payment_instrument' => :'Ptsv2paymentsPaymentInformationPaymentInstrument',
107
+ :'instrument_identifier' => :'Ptsv2paymentsPaymentInformationInstrumentIdentifier',
108
+ :'shipping_address' => :'Ptsv2paymentsPaymentInformationShippingAddress',
109
+ :'legacy_token' => :'Ptsv2paymentsPaymentInformationLegacyToken',
110
+ :'bank' => :'Ptsv2paymentsPaymentInformationBank',
111
+ :'options' => :'Ptsv2paymentsPaymentInformationOptions',
112
+ :'payment_type' => :'Ptsv2paymentsPaymentInformationPaymentType',
113
+ :'initiation_channel' => :'String',
114
+ :'sepa' => :'Ptsv2paymentsPaymentInformationSepa',
115
+ :'e_wallet' => :'Ptsv2paymentsPaymentInformationEWallet',
116
+ :'payment_account_reference' => :'Ptsv2paymentsPaymentInformationPaymentAccountReference'
117
+ }
118
+ end
119
+
120
+ # Initializes the object
121
+ # @param [Hash] attributes Model attributes in the form of hash
122
+ def initialize(attributes = {})
123
+ return unless attributes.is_a?(Hash)
124
+
125
+ # convert string to symbol for hash key
126
+ attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v }
127
+
128
+ if attributes.has_key?(:'card')
129
+ self.card = attributes[:'card']
130
+ end
131
+
132
+ if attributes.has_key?(:'tokenizedCard')
133
+ self.tokenized_card = attributes[:'tokenizedCard']
134
+ end
135
+
136
+ if attributes.has_key?(:'tokenizedPaymentMethod')
137
+ self.tokenized_payment_method = attributes[:'tokenizedPaymentMethod']
138
+ end
139
+
140
+ if attributes.has_key?(:'directDebit')
141
+ self.direct_debit = attributes[:'directDebit']
142
+ end
143
+
144
+ if attributes.has_key?(:'fluidData')
145
+ self.fluid_data = attributes[:'fluidData']
146
+ end
147
+
148
+ if attributes.has_key?(:'customer')
149
+ self.customer = attributes[:'customer']
150
+ end
151
+
152
+ if attributes.has_key?(:'paymentInstrument')
153
+ self.payment_instrument = attributes[:'paymentInstrument']
154
+ end
155
+
156
+ if attributes.has_key?(:'instrumentIdentifier')
157
+ self.instrument_identifier = attributes[:'instrumentIdentifier']
158
+ end
159
+
160
+ if attributes.has_key?(:'shippingAddress')
161
+ self.shipping_address = attributes[:'shippingAddress']
162
+ end
163
+
164
+ if attributes.has_key?(:'legacyToken')
165
+ self.legacy_token = attributes[:'legacyToken']
166
+ end
167
+
168
+ if attributes.has_key?(:'bank')
169
+ self.bank = attributes[:'bank']
170
+ end
171
+
172
+ if attributes.has_key?(:'options')
173
+ self.options = attributes[:'options']
174
+ end
175
+
176
+ if attributes.has_key?(:'paymentType')
177
+ self.payment_type = attributes[:'paymentType']
178
+ end
179
+
180
+ if attributes.has_key?(:'initiationChannel')
181
+ self.initiation_channel = attributes[:'initiationChannel']
182
+ end
183
+
184
+ if attributes.has_key?(:'sepa')
185
+ self.sepa = attributes[:'sepa']
186
+ end
187
+
188
+ if attributes.has_key?(:'eWallet')
189
+ self.e_wallet = attributes[:'eWallet']
190
+ end
191
+
192
+ if attributes.has_key?(:'paymentAccountReference')
193
+ self.payment_account_reference = attributes[:'paymentAccountReference']
194
+ end
195
+ end
196
+
197
+ # Show invalid properties with the reasons. Usually used together with valid?
198
+ # @return Array for valid properties with the reasons
199
+ def list_invalid_properties
200
+ invalid_properties = Array.new
201
+ invalid_properties
202
+ end
203
+
204
+ # Check to see if the all the properties in the model are valid
205
+ # @return true if the model is valid
206
+ def valid?
207
+ true
208
+ end
209
+
210
+ # Custom attribute writer method with validation
211
+ # @param [Object] initiation_channel Value to be assigned
212
+ def initiation_channel=(initiation_channel)
213
+ @initiation_channel = initiation_channel
214
+ end
215
+
216
+ # Checks equality by comparing each attribute.
217
+ # @param [Object] Object to be compared
218
+ def ==(o)
219
+ return true if self.equal?(o)
220
+ self.class == o.class &&
221
+ card == o.card &&
222
+ tokenized_card == o.tokenized_card &&
223
+ tokenized_payment_method == o.tokenized_payment_method &&
224
+ direct_debit == o.direct_debit &&
225
+ fluid_data == o.fluid_data &&
226
+ customer == o.customer &&
227
+ payment_instrument == o.payment_instrument &&
228
+ instrument_identifier == o.instrument_identifier &&
229
+ shipping_address == o.shipping_address &&
230
+ legacy_token == o.legacy_token &&
231
+ bank == o.bank &&
232
+ options == o.options &&
233
+ payment_type == o.payment_type &&
234
+ initiation_channel == o.initiation_channel &&
235
+ sepa == o.sepa &&
236
+ e_wallet == o.e_wallet &&
237
+ payment_account_reference == o.payment_account_reference
238
+ end
239
+
240
+ # @see the `==` method
241
+ # @param [Object] Object to be compared
242
+ def eql?(o)
243
+ self == o
244
+ end
245
+
246
+ # Calculates hash code according to all attributes.
247
+ # @return [Fixnum] Hash code
248
+ def hash
249
+ [card, tokenized_card, tokenized_payment_method, direct_debit, fluid_data, customer, payment_instrument, instrument_identifier, shipping_address, legacy_token, bank, options, payment_type, initiation_channel, sepa, e_wallet, payment_account_reference].hash
250
+ end
251
+
252
+ # Builds the object from hash
253
+ # @param [Hash] attributes Model attributes in the form of hash
254
+ # @return [Object] Returns the model itself
255
+ def build_from_hash(attributes)
256
+ return nil unless attributes.is_a?(Hash)
257
+ self.class.swagger_types.each_pair do |key, type|
258
+ if type =~ /\AArray<(.*)>/i
259
+ # check to ensure the input is an array given that the the attribute
260
+ # is documented as an array but the input is not
261
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
262
+ self.send("#{self.class.json_map[key]}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
263
+ end
264
+ elsif !attributes[self.class.attribute_map[key]].nil?
265
+ self.send("#{self.class.json_map[key]}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
266
+ end # or else data not found in attributes(hash), not an issue as the data can be optional
267
+ end
268
+
269
+ self
270
+ end
271
+
272
+ # Deserializes the data based on type
273
+ # @param string type Data type
274
+ # @param string value Value to be deserialized
275
+ # @return [Object] Deserialized data
276
+ def _deserialize(type, value)
277
+ case type.to_sym
278
+ when :DateTime
279
+ DateTime.parse(value)
280
+ when :Date
281
+ Date.parse(value)
282
+ when :String
283
+ value.to_s
284
+ when :Integer
285
+ value.to_i
286
+ when :Float
287
+ value.to_f
288
+ when :BOOLEAN
289
+ if value.to_s =~ /\A(true|t|yes|y|1)\z/i
290
+ true
291
+ else
292
+ false
293
+ end
294
+ when :Object
295
+ # generic object (usually a Hash), return directly
296
+ value
297
+ when /\AArray<(?<inner_type>.+)>\z/
298
+ inner_type = Regexp.last_match[:inner_type]
299
+ value.map { |v| _deserialize(inner_type, v) }
300
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
301
+ k_type = Regexp.last_match[:k_type]
302
+ v_type = Regexp.last_match[:v_type]
303
+ {}.tap do |hash|
304
+ value.each do |k, v|
305
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
306
+ end
307
+ end
308
+ else # model
309
+ temp_model = CyberSource.const_get(type).new
310
+ temp_model.build_from_hash(value)
311
+ end
312
+ end
313
+
314
+ # Returns the string representation of the object
315
+ # @return [String] String presentation of the object
316
+ def to_s
317
+ to_hash.to_s
318
+ end
319
+
320
+ # to_body is an alias to to_hash (backward compatibility)
321
+ # @return [Hash] Returns the object in the form of hash
322
+ def to_body
323
+ to_hash
324
+ end
325
+
326
+ # Returns the object in the form of hash
327
+ # @return [Hash] Returns the object in the form of hash
328
+ def to_hash
329
+ hash = {}
330
+ self.class.attribute_map.each_pair do |attr, param|
331
+ value = self.send(attr)
332
+ next if value.nil?
333
+ hash[param] = _to_hash(value)
334
+ end
335
+ hash
336
+ end
337
+
338
+ # Outputs non-array value in the form of hash
339
+ # For object, use to_hash. Otherwise, just return the value
340
+ # @param [Object] value Any valid value
341
+ # @return [Hash] Returns the value in the form of hash
342
+ def _to_hash(value)
343
+ if value.is_a?(Array)
344
+ value.compact.map { |v| _to_hash(v) }
345
+ elsif value.is_a?(Hash)
346
+ {}.tap do |hash|
347
+ value.each { |k, v| hash[k] = _to_hash(v) }
348
+ end
349
+ elsif value.respond_to? :to_hash
350
+ value.to_hash
351
+ else
352
+ value
353
+ end
354
+ end
355
+ end
356
+ end