class Cdigits::Luhn::Placeholder
Constants
- CHECK_DIGIT_SYMBOL
@note any good idia?
- NON_ZERO_SYMBOL
- NUMERIC_SYMBOL
Public Class Methods
new(characters)
click to toggle source
@param [Array<String>] characters
# File lib/cdigits/luhn/placeholder.rb, line 14 def initialize(characters) @characters = characters end
Public Instance Methods
fill(placeholder)
click to toggle source
Generate code @param [String] placeholder @return [String]
# File lib/cdigits/luhn/placeholder.rb, line 21 def fill(placeholder) codes = [] store = build_store(placeholder) do |char, digit| codes << (digit.nil? ? char : nil) end store.fill_check_digit generate_code(codes, store.digits) end
valid?(placeholder)
click to toggle source
Validate code @param [String] placeholder @return [Boolean]
# File lib/cdigits/luhn/placeholder.rb, line 34 def valid?(placeholder) store = build_store(placeholder) (store.sum % modulus).zero? end
Private Instance Methods
build_store(placeholder) { |char, digit| ... }
click to toggle source
# File lib/cdigits/luhn/placeholder.rb, line 45 def build_store(placeholder) store = ::Cdigits::Luhn::Store.new(modulus: modulus) placeholder.chars.each do |char| digit = generate_digit(char, store) yield char, digit if block_given? end store end
generate_code(chars, digits)
click to toggle source
# File lib/cdigits/luhn/placeholder.rb, line 54 def generate_code(chars, digits) chars.map do |char| char || @characters[digits.shift] end.join end
generate_digit(char, store)
click to toggle source
# File lib/cdigits/luhn/placeholder.rb, line 60 def generate_digit(char, store) case char when NON_ZERO_SYMBOL store.append_non_zero_number when NUMERIC_SYMBOL store.append_number when CHECK_DIGIT_SYMBOL store.initialize_check_digit when *@characters store.append(@characters.index(char)) end end
modulus()
click to toggle source
# File lib/cdigits/luhn/placeholder.rb, line 41 def modulus @modulus ||= @characters.size end