genesis_ruby 0.1.7 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -0
  3. data/Gemfile.lock +45 -39
  4. data/README.md +246 -0
  5. data/VERSION +1 -1
  6. data/lib/genesis_ruby/api/constants/transactions/parameters/cash_payments/company_types.rb +45 -0
  7. data/lib/genesis_ruby/api/constants/transactions/parameters/cash_payments/genders.rb +27 -0
  8. data/lib/genesis_ruby/api/constants/transactions/parameters/cash_payments/marital_statuses.rb +39 -0
  9. data/lib/genesis_ruby/api/constants/transactions/parameters/mobile/apple_pay/payment_subtypes.rb +29 -0
  10. data/lib/genesis_ruby/api/constants/transactions/parameters/mobile/google_pay/payment_subtypes.rb +29 -0
  11. data/lib/genesis_ruby/api/constants/transactions/parameters/online_banking/bank_code_currencies.rb +128 -0
  12. data/lib/genesis_ruby/api/constants/transactions/parameters/online_banking/bank_codes.rb +600 -0
  13. data/lib/genesis_ruby/api/constants/transactions/parameters/online_banking/payment_types.rb +36 -0
  14. data/lib/genesis_ruby/api/constants/transactions/parameters/wallets/pay_pal/payment_types.rb +31 -0
  15. data/lib/genesis_ruby/api/mixins/requests/attribute_validation.rb +138 -4
  16. data/lib/genesis_ruby/api/mixins/requests/birth_date_attributes.rb +22 -0
  17. data/lib/genesis_ruby/api/mixins/requests/customer_address/billing_info_attributes.rb +11 -10
  18. data/lib/genesis_ruby/api/mixins/requests/customer_address/customer_info_attributes.rb +1 -1
  19. data/lib/genesis_ruby/api/mixins/requests/customer_address/shipping_info_attributes.rb +11 -10
  20. data/lib/genesis_ruby/api/mixins/requests/financial/cards/credit_card_attributes.rb +7 -0
  21. data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/managed_recurring_attributes.rb +21 -20
  22. data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/managed_recurring_indian_card_attributes.rb +15 -39
  23. data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/recurring_type_attributes.rb +15 -9
  24. data/lib/genesis_ruby/api/mixins/requests/financial/cards/tokenization_attributes.rb +9 -0
  25. data/lib/genesis_ruby/api/mixins/requests/financial/consumer_identifier_attributes.rb +26 -0
  26. data/lib/genesis_ruby/api/mixins/requests/financial/mobile/apple_pay_token_attributes.rb +51 -0
  27. data/lib/genesis_ruby/api/mixins/requests/financial/mobile/google_pay_token_attributes.rb +50 -0
  28. data/lib/genesis_ruby/api/mixins/requests/financial/online_banking_payments/virtual_payment_address_attributes.rb +27 -0
  29. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/browser.rb +11 -22
  30. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/card_holder_account.rb +81 -49
  31. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/common_attributes.rb +23 -0
  32. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/control.rb +13 -26
  33. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/merchant_risk.rb +21 -58
  34. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/purchase.rb +8 -11
  35. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/sdk.rb +10 -10
  36. data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/wpf_attributes.rb +9 -0
  37. data/lib/genesis_ruby/api/request.rb +4 -2
  38. data/lib/genesis_ruby/api/requests/base/financials/credit_card.rb +6 -4
  39. data/lib/genesis_ruby/api/requests/base/financials/south_american_payments.rb +59 -0
  40. data/lib/genesis_ruby/api/requests/base/reference.rb +3 -2
  41. data/lib/genesis_ruby/api/requests/financial/cards/argencard.rb +26 -0
  42. data/lib/genesis_ruby/api/requests/financial/cards/aura.rb +26 -0
  43. data/lib/genesis_ruby/api/requests/financial/cards/authorize.rb +10 -2
  44. data/lib/genesis_ruby/api/requests/financial/cards/authorize3d.rb +19 -10
  45. data/lib/genesis_ruby/api/requests/financial/cards/cabal.rb +26 -0
  46. data/lib/genesis_ruby/api/requests/financial/cards/cencosud.rb +26 -0
  47. data/lib/genesis_ruby/api/requests/financial/cards/elo.rb +26 -0
  48. data/lib/genesis_ruby/api/requests/financial/cards/naranja.rb +26 -0
  49. data/lib/genesis_ruby/api/requests/financial/cards/nativa.rb +26 -0
  50. data/lib/genesis_ruby/api/requests/financial/cards/sale.rb +10 -2
  51. data/lib/genesis_ruby/api/requests/financial/cards/sale3d.rb +19 -10
  52. data/lib/genesis_ruby/api/requests/financial/cards/tarjeta_shopping.rb +26 -0
  53. data/lib/genesis_ruby/api/requests/financial/cards/threeds/v2/method_continue.rb +2 -2
  54. data/lib/genesis_ruby/api/requests/financial/cash_payments/baloto.rb +26 -0
  55. data/lib/genesis_ruby/api/requests/financial/cash_payments/banco_de_occidente.rb +26 -0
  56. data/lib/genesis_ruby/api/requests/financial/cash_payments/boleto.rb +26 -0
  57. data/lib/genesis_ruby/api/requests/financial/cash_payments/efecty.rb +26 -0
  58. data/lib/genesis_ruby/api/requests/financial/cash_payments/oxxo.rb +26 -0
  59. data/lib/genesis_ruby/api/requests/financial/cash_payments/pago_facil.rb +26 -0
  60. data/lib/genesis_ruby/api/requests/financial/cash_payments/pix.rb +92 -0
  61. data/lib/genesis_ruby/api/requests/financial/cash_payments/redpagos.rb +26 -0
  62. data/lib/genesis_ruby/api/requests/financial/mobile/apple_pay.rb +91 -0
  63. data/lib/genesis_ruby/api/requests/financial/mobile/google_pay.rb +108 -0
  64. data/lib/genesis_ruby/api/requests/financial/online_banking_payments/bancomer.rb +33 -0
  65. data/lib/genesis_ruby/api/requests/financial/online_banking_payments/bradesco.rb +33 -0
  66. data/lib/genesis_ruby/api/requests/financial/online_banking_payments/davivienda.rb +34 -0
  67. data/lib/genesis_ruby/api/requests/financial/online_banking_payments/itau.rb +33 -0
  68. data/lib/genesis_ruby/api/requests/financial/online_banking_payments/online_banking/pay_in.rb +157 -0
  69. data/lib/genesis_ruby/api/requests/financial/online_banking_payments/pse.rb +33 -0
  70. data/lib/genesis_ruby/api/requests/financial/online_banking_payments/rapi_pago.rb +33 -0
  71. data/lib/genesis_ruby/api/requests/financial/online_banking_payments/santander.rb +33 -0
  72. data/lib/genesis_ruby/api/requests/financial/online_banking_payments/webpay.rb +33 -0
  73. data/lib/genesis_ruby/api/requests/financial/void.rb +2 -2
  74. data/lib/genesis_ruby/api/requests/financial/wallets/pay_pay.rb +65 -0
  75. data/lib/genesis_ruby/api/requests/non_financial/reconcile/date_range.rb +2 -2
  76. data/lib/genesis_ruby/api/requests/wpf/create.rb +11 -15
  77. data/lib/genesis_ruby/api/requests/wpf/reconcile.rb +2 -2
  78. data/lib/genesis_ruby/dependencies.rb +1 -0
  79. data/lib/genesis_ruby/utils/common.rb +26 -0
  80. data/lib/genesis_ruby/version.rb +1 -1
  81. metadata +46 -3
