Module: ActiveMerchant::Billing::CreditCardMethods::ClassMethods

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

Instance Method Summary collapse

Instance Method Details

#card_companiesObject



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

def card_companies
  CARD_COMPANIES
end

#first_digits(number) ⇒ Object



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

def first_digits(number)
  number.to_s.slice(0,6) 
end

#last_digits(number) ⇒ Object



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

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

#mask(number) ⇒ Object



95
96
97
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 95

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)


100
101
102
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 100

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/active_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/active_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