module CardValidator::Validator::LuhnAlg

Public Class Methods

valid?(card) click to toggle source
# File lib/card_validator/validator/luhn_alg.rb, line 7
def valid?(card)
  sum_of_doubles(card) % 10 == 0
end

Private Class Methods

even?(num) click to toggle source
# File lib/card_validator/validator/luhn_alg.rb, line 25
def even?(num)
  num >= 2 && num % 2 == 0
end
sum_digits(num) click to toggle source
# File lib/card_validator/validator/luhn_alg.rb, line 29
def sum_digits(num)
  sum = 0
  num.to_s.split('').each do |dig|
    sum +=dig.to_i
  end
  sum
end
sum_of_doubles(card) click to toggle source
# File lib/card_validator/validator/luhn_alg.rb, line 13
def sum_of_doubles(card)
  doubles = card.split('').reverse.map.with_index do |num, ind|
    if even?(ind + 1)
      num = 2 * num.to_i
      num > 9 ? sum_digits(num) : num
    else
      num.to_i
    end
  end
  doubles.inject(0, :+)
end