@@ -11,10 +11,10 @@ module GenesisRuby
11
11
  # Mixin ThreedsV2 Browser Attributes
12
12
  module Browser
13
13
 
14
- attr_reader :threeds_v2_browser_accept_header, :threeds_v2_browser_java_enabled,
15
- :threeds_v2_browser_language, :threeds_v2_browser_color_depth,
14
+ attr_reader :threeds_v2_browser_accept_header, :threeds_v2_browser_language,
16
15
  :threeds_v2_browser_screen_height, :threeds_v2_browser_screen_width,
17
16
  :threeds_v2_browser_time_zone_offset, :threeds_v2_browser_user_agent
17
+ attr_accessor :threeds_v2_browser_color_depth, :threeds_v2_browser_java_enabled
18
18
 
19
19
  # Exact content of the HTTP accept headers as sent to the 3DS Requester from the Cardholder browser
20
20
  def threeds_v2_browser_accept_header=(value)
@@ -26,17 +26,6 @@ module GenesisRuby
26
26
  limited_string attribute: __method__, value: value.to_s.empty? ? nil : value.to_s, max: 8
27
27
  end
28
28
 
29
- # Value representing the bit depth of the colour palette for displaying images, in bits per pixel
30
- def threeds_v2_browser_color_depth=(value)
31
- allowed_depths = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
32
- Browser::ColorDepths.all
33
-
34
- allowed_options attribute: __method__,
35
- allowed: allowed_depths,
36
- value: value.to_s.empty? ? nil : value.to_i,
37
- allow_empty: true
38
- end
39
-
40
29
  # Total height of the Cardholder's screen in pixels
