genesis_ruby 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +158 -0
- data/LICENSE +21 -0
- data/README.md +343 -0
- data/Rakefile +12 -0
- data/VERSION +1 -0
- data/genesis_ruby.gemspec +43 -0
- data/lib/genesis_ruby/api/constants/currencies/iso4217.rb +1106 -0
- data/lib/genesis_ruby/api/constants/date_time_formats.rb +45 -0
- data/lib/genesis_ruby/api/constants/endpoints.rb +18 -0
- data/lib/genesis_ruby/api/constants/environments.rb +17 -0
- data/lib/genesis_ruby/api/constants/states/state.rb +43 -0
- data/lib/genesis_ruby/api/constants/states.rb +86 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/business/payment_types.rb +24 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/recurring/categories.rb +24 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/recurring/types.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/sca_exemptions.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/browser/color_depths.rb +46 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/password_change_indicators.rb +37 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/registration_indicators.rb +37 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/shipping_address_usage_indicators.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/suspicious_activity_indicators.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/card_holder_account/update_indicators.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/control/challenge_indicators.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/control/challenge_window_sizes.rb +37 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/control/device_types.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/delivery_timeframes.rb +34 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/pre_order_purchase_indicators.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/reorder_item_indicators.rb +28 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/merchant_risk/shipping_indicators.rb +46 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/purchase/categories.rb +43 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/sdk/interfaces.rb +31 -0
- data/lib/genesis_ruby/api/constants/transactions/parameters/threeds/version2/sdk/ui_types.rb +37 -0
- data/lib/genesis_ruby/api/constants/transactions.rb +371 -0
- data/lib/genesis_ruby/api/mixins/constants/common.rb +27 -0
- data/lib/genesis_ruby/api/mixins/requests/address_info_attributes.rb +20 -0
- data/lib/genesis_ruby/api/mixins/requests/customer_address/billing_info_attributes.rb +33 -0
- data/lib/genesis_ruby/api/mixins/requests/customer_address/customer_info_attributes.rb +26 -0
- data/lib/genesis_ruby/api/mixins/requests/customer_address/shipping_info_attributes.rb +33 -0
- data/lib/genesis_ruby/api/mixins/requests/document_attributes.rb +14 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/async_attributes.rb +34 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/base_attributes.rb +16 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/airlines_air_carriers_attributes.rb +60 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/business_attributes.rb +56 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/car_plane_and_boat_rentals_attributes.rb +53 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/cruise_lines_attributes.rb +50 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/event_management_attributes.rb +54 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/furniture_attributes.rb +53 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/hotels_and_real_estate_rentals_attributes.rb +53 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/business/travel_agencies_attributes.rb +88 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/credit_card_attributes.rb +31 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/fx_rate_attributes.rb +18 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/recurring_category_attributes.rb +31 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/recurring/recurring_type_attributes.rb +31 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/cards/tokenization_attributes.rb +39 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/crypto_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/dynamic_descriptor_attributes.rb +114 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/gaming_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/moto_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/notification_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/payment_attributes.rb +32 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/pending_payment_attributes.rb +25 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/reference_attributes.rb +16 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/risk_attributes.rb +47 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/sca_attributes.rb +37 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/browser.rb +92 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/card_holder_account.rb +183 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/common_attributes.rb +52 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/control.rb +61 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/merchant_risk.rb +114 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/method.rb +44 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/purchase.rb +42 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/recurring.rb +49 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/sdk.rb +107 -0
- data/lib/genesis_ruby/api/mixins/requests/financial/threeds/version2/wpf_attributes.rb +61 -0
- data/lib/genesis_ruby/api/mixins/requests/restricted_setter.rb +75 -0
- data/lib/genesis_ruby/api/request.rb +171 -0
- data/lib/genesis_ruby/api/requests/base/financial.rb +44 -0
- data/lib/genesis_ruby/api/requests/base/financials/credit_card.rb +27 -0
- data/lib/genesis_ruby/api/requests/financial/cards/authorize.rb +60 -0
- data/lib/genesis_ruby/api/requests/financial/cards/authorize3d.rb +76 -0
- data/lib/genesis_ruby/api/requests/financial/cards/sale.rb +59 -0
- data/lib/genesis_ruby/api/requests/financial/cards/sale3d.rb +75 -0
- data/lib/genesis_ruby/api/requests/wpf/create.rb +142 -0
- data/lib/genesis_ruby/api/response.rb +91 -0
- data/lib/genesis_ruby/builder.rb +42 -0
- data/lib/genesis_ruby/builders/base.rb +18 -0
- data/lib/genesis_ruby/builders/xml.rb +95 -0
- data/lib/genesis_ruby/configuration.rb +177 -0
- data/lib/genesis_ruby/connection.rb +20 -0
- data/lib/genesis_ruby/dependencies.rb +19 -0
- data/lib/genesis_ruby/errors/builder_error.rb +14 -0
- data/lib/genesis_ruby/errors/endpoint_not_set_error.rb +14 -0
- data/lib/genesis_ruby/errors/error.rb +18 -0
- data/lib/genesis_ruby/errors/invalid_argument_error.rb +14 -0
- data/lib/genesis_ruby/errors/network_error.rb +14 -0
- data/lib/genesis_ruby/errors/object_formatter_error.rb +14 -0
- data/lib/genesis_ruby/errors/parameter_error.rb +12 -0
- data/lib/genesis_ruby/errors/parser_error.rb +14 -0
- data/lib/genesis_ruby/errors/response_error.rb +14 -0
- data/lib/genesis_ruby/network/adapter/base_adapter.rb +31 -0
- data/lib/genesis_ruby/network/adapter/net_http_adapter.rb +92 -0
- data/lib/genesis_ruby/network/base_network.rb +83 -0
- data/lib/genesis_ruby/network/net_http.rb +28 -0
- data/lib/genesis_ruby/parser.rb +44 -0
- data/lib/genesis_ruby/parsers/base.rb +25 -0
- data/lib/genesis_ruby/parsers/xml.rb +120 -0
- data/lib/genesis_ruby/utils/common.rb +108 -0
- data/lib/genesis_ruby/utils/formatters/base.rb +40 -0
- data/lib/genesis_ruby/utils/formatters/response/definitions.rb +21 -0
- data/lib/genesis_ruby/utils/formatters/response/formats/amount.rb +34 -0
- data/lib/genesis_ruby/utils/formatters/response/formats/timestamp.rb +29 -0
- data/lib/genesis_ruby/utils/formatters/response/loader.rb +42 -0
- data/lib/genesis_ruby/utils/money/base/strategy.rb +38 -0
- data/lib/genesis_ruby/utils/money/conversions/amount_to_exponent.rb +22 -0
- data/lib/genesis_ruby/utils/money/conversions/exponent_to_amount.rb +22 -0
- data/lib/genesis_ruby/utils/money/format.rb +34 -0
- data/lib/genesis_ruby/utils/money_format.rb +39 -0
- data/lib/genesis_ruby/utils/object_formatter.rb +67 -0
- data/lib/genesis_ruby/utils/options/api_config.rb +36 -0
- data/lib/genesis_ruby/utils/options/base.rb +35 -0
- data/lib/genesis_ruby/utils/options/network_adapter_config.rb +41 -0
- data/lib/genesis_ruby/utils/transactions/financial_types.rb +50 -0
- data/lib/genesis_ruby/utils/transactions/references/capturable_types.rb +52 -0
- data/lib/genesis_ruby/utils/transactions/references/refundable_types.rb +70 -0
- data/lib/genesis_ruby/utils/transactions/references/voidable_types.rb +49 -0
- data/lib/genesis_ruby/utils/transactions/wpf_types.rb +43 -0
- data/lib/genesis_ruby/version.rb +5 -0
- data/lib/genesis_ruby.rb +57 -0
- metadata +372 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'genesis_ruby/utils/formatters/base'
|
|
2
|
+
require 'date'
|
|
3
|
+
|
|
4
|
+
module GenesisRuby
|
|
5
|
+
module Utils
|
|
6
|
+
module Formatters
|
|
7
|
+
module Response
|
|
8
|
+
module Formats
|
|
9
|
+
# Response Timestamp format
|
|
10
|
+
class Timestamp < Base
|
|
11
|
+
|
|
12
|
+
# The Response keys that the formatter will be applied to
|
|
13
|
+
def formatting_keys
|
|
14
|
+
%w(timestamp)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Format the given timestamp to DateTime object
|
|
18
|
+
def format_key(timestamp)
|
|
19
|
+
DateTime.parse timestamp
|
|
20
|
+
rescue StandardError
|
|
21
|
+
timestamp
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'genesis_ruby/utils/formatters/response/definitions'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Utils
|
|
5
|
+
module Formatters
|
|
6
|
+
module Response
|
|
7
|
+
# Response Formatter initializer
|
|
8
|
+
class Loader
|
|
9
|
+
|
|
10
|
+
include Response
|
|
11
|
+
|
|
12
|
+
# Load the Available Formatters
|
|
13
|
+
def initialize
|
|
14
|
+
initialize_formatters
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Initialized Formatters array
|
|
18
|
+
def formats
|
|
19
|
+
@formats ||= []
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Add new formatter to the formatter array
|
|
23
|
+
def formats=(formatter_class)
|
|
24
|
+
@formats = formats
|
|
25
|
+
|
|
26
|
+
@formats.push formatter_class
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
# Initialize the Available Formatters
|
|
32
|
+
def initialize_formatters
|
|
33
|
+
available_formatters.each do |formatter_class|
|
|
34
|
+
self.formats = formatter_class.new
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'genesis_ruby/errors/invalid_argument_error'
|
|
2
|
+
require 'bigdecimal'
|
|
3
|
+
|
|
4
|
+
module GenesisRuby
|
|
5
|
+
module Utils
|
|
6
|
+
module Money
|
|
7
|
+
module Base
|
|
8
|
+
# Base Conversion Strategy class
|
|
9
|
+
class Strategy
|
|
10
|
+
|
|
11
|
+
attr_accessor :amount, :currency, :currency_exponent
|
|
12
|
+
|
|
13
|
+
# Class constructor
|
|
14
|
+
def initialize(amount, currency, currency_exponent)
|
|
15
|
+
@amount = parse_amount(amount)
|
|
16
|
+
@currency = currency
|
|
17
|
+
@currency_exponent = currency_exponent
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Convert Strategy method
|
|
21
|
+
def convert
|
|
22
|
+
raise NotImplementedError
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
protected
|
|
26
|
+
|
|
27
|
+
# Validate and parse amount into BigDecimal
|
|
28
|
+
def parse_amount(amount)
|
|
29
|
+
BigDecimal(amount.to_s)
|
|
30
|
+
rescue StandardError
|
|
31
|
+
raise InvalidArgumentError, 'Invalid amount value given.'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'genesis_ruby/utils/money/base/strategy'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Utils
|
|
5
|
+
module Money
|
|
6
|
+
module Conversions
|
|
7
|
+
# Amount To Exponent Money Conversion Strategy
|
|
8
|
+
class AmountToExponent < GenesisRuby::Utils::Money::Base::Strategy
|
|
9
|
+
|
|
10
|
+
# Convert amount to ISO-4217 minor currency unit
|
|
11
|
+
def convert
|
|
12
|
+
format(
|
|
13
|
+
'%d',
|
|
14
|
+
(amount * parse_amount(10**currency_exponent))
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'genesis_ruby/utils/money/base/strategy'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Utils
|
|
5
|
+
module Money
|
|
6
|
+
module Conversions
|
|
7
|
+
# Amount To Exponent Money Conversion Strategy
|
|
8
|
+
class ExponentToAmount < GenesisRuby::Utils::Money::Base::Strategy
|
|
9
|
+
|
|
10
|
+
# Convert ISO-4217 minor currency unit to amount
|
|
11
|
+
def convert
|
|
12
|
+
format(
|
|
13
|
+
"%.#{currency_exponent}f",
|
|
14
|
+
(amount / parse_amount(10**currency_exponent)).truncate(currency_exponent)
|
|
15
|
+
)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'genesis_ruby/errors/invalid_argument_error'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Utils
|
|
5
|
+
module Money
|
|
6
|
+
# Money Helper
|
|
7
|
+
class Format
|
|
8
|
+
|
|
9
|
+
attr_accessor :strategy
|
|
10
|
+
|
|
11
|
+
def initialize(strategy)
|
|
12
|
+
@strategy = strategy
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Execute Convert Strategy
|
|
16
|
+
def convert
|
|
17
|
+
unless valid_amount_exponent?
|
|
18
|
+
raise GenesisRuby::InvalidArgumentError, 'Currency exponent do not match the given amount'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
strategy.convert
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Validate the given amount against the defined currency exponent
|
|
25
|
+
def valid_amount_exponent?
|
|
26
|
+
amount_sign, amount_digits, amount_base, amount_exponent = strategy.amount.split # rubocop:disable Lint/UselessAssignment
|
|
27
|
+
|
|
28
|
+
!amount_sign.negative? && (amount_digits.length - amount_exponent) <= strategy.currency_exponent
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'genesis_ruby/api/constants/currencies/iso4217'
|
|
2
|
+
require 'genesis_ruby/utils/money/conversions/amount_to_exponent'
|
|
3
|
+
require 'genesis_ruby/utils/money/conversions/exponent_to_amount'
|
|
4
|
+
require 'genesis_ruby/utils/money/format'
|
|
5
|
+
|
|
6
|
+
module GenesisRuby
|
|
7
|
+
module Utils
|
|
8
|
+
# Money Helper
|
|
9
|
+
class MoneyFormat
|
|
10
|
+
|
|
11
|
+
class << self
|
|
12
|
+
|
|
13
|
+
# Convert major to minor currency format units
|
|
14
|
+
def amount_to_exponent(amount, currency)
|
|
15
|
+
strategy = GenesisRuby::Utils::Money::Conversions::AmountToExponent.new(
|
|
16
|
+
amount,
|
|
17
|
+
currency,
|
|
18
|
+
GenesisRuby::Api::Constants::Currencies::Iso4217.fetch_exponent(currency)
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
GenesisRuby::Utils::Money::Format.new(strategy).convert
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Convert minor to major currency format units
|
|
25
|
+
def exponent_to_amount(amount, currency)
|
|
26
|
+
strategy = GenesisRuby::Utils::Money::Conversions::ExponentToAmount.new(
|
|
27
|
+
amount,
|
|
28
|
+
currency,
|
|
29
|
+
GenesisRuby::Api::Constants::Currencies::Iso4217.fetch_exponent(currency)
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
GenesisRuby::Utils::Money::Format.new(strategy).convert
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require 'genesis_ruby/errors/object_formatter_error'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Utils
|
|
5
|
+
# Object Formatter component
|
|
6
|
+
class ObjectFormatter
|
|
7
|
+
|
|
8
|
+
# Available Formatters
|
|
9
|
+
def formats
|
|
10
|
+
@formats ||= []
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Add new formatter to the formatter array
|
|
14
|
+
def formats=(formatters)
|
|
15
|
+
raise ObjectFormatterError, 'Invalid array value given for Formats.' unless formatters.is_a? Array
|
|
16
|
+
|
|
17
|
+
formats.push *formatters
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Apply all Formatter on the given object
|
|
21
|
+
def format_structure(response_object)
|
|
22
|
+
return format_hash(response_object) if response_object.is_a? Hash
|
|
23
|
+
return format_array(response_object) if response_object.is_a? Array
|
|
24
|
+
|
|
25
|
+
response_object
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
private
|
|
29
|
+
|
|
30
|
+
# Format Object with Hash type
|
|
31
|
+
def format_hash(response_object)
|
|
32
|
+
response_object.each do |response_key, response_value|
|
|
33
|
+
response_object[response_key] = if response_value.is_a?(Hash) || response_value.is_a?(Array)
|
|
34
|
+
format_structure(response_value)
|
|
35
|
+
else
|
|
36
|
+
format_value(response_object, response_key, response_value)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
response_object
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Format Object with Array type
|
|
44
|
+
def format_array(response_object)
|
|
45
|
+
response_object.each do |response_value|
|
|
46
|
+
format_structure(response_value)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Format Object key value
|
|
51
|
+
def format_value(response_object, response_key, response_value)
|
|
52
|
+
formats.each do |formatter|
|
|
53
|
+
next unless formatter.formatting_keys.include?(response_key.to_s)
|
|
54
|
+
|
|
55
|
+
required_values = formatter.collect_required_key_values(response_object)
|
|
56
|
+
|
|
57
|
+
return response_value if required_values.count != formatter.required_keys.count
|
|
58
|
+
|
|
59
|
+
return formatter.format_key(response_value, *required_values)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
response_value
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'genesis_ruby/utils/options/base'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Utils
|
|
5
|
+
module Options
|
|
6
|
+
# Configurable Options used for the API Request configuration
|
|
7
|
+
class ApiConfig < Base
|
|
8
|
+
|
|
9
|
+
# Load pre-defined XML configuration
|
|
10
|
+
def load_xml_config
|
|
11
|
+
self.protocol = GenesisRuby::Api::Request::PROTOCOL_HTTPS
|
|
12
|
+
self.port = GenesisRuby::Api::Request::PORT_HTTPS
|
|
13
|
+
self.type = GenesisRuby::Api::Request::METHOD_POST
|
|
14
|
+
self.format = 'xml' # TODO: use the builder constant
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Load pre-defined JSON configuration
|
|
18
|
+
def load_json_config
|
|
19
|
+
self.protocol = GenesisRuby::Api::Request::PROTOCOL_HTTPS
|
|
20
|
+
self.port = GenesisRuby::Api::Request::PORT_HTTPS
|
|
21
|
+
self.type = GenesisRuby::Api::Request::METHOD_POST
|
|
22
|
+
self.format = 'json' # TODO: use the builder constant
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Load pre-defined FORM configuration
|
|
26
|
+
def load_form_config
|
|
27
|
+
self.protocol = GenesisRuby::Api::Request::PROTOCOL_HTTPS
|
|
28
|
+
self.port = GenesisRuby::Api::Request::PORT_HTTPS
|
|
29
|
+
self.type = GenesisRuby::Api::Request::METHOD_POST
|
|
30
|
+
self.format = 'form' # TODO: use the builder constant
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module GenesisRuby
|
|
2
|
+
module Utils
|
|
3
|
+
module Options
|
|
4
|
+
# Simple key value hash object
|
|
5
|
+
# Usage: ConfigurableOptions.<name>=, ConfigurableOptions.<name>
|
|
6
|
+
class Base < Hash
|
|
7
|
+
|
|
8
|
+
def []=(key, value)
|
|
9
|
+
super(key.to_sym, value)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def [](key)
|
|
13
|
+
super(key.to_sym)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Dynamic accessors for the hash[keys]
|
|
17
|
+
def method_missing(name, *args)
|
|
18
|
+
name_string = name.to_s
|
|
19
|
+
if name_string.chomp!('=')
|
|
20
|
+
self[name_string] = args.first
|
|
21
|
+
else
|
|
22
|
+
self[name_string]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Define ConfigurableOptions.method("<method>") call
|
|
27
|
+
# If we dont have defined hash key we will raise exception
|
|
28
|
+
def respond_to_missing?(name, include_private = false)
|
|
29
|
+
method_missing(name) || super
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'genesis_ruby/utils/options/base'
|
|
2
|
+
|
|
3
|
+
module GenesisRuby
|
|
4
|
+
module Utils
|
|
5
|
+
module Options
|
|
6
|
+
# Configurable Options used for the API Request configuration
|
|
7
|
+
class NetworkAdapterConfig < Base
|
|
8
|
+
|
|
9
|
+
# Map the Adapter configuration from the Request object
|
|
10
|
+
def map_from_request(request) # rubocop:disable Metrics/AbcSize
|
|
11
|
+
self.body = request.build_document
|
|
12
|
+
self.url = request.api_config.url
|
|
13
|
+
self.type = request.api_config.type
|
|
14
|
+
self.port = request.api_config.port
|
|
15
|
+
self.protocol = request.api_config.protocol
|
|
16
|
+
self.format = fetch_content_type(request.api_config.format)
|
|
17
|
+
|
|
18
|
+
self
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
|
|
23
|
+
# Retrieve the Request data format that must be used as Content-Type header
|
|
24
|
+
def fetch_content_type(data_format)
|
|
25
|
+
# TODO: Builder Constants
|
|
26
|
+
case data_format
|
|
27
|
+
when 'xml'
|
|
28
|
+
'text/xml'
|
|
29
|
+
when 'json'
|
|
30
|
+
'application/json'
|
|
31
|
+
when 'form'
|
|
32
|
+
'application/x-www-form-urlencoded'
|
|
33
|
+
else
|
|
34
|
+
raise InvalidArgumentError, 'Invalid request format type. Allowed are XML, JSON and FORM'
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module GenesisRuby
|
|
2
|
+
module Utils
|
|
3
|
+
module Transactions
|
|
4
|
+
# Financial Transaction Types Helper methods
|
|
5
|
+
class FinancialTypes
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
include GenesisRuby::Api::Constants::Transactions
|
|
10
|
+
|
|
11
|
+
# Return array containing all available Web Payment Form transaction types
|
|
12
|
+
def all # rubocop:disable Metrics/MethodLength
|
|
13
|
+
[
|
|
14
|
+
AFRICAN_MOBILE_PAYOUT, AFRICAN_MOBILE_SALE, APPLE_PAY, ARGENCARD, AURA, AUTHORIZE, AUTHORIZE_3D,
|
|
15
|
+
BALOTO, BANCOMER, BANCONTACT, BANCO_DE_OCCIDENTE, BANCO_DO_BRASIL, BITPAY_PAYOUT, BITPAY_REFUND,
|
|
16
|
+
BITPAY_SALE, BOLETO, BRADESCO,
|
|
17
|
+
CABAL, CAPTURE, CASHU, CENCOSUD, CREDIT,
|
|
18
|
+
DAVIVIENDA,
|
|
19
|
+
EFECTY, ELO, EPS,
|
|
20
|
+
EZEECARD_PAYOUT, EZEEWALLET,
|
|
21
|
+
FASHIONCHEQUE,
|
|
22
|
+
GIROPAY, GOOGLE_PAY,
|
|
23
|
+
IDEAL, IDEBIT_PAYIN, IDEBIT_PAYOUT, INCREMENTAL_AUTHORIZE, INSTA_DEBIT_PAYIN, INSTA_DEBIT_PAYOUT,
|
|
24
|
+
INTERSOLVE, ITAU,
|
|
25
|
+
MULTIBANCO, MY_BANK,
|
|
26
|
+
NARANJA, NATIVA, NEOSURF, NETELLER,
|
|
27
|
+
ONLINE_BANKING_PAYIN, ONLINE_BANKING_PAYOUT,
|
|
28
|
+
OXXO,
|
|
29
|
+
P24, PAGO_FACIL, PARTIAL_REVERSAL, PAYOUT, PAYSAFECARD, PAYU, PAY_PAL, PIX, POLI, POST_FINANCE, PPRO, PSE,
|
|
30
|
+
RAPI_PAGO, REDPAGOS, REFUND, RUSSIAN_MOBILE_PAYOUT, RUSSIAN_MOBILE_SALE,
|
|
31
|
+
SAFETYPAY, SALE, SALE_3D, SANTANDER, SCT_PAYOUT, SDD_INIT_RECURRING_SALE, SDD_RECURRING_SALE, SDD_REFUND,
|
|
32
|
+
SDD_SALE, SOFORT,
|
|
33
|
+
TARJETA_SHOPPING, TCS, TRANSFER_TO_PAYOUT, TRUSTLY_SALE,
|
|
34
|
+
UPI,
|
|
35
|
+
VOID,
|
|
36
|
+
WEBMONEY, WEBPAY, WECHAT
|
|
37
|
+
]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Validates the given type against the available Web Payment Form transaction types
|
|
41
|
+
def valid?(type)
|
|
42
|
+
all.include? type.to_s.downcase
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module GenesisRuby
|
|
2
|
+
module Utils
|
|
3
|
+
module Transactions
|
|
4
|
+
module References
|
|
5
|
+
# Capturable Transaction Types Helper Methods
|
|
6
|
+
class CapturableTypes
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
|
|
10
|
+
include GenesisRuby::Api::Constants::Transactions
|
|
11
|
+
|
|
12
|
+
# Array containing all available Capturable Types
|
|
13
|
+
def all
|
|
14
|
+
[
|
|
15
|
+
APPLE_PAY, AUTHORIZE, AUTHORIZE_3D,
|
|
16
|
+
GOOGLE_PAY,
|
|
17
|
+
INVOICE,
|
|
18
|
+
PAY_PAL
|
|
19
|
+
]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Checks if the given type is allowed for the execution of Reference Capture Transaction Type
|
|
23
|
+
def allowed_reference?(type)
|
|
24
|
+
all.include?(type.to_s.downcase)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Checks if the given type is a Capture type
|
|
28
|
+
def valid?(type)
|
|
29
|
+
[
|
|
30
|
+
CAPTURE,
|
|
31
|
+
INVOICE_CAPTURE
|
|
32
|
+
].include?(type.to_s.downcase)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Fetches the correct Transaction type that must be used for the execution of the Capture
|
|
36
|
+
# ex. invoice -> invoice_capture
|
|
37
|
+
def fetch_reference(type)
|
|
38
|
+
case type.to_s.downcase
|
|
39
|
+
when INVOICE
|
|
40
|
+
INVOICE_CAPTURE
|
|
41
|
+
else
|
|
42
|
+
CAPTURE
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
module GenesisRuby
|
|
2
|
+
module Utils
|
|
3
|
+
module Transactions
|
|
4
|
+
module References
|
|
5
|
+
# Refundable Transaction Types Helper Methods
|
|
6
|
+
class RefundableTypes
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
|
|
10
|
+
include GenesisRuby::Api::Constants::Transactions
|
|
11
|
+
|
|
12
|
+
# Array containing all available Refundable Types
|
|
13
|
+
def all # rubocop:disable Metrics/MethodLength
|
|
14
|
+
[
|
|
15
|
+
AFRICAN_MOBILE_PAYOUT, AFRICAN_MOBILE_SALE, APPLE_PAY,
|
|
16
|
+
BALOTO, BANCOMER, BANCONTACT, BANCO_DE_OCCIDENTE, BANCO_DO_BRASIL, BITPAY_SALE, BOLETO, BRADESCO,
|
|
17
|
+
CAPTURE, CASHU,
|
|
18
|
+
DAVIVIENDA,
|
|
19
|
+
EFECTY, EPS, FASHIONCHEQUE,
|
|
20
|
+
GIROPAY, GOOGLE_PAY,
|
|
21
|
+
IDEAL, IDEBIT_PAYIN, INIT_RECURRING_SALE, INIT_RECURRING_SALE_3D, INVOICE_CAPTURE, ITAU,
|
|
22
|
+
MY_BANK,
|
|
23
|
+
NEOSURF,
|
|
24
|
+
ONLINE_BANKING_PAYIN, OXXO,
|
|
25
|
+
P24, PAGO_FACIL, PARTIAL_REVERSAL, PAYU, PAY_PAL, PIX, POST_FINANCE, PPRO, PSE, RAPI_PAGO,
|
|
26
|
+
RECURRING_SALE, REDPAGOS,
|
|
27
|
+
SAFETYPAY, SALE, SALE_3D, SANTANDER, SDD_INIT_RECURRING_SALE, SDD_RECURRING_SALE, SDD_SALE, SOFORT,
|
|
28
|
+
TRUSTLY_SALE,
|
|
29
|
+
UPI,
|
|
30
|
+
WEBPAY, WECHAT
|
|
31
|
+
]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Checks if the given type is allowed for the execution of Reference Refund Transaction Type
|
|
35
|
+
def allowed_reference?(type)
|
|
36
|
+
all.include?(type.to_s.downcase)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Checks if the given type is a Refund type
|
|
40
|
+
def valid?(type)
|
|
41
|
+
[
|
|
42
|
+
BITPAY_REFUND,
|
|
43
|
+
INVOICE_REFUND,
|
|
44
|
+
REFUND,
|
|
45
|
+
SDD_REFUND
|
|
46
|
+
].include?(type.to_s.downcase)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# Fetches the correct Transaction type that must be used for the execution of the Refund
|
|
50
|
+
# ex. sdd_sale -> sdd_refund, sale -> refund
|
|
51
|
+
def fetch_reference(type)
|
|
52
|
+
case type.to_s.downcase
|
|
53
|
+
when BITPAY_SALE
|
|
54
|
+
BITPAY_REFUND
|
|
55
|
+
when SDD_SALE, SDD_RECURRING_SALE, SDD_INIT_RECURRING_SALE
|
|
56
|
+
SDD_REFUND
|
|
57
|
+
when INVOICE_CAPTURE
|
|
58
|
+
INVOICE_REFUND
|
|
59
|
+
else
|
|
60
|
+
REFUND
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module GenesisRuby
|
|
2
|
+
module Utils
|
|
3
|
+
module Transactions
|
|
4
|
+
module References
|
|
5
|
+
# Voidable Transaction Types Helper Methods
|
|
6
|
+
class VoidableTypes
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
|
|
10
|
+
include GenesisRuby::Api::Constants::Transactions
|
|
11
|
+
|
|
12
|
+
# Array containing all available Voidable Types
|
|
13
|
+
def all
|
|
14
|
+
[
|
|
15
|
+
AFRICAN_MOBILE_PAYOUT, AFRICAN_MOBILE_SALE, APPLE_PAY, AUTHORIZE, AUTHORIZE_3D,
|
|
16
|
+
FASHIONCHEQUE,
|
|
17
|
+
GOOGLE_PAY,
|
|
18
|
+
INTERSOLVE, INVOICE,
|
|
19
|
+
PAY_PAL,
|
|
20
|
+
REFUND,
|
|
21
|
+
SALE, SALE_3D,
|
|
22
|
+
TCS, TRUSTLY_SALE
|
|
23
|
+
]
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Checks if the given type is allowed for the execution of Reference Void Transaction Type
|
|
27
|
+
def allowed_reference?(type)
|
|
28
|
+
all.include?(type.to_s.downcase)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Checks if the given type is a Void type
|
|
32
|
+
def valid?(type)
|
|
33
|
+
[
|
|
34
|
+
VOID
|
|
35
|
+
].include?(type.to_s.downcase)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Fetches the correct Transaction type that must be used for the execution of the Void
|
|
39
|
+
def fetch_reference(_type)
|
|
40
|
+
VOID
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module GenesisRuby
|
|
2
|
+
module Utils
|
|
3
|
+
module Transactions
|
|
4
|
+
# Web Payment Form Transaction Types Helper methods
|
|
5
|
+
class WpfTypes
|
|
6
|
+
|
|
7
|
+
class << self
|
|
8
|
+
|
|
9
|
+
include GenesisRuby::Api::Constants::Transactions
|
|
10
|
+
|
|
11
|
+
# Return array containing all available Web Payment Form transaction types
|
|
12
|
+
def all # rubocop:disable Metrics/MethodLength
|
|
13
|
+
[
|
|
14
|
+
ACCOUNT_VERIFICATION, ARGENCARD, APPLE_PAY, AURA, AUTHORIZE, AUTHORIZE_3D,
|
|
15
|
+
BALOTO, BANCOMER, BANCONTACT, BANCO_DE_OCCIDENTE, BANCO_DO_BRASIL, BITPAY_PAYOUT, BITPAY_SALE, BOLETO,
|
|
16
|
+
BRADESCO,
|
|
17
|
+
CABAL, CASHU, CENCOSUD, DAVIVIENDA,
|
|
18
|
+
EFECTY, ELO, EPS, EZEEWALLET, FASHIONCHEQUE,
|
|
19
|
+
GIROPAY, GOOGLE_PAY,
|
|
20
|
+
IDEAL, IDEBIT_PAYIN, INSTA_DEBIT_PAYIN, INTERSOLVE, ITAU,
|
|
21
|
+
MULTIBANCO, MY_BANK,
|
|
22
|
+
NARANJA, NATIVA, NEOSURF, NETELLER,
|
|
23
|
+
ONLINE_BANKING_PAYIN, OXXO,
|
|
24
|
+
P24, PAGO_FACIL, PAY_PAL, PAYSAFECARD, PAYU, PIX, POLI, POST_FINANCE, PPRO, PSE,
|
|
25
|
+
RAPI_PAGO, REDPAGOS, RUSSIAN_MOBILE_SALE,
|
|
26
|
+
SAFETYPAY, SALE, SALE_3D, SANTANDER, SDD_INIT_RECURRING_SALE, SDD_SALE,
|
|
27
|
+
TARJETA_SHOPPING, TCS, TRUSTLY_SALE,
|
|
28
|
+
UPI,
|
|
29
|
+
WEBMONEY, WEBPAY, WECHAT
|
|
30
|
+
]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Validates the given type against the available Web Payment Form transaction types
|
|
34
|
+
def valid?(type)
|
|
35
|
+
all.include? type.to_s.downcase
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|