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)


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

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



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

def card_companies
  CARD_COMPANIES
end

#first_digits(number) ⇒ Object



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

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

#last_digits(number) ⇒ Object



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

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

#mask(number) ⇒ Object



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

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)


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

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

#matching_type?(number, brand) ⇒ Boolean

Returns:

  • (Boolean)


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

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)


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

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
# 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_checksum?(number)
end