41
30
  def threeds_v2_browser_screen_height=(value)
42
31
  parse_int attribute: __method__, value: value, allow_empty: true
@@ -47,15 +36,6 @@ module GenesisRuby
47
36
  parse_int attribute: __method__, value: value, allow_empty: true
48
37
  end
49
38
 
50
- # Boolean that represents the ability of the cardholder browser to execute Java
51
- def threeds_v2_browser_java_enabled=(value)
52
- allowed_options attribute: __method__,
53
- allowed: [true, false],
54
- value: value,
55
- allow_empty: true,
56
- error_message: 'Accepts only boolean values'
57
- end
58
-
59
39
  # Time difference between UTC time and the Cardholder browser local time, in minutes
60
40
  def threeds_v2_browser_time_zone_offset=(value)
61
41
  limited_string attribute: __method__, value: value.to_s.empty? ? nil : value.to_s, max: 5
@@ -68,6 +48,15 @@ module GenesisRuby
68
48
 
69
49
  protected
70
50
 
51
+ # Browser filed validations structure
52
+ def threeds_browser_field_validations
53
+ {
54
+ threeds_v2_browser_color_depth: Api::Constants::Transactions::Parameters::Threeds::Version2::
55
+ Browser::ColorDepths.all,
56
+ threeds_v2_browser_java_enabled: [true, false]
57
+ }
58
+ end
59
+
71
60
  # Request Browser Attributes structure
72
61
  def browser_attributes
