lib/active_merchant/billing/credit_card.rb in activemerchant-1.1.0 vs lib/active_merchant/billing/credit_card.rb in activemerchant-1.2.0

- old
+ new

@@ -1,24 +1,23 @@ require 'time' require 'date' module ActiveMerchant #:nodoc: module Billing #:nodoc: - # This credit card object can be used as a stand alone object. It acts just like a active record object + # This credit card object can be used as a stand alone object. It acts just like an ActiveRecord object # but doesn't support the .save method as its not backed by a database. class CreditCard include CreditCardMethods + include Validateable cattr_accessor :require_verification_value self.require_verification_value = false def self.requires_verification_value? require_verification_value end - include Validateable - class ExpiryDate #:nodoc: attr_reader :month, :year def initialize(month, year) @month = month @year = year @@ -58,33 +57,38 @@ self.year = year.to_i self.number.to_s.gsub!(/[^\d]/, "") end def validate - errors.add "year", "expired" if expired? - - errors.add "first_name", "cannot be empty" if @first_name.blank? - errors.add "last_name", "cannot be empty" if @last_name.blank? - errors.add "month", "cannot be empty" unless valid_month?(@month) - errors.add "year", "cannot be empty" unless valid_expiry_year?(@year) + errors.add :year, "expired" if expired? + + errors.add :first_name, "cannot be empty" if @first_name.blank? + errors.add :last_name, "cannot be empty" if @last_name.blank? + errors.add :month, "is not a valid month" unless valid_month?(@month) + errors.add :year, "is not a valid year" unless valid_expiry_year?(@year) # Bogus card is pretty much for testing purposes. Lets just skip these extra tests if its used return if type == 'bogus' - errors.add "number", "is not a valid credit card number" unless CreditCard.valid_number?(number) - errors.add "type", "is invalid" unless CreditCard.card_companies.keys.include?(type) - errors.add "type", "is not the correct card type" unless CreditCard.type?(number) == type - + errors.add :number, "is not a valid credit card number" unless CreditCard.valid_number?(number) + errors.add :type, "is required" if type.blank? + errors.add :type, "is invalid" unless CreditCard.card_companies.keys.include?(type) + + unless errors.on(:number) || errors.on(:type) + CreditCard.type?(number) == type or + errors.add :type, "is not the correct card type" + end + if CreditCard.requires_verification_value? - errors.add "verification_value", "is required" unless verification_value? + errors.add :verification_value, "is required" unless verification_value? end if [ 'switch', 'solo' ].include?(type) unless valid_month?(@start_month) && valid_start_year?(@start_year) || valid_issue_number?(@issue_number) - errors.add "start_month", "is invalid" unless valid_month?(@start_month) - errors.add "start_year", "is invalid" unless valid_start_year?(@start_year) - errors.add "issue_number", "cannot be empty" unless valid_issue_number?(@issue_number) + errors.add :start_month, "is invalid" unless valid_month?(@start_month) + errors.add :start_year, "is invalid" unless valid_start_year?(@start_year) + errors.add :issue_number, "cannot be empty" unless valid_issue_number?(@issue_number) end end end def expired?