Module: ActiveMerchant::Billing::CreditCardMethods::ClassMethods
- Defined in:
- lib/active_merchant/billing/credit_card_methods.rb
Instance Method Summary collapse
-
#brand?(number) ⇒ Boolean
Returns a string containing the brand of card from the list of known information below.
-
#card_companies ⇒ Object
Regular expressions for the known card companies.
- #electron?(number) ⇒ Boolean
- #first_digits(number) ⇒ Object
- #last_digits(number) ⇒ Object
- #mask(number) ⇒ Object
-
#matching_brand?(number, brand) ⇒ Boolean
Checks to see if the calculated brand matches the specified brand.
- #matching_type?(number, brand) ⇒ Boolean
- #type?(number) ⇒ Boolean
-
#valid_number?(number) ⇒ Boolean
Returns true if it validates.
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
128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 128 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_companies ⇒ Object
Regular expressions for the known card companies.
References:
111 112 113 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 111 def card_companies CARD_COMPANIES end |
#electron?(number) ⇒ Boolean
140 141 142 143 144 145 146 147 148 149 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 140 def electron?(number) return false unless [16, 19].include?(number.length) # don't recalculate for each range bank_identification_number = first_digits(number).to_i ELECTRON_RANGES.any? do |range| range.include?(bank_identification_number) end end |
#first_digits(number) ⇒ Object
156 157 158 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 156 def first_digits(number) number.to_s.slice(0,6) end |
#last_digits(number) ⇒ Object
160 161 162 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 160 def last_digits(number) number.to_s.length <= 4 ? number : number.to_s.slice(-4..-1) end |
#mask(number) ⇒ Object
164 165 166 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 164 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
169 170 171 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 169 def matching_brand?(number, brand) brand?(number) == brand end |
#matching_type?(number, brand) ⇒ Boolean
173 174 175 176 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 173 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
151 152 153 154 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 151 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:
99 100 101 102 103 104 |
# File 'lib/active_merchant/billing/credit_card_methods.rb', line 99 def valid_number?(number) valid_test_mode_card_number?(number) || valid_card_number_length?(number) && valid_card_number_characters?(number) && valid_checksum?(number) end |