73
62
  {
@@ -17,15 +17,15 @@ module GenesisRuby
17
17
  # Mixin ThreedsV2 Card holder Account
18
18
  module CardHolderAccount # rubocop:disable Metrics/ModuleLength
19
19
 
20
- attr_reader :threeds_v2_card_holder_account_update_indicator,
21
- :threeds_v2_card_holder_account_password_change_indicator,
22
- :threeds_v2_card_holder_account_shipping_address_usage_indicator,
23
- :threeds_v2_card_holder_account_transactions_activity_last24_hours,
20
+ attr_reader :threeds_v2_card_holder_account_transactions_activity_last24_hours,
24
21
  :threeds_v2_card_holder_account_transactions_activity_previous_year,
25
22
  :threeds_v2_card_holder_account_provision_attempts_last24_hours,
26
- :threeds_v2_card_holder_account_purchases_count_last6_months,
27
- :threeds_v2_card_holder_account_suspicious_activity_indicator,
28
- :threeds_v2_card_holder_account_registration_indicator
23
+ :threeds_v2_card_holder_account_purchases_count_last6_months
24
+ attr_accessor :threeds_v2_card_holder_account_update_indicator,
25
+ :threeds_v2_card_holder_account_password_change_indicator,
26
+ :threeds_v2_card_holder_account_shipping_address_usage_indicator,
27
+ :threeds_v2_card_holder_account_suspicious_activity_indicator,
28
+ :threeds_v2_card_holder_account_registration_indicator
29
29
 
30
30
  # Date that the cardholder opened the account with the 3DS Requester.
31
31
  def threeds_v2_card_holder_account_creation_date
@@ -39,14 +39,6 @@ module GenesisRuby
39
39
  parse_date attribute: __method__, value: value, allow_empty: true
40
40
  end
41
41
 
42
- # Length of time since the cardholder’s account information with the 3DS Requester was last changed
43
- def threeds_v2_card_holder_account_update_indicator=(value)
44
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
45
- CardHolderAccount::UpdateIndicators.all
46
-
47
- allowed_options attribute: __method__, allowed: allowed_indicators, value: value, allow_empty: true
48
- end
49
-
50
42
  # Date that the cardholder’s account with the 3DS Requester was last changed
51
43
  def threeds_v2_card_holder_account_last_change_date
52
44
  @threeds_v2_card_holder_account_last_change_date&.strftime(
@@ -59,15 +51,6 @@ module GenesisRuby
59
51
  parse_date attribute: __method__, value: value, allow_empty: true
60
52
  end
61
53
 
62
- # Length of time since the cardholder account with the 3DS Requester had a password change or
63
- # account reset
64
- def threeds_v2_card_holder_account_password_change_indicator=(value)
65
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
66
- CardHolderAccount::PasswordChangeIndicators.all
67
-
68
- allowed_options attribute: __method__, allowed: allowed_indicators, value: value, allow_empty: true
69
- end
70
-
71
54
  # Date that cardholder’s account with the 3DS Requester had a password change or account reset
72
55
  def threeds_v2_card_holder_account_password_change_date
73
56
  @threeds_v2_card_holder_account_password_change_date&.strftime(
@@ -80,14 +63,6 @@ module GenesisRuby
80
63
  parse_date attribute: __method__, value: value, allow_empty: true
81
64
  end
82
65
 
83
- # Indicates when the shipping address used for this transaction was first used with the 3DS Requester
84
- def threeds_v2_card_holder_account_shipping_address_usage_indicator=(value)
85
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
86
- CardHolderAccount::ShippingAddressUsageIndicators.all
87
-
88
- allowed_options attribute: __method__, allowed: allowed_indicators, value: value, allow_empty: true
89
- end
90
-
91
66
  # Date when the shipping address used for this transaction was first used with the 3DS Requester
92
67
  def threeds_v2_card_holder_account_shipping_address_date_first_used
93
68
  @threeds_v2_card_holder_account_shipping_address_date_first_used&.strftime(
@@ -120,23 +95,6 @@ module GenesisRuby
120
95
  parse_int attribute: __method__, value: value, allow_empty: true
121
96
  end
122
97
 
123
- # Indicates whether the 3DS Requester has experienced suspicious activity (including previous fraud)
124
- def threeds_v2_card_holder_account_suspicious_activity_indicator=(value)
125
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
126
- CardHolderAccount::SuspiciousActivityIndicators.all
127
-
128
- allowed_options attribute: __method__, allowed: allowed_indicators, value: value, allow_empty: true
129
- end
130
-
131
- # Indicates the length of time that the payment account was enrolled in the
132
- # cardholder’s account with the 3DS Requester
133
- def threeds_v2_card_holder_account_registration_indicator=(value)
134
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
135
- CardHolderAccount::RegistrationIndicators.all
136
-
137
- allowed_options attribute: __method__, allowed: allowed_indicators, value: value, allow_empty: true
138
- end
139
-
140
98
  # Date that the cardholder opened the account with the 3DS Requester.
141
99
  def threeds_v2_card_holder_account_registration_date
142
100
  @threeds_v2_card_holder_account_registration_date&.strftime(
@@ -151,6 +109,33 @@ module GenesisRuby
151
109
 
152
110
  protected
153
111
 
112
+ # Card Holder field validations structure
113
+ def threeds_card_holder_field_validations # rubocop:disable Metrics/MethodLength
114
+ {
115
+ threeds_v2_card_holder_account_update_indicator: Api::Constants::Transactions::
116
+ Parameters::Threeds::Version2::CardHolderAccount::UpdateIndicators.all,
117
+ threeds_v2_card_holder_account_password_change_indicator: Api::Constants::Transactions::
118
+ Parameters::Threeds::Version2::CardHolderAccount::PasswordChangeIndicators.all,
119
+ threeds_v2_card_holder_account_shipping_address_usage_indicator: Api::Constants::Transactions::
120
+ Parameters::Threeds::Version2::CardHolderAccount::ShippingAddressUsageIndicators.all,
121
+ threeds_v2_card_holder_account_suspicious_activity_indicator: Api::Constants::Transactions::
122
+ Parameters::Threeds::Version2::CardHolderAccount::SuspiciousActivityIndicators.all,
123
+ threeds_v2_card_holder_account_registration_indicator: Api::Constants::Transactions::
124
+ Parameters::Threeds::Version2::CardHolderAccount::RegistrationIndicators.all
125
+ }
126
+ end
127
+
128
+ def validate_threeds_card_holder_dates
129
+ today = DateTime.now
130
+ message = 'must be a valid date in the past.'
131
+
132
+ validate_creation_date today, message
133
+ validate_last_change_date today, message
134
+ validate_password_change_date today, message
135
+ validate_shipping_address_date_first_used today, message
136
+ validate_registration_date today, message
137
+ end
138
+
154
139
  # Request CardHolder Account Attributes structure
155
140
  # rubocop:disable Layout/LineLength, Metrics/MethodLength
156
141
  def card_holder_account_attributes
@@ -173,6 +158,53 @@ module GenesisRuby
173
158
  end
174
159
  # rubocop:enable Layout/LineLength, Metrics/MethodLength
175
160
 
161
+ private
162
+
163
+ # Creation Date Validation
164
+ def validate_creation_date(less_than, message)
165
+ return unless @threeds_v2_card_holder_account_creation_date.is_a? DateTime
166
+
167
+ return if @threeds_v2_card_holder_account_creation_date < less_than
168
+
169
+ raise ParameterError, "Card Holder Account Creation Date #{message}"
170
+ end
171
+
172
+ # Last Change Date validation
173
+ def validate_last_change_date(less_than, message)
174
+ return unless @threeds_v2_card_holder_account_last_change_date.is_a? DateTime
175
+
176
+ return if @threeds_v2_card_holder_account_last_change_date < less_than
177
+
178
+ raise ParameterError, "Card Holder Account Last Change Date #{message}"
179
+ end
180
+
181
+ # Password Change Date validation
182
+ def validate_password_change_date(less_than, message)
183
+ return unless @threeds_v2_card_holder_account_password_change_date.is_a? DateTime
184
+
185
+ return if @threeds_v2_card_holder_account_password_change_date < less_than
186
+
187
+ raise ParameterError, "Card Holder Account Password Change Date #{message}"
188
+ end
189
+
190
+ # Shipping Address Date First Used validation
191
+ def validate_shipping_address_date_first_used(less_than, message)
192
+ return unless @threeds_v2_card_holder_account_shipping_address_date_first_used.is_a? DateTime
193
+
194
+ return if @threeds_v2_card_holder_account_shipping_address_date_first_used < less_than
195
+
196
+ raise ParameterError, "Card Holder Account Shipping Address Date First Used #{message}"
197
+ end
198
+
199
+ # Registration Date validations
200
+ def validate_registration_date(less_than, message)
201
+ return unless @threeds_v2_card_holder_account_registration_date.is_a? DateTime
202
+
203
+ return if @threeds_v2_card_holder_account_registration_date < less_than
204
+
205
+ raise ParameterError, "Card Holder Account Registration Date #{message}"
206
+ end
207
+
176
208
  end
177
209
  end
178
210
  end
@@ -28,6 +28,29 @@ module GenesisRuby
28
28
 
29
29
  protected
30
30
 
31
+ # Threeds Common Attribute Field Validation
32
+ def threeds_field_validations
33
+ {}.merge threeds_control_field_validations, threeds_purchase_field_validations,
34
+ threeds_merchant_risk_field_validations, threeds_card_holder_field_validations,
35
+ threeds_browser_field_validations, threeds_sdk_field_validations
36
+ end
37
+
38
+ def threeds_field_conditional_validations # rubocop:disable Metrics/MethodLength
39
+ {
40
+ threeds_v2_control_device_type: Hash[
41
+ Api::Constants::Transactions::Parameters::Threeds::Version2::Control::DeviceTypes::BROWSER,
42
+ %i[threeds_v2_browser_accept_header threeds_v2_browser_java_enabled threeds_v2_browser_language
43
+ threeds_v2_browser_color_depth threeds_v2_browser_screen_height
44
+ threeds_v2_browser_screen_width threeds_v2_browser_time_zone_offset
45
+ threeds_v2_browser_user_agent],
46
+ Api::Constants::Transactions::Parameters::Threeds::Version2::Control::DeviceTypes::APPLICATION,
47
+ %i[threeds_v2_sdk_interface threeds_v2_sdk_ui_types threeds_v2_sdk_application_id
48
+ threeds_v2_sdk_encrypted_data threeds_v2_sdk_ephemeral_public_key_pair
49
+ threeds_v2_sdk_max_timeout threeds_v2_sdk_reference_number]
50
+ ]
51
+ }
52
+ end
53
+
31
54
  # Threeds V2 Web Payment Form Attributes
32
55
  def threeds_v2_common_attributes_structure
33
56
  {
@@ -12,36 +12,23 @@ module GenesisRuby
12
12
  # Mixin ThreedsV2 Control
13
13
  module Control
14
14
 
15
- attr_reader :threeds_v2_control_device_type, :threeds_v2_control_challenge_window_size,
16
- :threeds_v2_control_challenge_indicator
15
+ attr_accessor :threeds_v2_control_device_type, :threeds_v2_control_challenge_window_size,
16
+ :threeds_v2_control_challenge_indicator
17
17
 
18
- # Identifies the device channel of the consumer
19
- def threeds_v2_control_device_type=(value)
20
- allowed_types = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::Control::
21
- DeviceTypes.all
22
-
23
- allowed_options attribute: __method__, allowed: allowed_types, value: value, allow_empty: true
24
- end
25
-
26
- # Identifies the size of the challenge window for the consumer
27
- def threeds_v2_control_challenge_window_size=(value)
28
- allowed_sizes = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::Control::
29
- ChallengeWindowSizes.all
30
-
31
- allowed_options attribute: __method__, allowed: allowed_sizes, value: value, allow_empty: true
32
- end
33
-
34
- # The value has weight and might impact the decision whether a challenge will be required for the
35
- # transaction or not
36
- def threeds_v2_control_challenge_indicator=(value)
37
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
38
- Control::ChallengeIndicators.all
18
+ protected
39
19
 
40
- allowed_options attribute: __method__, allowed: allowed_indicators, value: value, allow_empty: true
20
+ # Control field validations structure
21
+ def threeds_control_field_validations
22
+ {
23
+ threeds_v2_control_device_type: Api::Constants::Transactions::Parameters::Threeds::
24
+ Version2::Control::DeviceTypes.all,
25
+ threeds_v2_control_challenge_window_size: Api::Constants::Transactions::Parameters::Threeds::
26
+ Version2::Control::ChallengeWindowSizes.all,
27
+ threeds_v2_control_challenge_indicator: Api::Constants::Transactions::Parameters::Threeds::
28
+ Version2::Control::ChallengeIndicators.all
29
+ }
41
30
  end
42
31
 
43
- protected
44
-
45
32
  # Request Control Attributes structure
46
33
  def control_attributes
47
34
  {
@@ -13,55 +13,12 @@ module GenesisRuby
13
13
  # Mixin ThreedsV2 MerchantRisk
14
14
  module MerchantRisk
15
15
 
16
- attr_reader :threeds_v2_merchant_risk_shipping_indicator, :threeds_v2_merchant_risk_delivery_timeframe,
17
- :threeds_v2_merchant_risk_reorder_items_indicator,
18
- :threeds_v2_merchant_risk_pre_order_purchase_indicator, :threeds_v2_merchant_risk_gift_card,
19
- :threeds_v2_merchant_risk_gift_card_count
20
-
21
- # Indicator code that most accurately describes the shipping method
22
- def threeds_v2_merchant_risk_shipping_indicator=(value)
23
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
24
- MerchantRisk::ShippingIndicators.all
25
-
26
- allowed_options attribute: __method__,
27
- allowed: allowed_indicators,
28
- value: value.to_s,
29
- allow_empty: true
30
- end
31
-
32
- # Indicates the merchandise delivery timeframe
33
- def threeds_v2_merchant_risk_delivery_timeframe=(value)
34
- allowed_timeframes = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
35
- MerchantRisk::DeliveryTimeframes.all
36
-
37
- allowed_options attribute: __method__,
38
- allowed: allowed_timeframes,
39
- value: value.to_s,
40
- allow_empty: true
41
- end
42
-
43
- # Indicates whether the cardholder is reordering previously purchased merchandise
44
- def threeds_v2_merchant_risk_reorder_items_indicator=(value)
45
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
46
- MerchantRisk::ReorderItemIndicators.all
47
-
48
- allowed_options attribute: __method__,
49
- allowed: allowed_indicators,
50
- value: value.to_s,
51
- allow_empty: true
52
- end
53
-
54
- # Indicates whether cardholder is placing an order for merchandise with a future-availability
55
- # or release date
56
- def threeds_v2_merchant_risk_pre_order_purchase_indicator=(value)
57
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
58
- MerchantRisk::PreOrderPurchaseIndicators.all
59
-
60
- allowed_options attribute: __method__,
61
- allowed: allowed_indicators,
62
- value: value.to_s,
63
- allow_empty: true
64
- end
16
+ attr_reader :threeds_v2_merchant_risk_gift_card_count
17
+ attr_accessor :threeds_v2_merchant_risk_shipping_indicator,
18
+ :threeds_v2_merchant_risk_delivery_timeframe,
19
+ :threeds_v2_merchant_risk_reorder_items_indicator,
20
+ :threeds_v2_merchant_risk_pre_order_purchase_indicator,
21
+ :threeds_v2_merchant_risk_gift_card
65
22
 
66
23
  # For a pre-ordered purchase, the expected date that the merchandise will be available
67
24
  def threeds_v2_merchant_risk_pre_order_date
@@ -75,15 +32,6 @@ module GenesisRuby
75
32
  parse_date attribute: __method__, value: value, allow_empty: true
76
33
  end
77
34
 
78
- # Prepaid or gift card purchase
79
- def threeds_v2_merchant_risk_gift_card=(value)
80
- allowed_options attribute: __method__,
81
- allowed: [true, false],
82
- value: value,
83
- allow_empty: true,
84
- error_message: 'Accepts only boolean values'
85
- end
86
-
87
35
  # For prepaid or gift card purchase, total count of individual prepaid or gift cards/codes purchased
88
36
  def threeds_v2_merchant_risk_gift_card_count=(value)
89
37
  parse_int attribute: __method__, value: value, allow_empty: true
@@ -91,6 +39,21 @@ module GenesisRuby
91
39
 
92
40
  protected
93
41
 
42
+ # Merchant Risk field validations structure
43
+ def threeds_merchant_risk_field_validations # rubocop:disable Metrics/MethodLength
44
+ {
45
+ threeds_v2_merchant_risk_shipping_indicator: Api::Constants::Transactions::Parameters::
46
+ Threeds::Version2::MerchantRisk::ShippingIndicators.all,
47
+ threeds_v2_merchant_risk_delivery_timeframe: Api::Constants::Transactions::Parameters::
48
+ Threeds::Version2::MerchantRisk::DeliveryTimeframes.all,
49
+ threeds_v2_merchant_risk_reorder_items_indicator: Api::Constants::Transactions::Parameters::
50
+ Threeds::Version2::MerchantRisk::ReorderItemIndicators.all,
51
+ threeds_v2_merchant_risk_pre_order_purchase_indicator: Api::Constants::Transactions::Parameters::
52
+ Threeds::Version2::MerchantRisk::PreOrderPurchaseIndicators.all,
53
+ threeds_v2_merchant_risk_gift_card: [true, false]
54
+ }
55
+ end
56
+
94
57
  # Request Merchant Risk Attributes structure
95
58
  def merchant_risk_attributes
96
59
  {
@@ -10,21 +10,18 @@ module GenesisRuby
10
10
  # Mixin ThreedsV2 Purchase
11
11
  module Purchase
12
12
 
13
- attr_reader :threeds_v2_purchase_category
13
+ attr_accessor :threeds_v2_purchase_category
14
14
 
15
- # Identifies the type of transaction being authenticated
16
- def threeds_v2_purchase_category=(value)
17
- allowed_indicators = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::
18
- Purchase::Categories.all
15
+ protected
19
16
 
20
- allowed_options attribute: __method__,
21
- allowed: allowed_indicators,
22
- value: value.to_s,
23
- allow_empty: true
17
+ # Purchase field validations structure
18
+ def threeds_purchase_field_validations
19
+ {
20
+ threeds_v2_purchase_category: Api::Constants::Transactions::Parameters::Threeds::Version2::
21
+ Purchase::Categories.all
22
+ }
24
23
  end
25
24
 
26
- protected
27
-
28
25
  # Request Purchase Attributes structure
29
26
  def purchase_attributes
30
27
  {
@@ -12,18 +12,10 @@ module GenesisRuby
12
12
  # Mixin ThreedsV2 SDK
13
13
  module Sdk
14
14
 
15
- attr_reader :threeds_v2_sdk_interface, :threeds_v2_sdk_application_id, :threeds_v2_sdk_encrypted_data,
15
+ attr_reader :threeds_v2_sdk_application_id, :threeds_v2_sdk_encrypted_data,
16
16
  :threeds_v2_sdk_ephemeral_public_key_pair, :threeds_v2_sdk_max_timeout,
17
17
  :threeds_v2_sdk_reference_number
18
-
19
- # SDK Interface types that the device of the consumer supports for displaying specific challenge
20
- # interfaces within the SDK
21
- def threeds_v2_sdk_interface=(value)
22
- allowed_interfaces = GenesisRuby::Api::Constants::Transactions::Parameters::Threeds::Version2::Sdk::
23
- Interfaces.all
24
-
25
- allowed_options attribute: __method__, allowed: allowed_interfaces, value: value, allow_empty: true
26
- end
18
+ attr_accessor :threeds_v2_sdk_interface
27
19
 
28
20
  # UI type that the device of the consumer supports for displaying specific challenge interface
29
21
  def threeds_v2_sdk_ui_types
@@ -84,6 +76,14 @@ module GenesisRuby
84
76
 
85
77
  protected
86
78
 
79
+ # SDK field validations
80
+ def threeds_sdk_field_validations
81
+ {
82
+ threeds_v2_sdk_interface: Api::Constants::Transactions::Parameters::Threeds::Version2::Sdk::
83
+ Interfaces.all
84
+ }
85
+ end
86
+
87
87
  # Request SDK Attributes structure
88
88
  def sdk_attributes
89
89
  {
@@ -32,6 +32,15 @@ module GenesisRuby
32
32
 
33
33
  protected
34
34
 
35
+ # Threeds Common Attribute Field Validation
36
+ def threeds_field_validations
37
+ control_validations = threeds_control_field_validations
38
+ control_validations.delete(:threeds_v2_control_device_type)
39
+
40
+ {}.merge control_validations, threeds_purchase_field_validations,
41
+ threeds_merchant_risk_field_validations, threeds_card_holder_field_validations
42
+ end
43
+
35
44
  # Request Control Attributes structure available for the Web Payment Form
36
45
  def control_attributes
37
46
  {
@@ -27,7 +27,7 @@ module GenesisRuby
27
27
  @api_config = GenesisRuby::Utils::Options::ApiConfig.new
28
28
 
29
29
  init_configuration
30
- init_required_fields
30
+ init_field_validations
31
31
  end
32
32
 
33
33
  # Generate the Request Document based on the builder_interface
@@ -50,7 +50,7 @@ module GenesisRuby
50
50
  attr_accessor :tree_structure
51
51
 
52
52
  # Required fields for the request
53
- def init_required_fields; end
53
+ def init_field_validations; end
54
54
 
55
55
  # Request Configuration
56
56
  def init_configuration; end
@@ -146,6 +146,8 @@ module GenesisRuby
146
146
 
147
147
  # Transform amount to minor currency format
148
148
  def transform_amount(amount, currency)
149
+ return amount if amount.nil? || !GenesisRuby::Api::Constants::Currencies::Iso4217.valid?(currency)
150
+
149
151
  GenesisRuby::Utils::MoneyFormat.amount_to_exponent amount, currency
150
152
  end
151
153
 
@@ -11,12 +11,14 @@ module GenesisRuby
11
11
  include Mixins::Requests::Financial::Cards::TokenizationAttributes
12
12
  include Mixins::Requests::Financial::PaymentAttributes
13
13
 
14
- def init_required_fields
15
- self.required_fields = %i[transaction_id amount currency]
16
- end
17
-
18
14
  protected
19
15
 
16
+ # Request Field validations
17
+ def init_field_validations
18
+ required_fields.push *%i[transaction_id amount currency]
19
+ field_values.merge! currency: Api::Constants::Currencies::Iso4217.all.map(&:upcase)
20
+ end
21
+
20
22
  # Credit Card attributes
21
23
  def payment_transaction_structure
22
24
  payment_attributes_structure.merge(
@@ -0,0 +1,59 @@
1
+ module GenesisRuby
2
+ module Api
3
+ module Requests
4
+ module Base
5
+ module Financials
6
+ # South American Payments base class
7
+ class SouthAmericanPayments < Base::Financial
8
+
9
+ include Api::Mixins::Requests::AddressInfoAttributes
10
+ include Api::Mixins::Requests::Financial::AsyncAttributes
11
+ include Api::Mixins::Requests::BirthDateAttributes
12
+ include Api::Mixins::Requests::Financial::PaymentAttributes
13
+ include Api::Mixins::Requests::Financial::ConsumerIdentifierAttributes
14
+
15
+ # Billing Country custom accessor
16
+ def billing_country
17
+ return nil unless @billing_country
18
+
19
+ @billing_country.to_s.upcase
20
+ end
21
+
22
+ protected
23
+
24
+ # Defines allowed billing countries
25
+ def allowed_billing_countries
26
+ raise NoMethodError, 'South American Payment requests require definition of allowed billing countries'
27
+ end
28
+
29
+ def init_field_validations
30
+ super
31
+
32
+ required_fields.push *%i[transaction_id return_success_url return_failure_url amount currency
33
+ consumer_reference national_id customer_email billing_country]
34
+
35
+ field_values.merge! billing_country: allowed_billing_countries
36
+ end
37
+
38
+ # South American payments
39
+ def payment_transaction_structure # rubocop:disable Metrics/MethodLength
40
+ payment_attributes_structure.merge(
41
+ {
42
+ return_success_url: return_success_url,
43
+ return_failure_url: return_failure_url,
44
+ consumer_reference: consumer_reference,
45
+ national_id: national_id,
46
+ birth_date: birth_date,
47
+ customer_email: customer_email,
48
+ billing_address: billing_address_parameters_structure,
49
+ shipping_address: shipping_address_parameters_structure
50
+ }
51
+ )
52
+ end
53
+
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -10,8 +10,9 @@ module GenesisRuby
10
10
 
11
11
  protected
12
12
 
13
- def init_required_fields
14
- self.required_fields = %i[transaction_id reference_id amount currency]
13
+ def init_field_validations
14
+ required_fields.push *%i[transaction_id reference_id amount currency]
15
+ field_values.merge! currency: Api::Constants::Currencies::Iso4217.all.map(&:upcase)
15
16
  end
16
17
 
17
18
  # Reference transaction request structure
@@ -0,0 +1,26 @@
1
+ module GenesisRuby
2
+ module Api
3
+ module Requests
4
+ module Financial
5
+ module Cards
6
+ # Argencard is a debit or credit card used in Argentina.
7
+ class Argencard < Base::Financials::SouthAmericanPayments
8
+
9
+ protected
10
+
11
+ # Argencard transaction type
12
+ def transaction_type
13
+ Api::Constants::Transactions::ARGENCARD
14
+ end
15
+
16
+ # Argencard allowed billing countries
17
+ def allowed_billing_countries
18
+ %w(AR)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end