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

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

Instance Method Summary collapse

Instance Method Details

#brand?(number) ⇒ Boolean

Returns a string containing the brand 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 brand?(number)
  return 'visa' if valid_test_mode_card_number?(number)
  card_companies.find([nil]) { |brand, regexp| number =~ regexp }.first.dup
end

Returns:

  • (Boolean)


97
98
99
100
101
102
103
104
105
106
107
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 97

def brand?(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

#card_companiesObject



80
81
82
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 80

def card_companies
  CARD_COMPANIES
end

#first_digits(number) ⇒ Object



114
115
116
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 114

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

#last_digits(number) ⇒ Object



118
119
120
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 118

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

#mask(number) ⇒ Object



122
123
124
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 122

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

#matching_brand?(number, brand) ⇒ Boolean

Checks to see if the calculated brand matches the specified brand

Returns:

  • (Boolean)


127
128
129
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 127

def matching_brand?(number, brand)
  brand?(number) == brand
end

#matching_type?(number, brand) ⇒ Boolean

Returns:

  • (Boolean)


131
132
133
134
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 131

def matching_type?(number, brand)
  ActiveMerchant.deprecated "CreditCard#matching_type? is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#matching_brand? instead."
  matching_brand?(number, brand)
end

#type?(number) ⇒ Boolean

Returns:

  • (Boolean)


109
110
111
112
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 109

def type?(number)
  ActiveMerchant.deprecated "CreditCard#type? is deprecated and will be removed from a future release of ActiveMerchant. Please use CreditCard#brand? instead."
  brand?(number)
end

#valid_number?(number) ⇒ Boolean

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

References:

Returns:

  • (Boolean)


68
69
70
71
72
73
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 68

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