class CreditCardValidator
Constants
Public Instance Methods
validate_each(record, attribute, value)
click to toggle source
Calls superclass method
BaseValidator#validate_each
# File lib/lite/validators/credit_card_validator.rb, line 78 def validate_each(record, attribute, value) assert_valid_provider! super end
Private Instance Methods
assert_valid_provider!()
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 85 def assert_valid_provider! assert_valid_option!(:provider, PROVIDERS.keys.push(:all)) end
checksum(value)
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 89 def checksum(value) values = digits(value).reverse.map.with_index { |n, i| i.even? ? n * 2 : n } total = values.reverse.inject(0) { |a, b| a + digits(b).sum } checksum = 10 - (total % 10) checksum == 10 ? 0 : checksum end
digits(value)
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 96 def digits(value) value.to_s.chars.map(&:to_i) end
encompasses?(subject, value)
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 100 def encompasses?(subject, value) case subject when Array then subject.include?(value) when Range then subject.cover?(value) else subject == value end end
prefix(subject, value)
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 108 def prefix(subject, value) nums = case subject when Array, Range then subject.first else subject end value.to_s[0..(nums.to_s.size - 1)].to_i end
provider()
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 117 def provider options[:provider] || :all end
valid_attr?()
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 121 def valid_attr? valid_size?(value) && valid_prefix?(value) && valid_checksum? end
valid_checksum?()
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 125 def valid_checksum? nums = digits(value) nums.pop == checksum(nums.join) end
valid_prefix?(value)
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 130 def valid_prefix?(value) prefixes = PROVIDERS.dig(provider, :prefixes) || PROVIDERS.flat_map { |_, h| h[:prefixes] } prefixes.any? do |subject| iin = prefix(subject, value) encompasses?(subject, iin) end end
valid_size?(value)
click to toggle source
# File lib/lite/validators/credit_card_validator.rb, line 139 def valid_size?(value) sizes = PROVIDERS.dig(provider, :sizes) || (12..19) encompasses?(sizes, value.to_s.size) end