Class: PayCertify::Gateway::Transaction::Validation

Inherits:
Base::Validation show all
Defined in:
lib/paycertify/gateway/transaction.rb

Constant Summary collapse

ALL_VALIDATIONS =
[
  # Mandatory fields
  { name: :type, validation: :type_validation, required: true },
  { name: :amount, validation: :amount_validation, required: true },
  { name: :currency, validation: :currency_validation, required: true },
  { name: :card_number, validation: :card_number_validation, required: true },
  { name: :expiration_month, validation: :expiration_month_validation, required: true },
  { name: :expiration_year, validation: :expiration_year_validation, required: true },
  { name: :name_on_card, validation: :no_validation, required: true },
  { name: :cvv, validation: :no_validation, required: true },
  { name: :transaction_id, validation: :no_validation, required: true },
  { name: :billing_city, validation: :no_validation, required: true },
  { name: :billing_state, validation: :no_validation, required: true },
  { name: :billing_country, validation: :no_validation, required: true },
  { name: :billing_zip, validation: :zip_validation, required: true },
  
  # Optional fields
  { name: :shipping_zip, validation: :zip_validation, required: false },
  { name: :email, validation: :email_validation, required: false },
  { name: :ip, validation: :ip_validation, required: false }
]
CAPTURE_VALIDATIONS =
[
  { name: :type, validation: :type_validation, required: true },
  { name: :amount, validation: :amount_validation, required: true },
  { name: :transaction_id, validation: :no_validation, required: true }
]
VOID_VALIDATIONS =
[
  { name: :type, validation: :type_validation, required: true },
  # { name: :amount, validation: :amount_validation, required: true },
  { name: :transaction_id, validation: :no_validation, required: true }
]
ALLOWED_TYPES =
%w(sale auth return void force recurring)
ALLOWED_CURRENCIES =
%w(USD EUR)

Constants inherited from Base::Validation

Base::Validation::CREDIT_CARD_REGEX, Base::Validation::EMAIL_REGEX

Instance Attribute Summary

Attributes inherited from Base::Validation

#attributes, #errors

Instance Method Summary collapse

Methods inherited from Base::Validation

#add_error, #amount_validation, #card_number_validation, #email_validation, #expiration_month_validation, #expiration_year_validation, #no_validation, #presence_validation, #set_attribute, #value_for, #zip_validation

Constructor Details

#initialize(attributes = {}) ⇒ Validation

Returns a new instance of Validation.



74
75
76
77
78
79
80
81
# File 'lib/paycertify/gateway/transaction.rb', line 74

def initialize(attributes={})
  super(attributes)

  validations.each do |attribute|
    presence_validation(attribute) if attribute[:required]
    send(attribute[:validation], attribute) if value_for(attribute).present?
  end
end

Instance Method Details

#currency_validation(attribute) ⇒ Object



100
101
102
103
104
105
106
# File 'lib/paycertify/gateway/transaction.rb', line 100

def currency_validation(attribute)
  set_attribute(attribute, value_for(attribute).upcase)

  unless value_for(attribute).try(:to_s).in?(ALLOWED_CURRENCIES)
    add_error(attribute, "Must be one of #{ALLOWED_CURRENCIES.join(', ')}")
  end
end

#ip_validation(attribute) ⇒ Object



108
109
110
111
112
# File 'lib/paycertify/gateway/transaction.rb', line 108

def ip_validation(attribute)
  IPAddr.new(value_for(attribute))
rescue IPAddr::InvalidAddressError
  add_error(attribute, "Doesn't validate as an IP.")
end

#type_validation(attribute) ⇒ Object



94
95
96
97
98
# File 'lib/paycertify/gateway/transaction.rb', line 94

def type_validation(attribute)
  unless value_for(attribute).try(:to_s).in?(ALLOWED_TYPES)
    add_error(attribute, "Must be one of #{ALLOWED_TYPES.join(', ')}")
  end
end

#validationsObject



83
84
85
86
87
88
89
90
91
92
# File 'lib/paycertify/gateway/transaction.rb', line 83

def validations
  case attributes[:type]
  when 'force'
    CAPTURE_VALIDATIONS
  when 'void', 'return'
    VOID_VALIDATIONS
  else
    ALL_VALIDATIONS
  end
end