class BraDocuments::NationalRegisterBase

Constants

BASE
NOT_NUMBER_PATTERN

Private Class Methods

complete!(numbers) click to toggle source
# File lib/bra_documents/national_register_base.rb, line 11
def complete!(numbers)
  2.times { numbers.push(verification_digit_for(numbers)) }
  numbers.join
end
number_for(number_description, number_size, given_value) click to toggle source
# File lib/bra_documents/national_register_base.rb, line 16
def number_for(number_description, number_size, given_value)
  given_value = only_digits_for(given_value)
  if !given_value.to_s.empty?
    raise ArgumentError, "#{number_description} number must be a number with #{number_size} digits." unless given_value.size == number_size
    given_value.split('').map(&:to_i)
  else
    number_with(number_size)
  end
end
number_with(size) click to toggle source
# File lib/bra_documents/national_register_base.rb, line 26
def number_with(size)
  size.times.map { rand(10) }
end
only_digits_for(number) click to toggle source
# File lib/bra_documents/national_register_base.rb, line 30
def only_digits_for(number)
  number.to_s.gsub(NOT_NUMBER_PATTERN, '')
end
sum_and_multiply(numbers, multiplicators) click to toggle source
# File lib/bra_documents/national_register_base.rb, line 45
def sum_and_multiply(numbers, multiplicators)
  multiplicators.map
    .with_index { |multiplicator, position| numbers[position] * multiplicator }
    .sum
end
verification_digit_for(numbers) click to toggle source
# File lib/bra_documents/national_register_base.rb, line 34
def verification_digit_for(numbers)
  verification_digit_multiplicators = verification_digit_multiplicators_for(numbers)
  sum_and_multiplication = sum_and_multiply(numbers, verification_digit_multiplicators)
  verified_digit(sum_and_multiplication)
end
verified_digit(sum_and_multiplication) click to toggle source
# File lib/bra_documents/national_register_base.rb, line 40
def verified_digit(sum_and_multiplication)
  rest = sum_and_multiplication % BASE
  rest < 2 ? 0 : BASE - rest
end