Module: ActiveMerchant::Billing::CreditCardMethods::ClassMethods
- Defined in:
- lib/active_merchant/billing/credit_card_methods.rb
Instance Method Summary collapse
-
#card_companies ⇒ Object
Regular expressions for the known card companies.
- #first_digits(number) ⇒ Object
- #last_digits(number) ⇒ Object
- #mask(number) ⇒ Object
-
#matching_type?(number, type) ⇒ Boolean
Checks to see if the calculated type matches the specified type.
-
#type?(number) ⇒ Boolean
Returns a string containing the type of card from the list of known information below.
-
#valid_number?(number) ⇒ Boolean
Returns true if it validates.
Instance Method Details
#card_companies ⇒ Object
Regular expressions for the known card companies.
References:
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
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
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:
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 |