Module: MerbMerchant::Billing::CreditCardMethods::ClassMethods

Defined in:
lib/merb_merchant/billing/credit_card_methods.rb

Instance Method Summary collapse

Instance Method Details

#card_companiesObject



58
59
60
# File 'lib/merb_merchant/billing/credit_card_methods.rb', line 58

def card_companies
  CARD_COMPANIES
end

#last_digits(number) ⇒ Object



87
88
89
# File 'lib/merb_merchant/billing/credit_card_methods.rb', line 87

def last_digits(number)     
  number.to_s.length <= 4 ? number : number.to_s.slice(-4..-1) 
end

#mask(number) ⇒ Object



91
92
93
# File 'lib/merb_merchant/billing/credit_card_methods.rb', line 91

def mask(number)
  "XXXX-XXXX-XXXX-#{last_digits(number)}"
end

#matching_type?(number, type) ⇒ Boolean

Checks to see if the calculated type matches the specified type

Returns:

  • (Boolean)


96
97
98
# File 'lib/merb_merchant/billing/credit_card_methods.rb', line 96

def matching_type?(number, type)
  type?(number) == type
end

#type?(number) ⇒ Boolean

Returns a string containing the type of card from the list of known information below. Need to check the cards in a particular order, as there is some overlap of the allowable ranges – TODO Refactor this method. We basically need to tighten up the Maestro Regexp.

Right now the Maestro regexp overlaps with the MasterCard regexp (IIRC). If we can tighten things up, we can boil this whole thing down to something like…

def type?(number)
  return 'visa' if valid_test_mode_card_number?(number)
  card_companies.find([nil]) { |type, regexp| number =~ regexp }.first.dup
end

Returns:

  • (Boolean)


75
76
77
78
79
80
81
82
83
84
85
# File 'lib/merb_merchant/billing/credit_card_methods.rb', line 75

def type?(number)
  return 'bogus' if valid_test_mode_card_number?(number)

  card_companies.reject { |c,p| c == 'maestro' }.each do |company, pattern|
    return company.dup if number =~ pattern 
  end
  
  return 'maestro' if number =~ card_companies['maestro']

  return nil
end

#valid_number?(number) ⇒ Boolean

Returns true if it validates. Optionally, you can pass a card type as an argument and make sure it is of the correct type.

References:

Returns:

  • (Boolean)


47
48
49
50
51
# File 'lib/merb_merchant/billing/credit_card_methods.rb', line 47

def valid_number?(number)
  valid_test_mode_card_number?(number) || 
    valid_card_number_length?(number) && 
    valid_checksum?(number)
end