class BrDocuments::Suframa

Public Class Methods

new(number) click to toggle source
# File lib/br_documents/suframa.rb, line 7
def initialize(number)
  @number = number
end

Public Instance Methods

formatted() click to toggle source
# File lib/br_documents/suframa.rb, line 11
def formatted
  valid? ? format_number : ''
end
valid?() click to toggle source
# File lib/br_documents/suframa.rb, line 15
def valid?
  valid_pattern? &&
    !sequence_of_equal_numbers? &&
    valid_check_digit?
end

Private Instance Methods

format_number() click to toggle source
# File lib/br_documents/suframa.rb, line 42
def format_number
  @number.sub(/(\d{2})(\d{4})(\d{3})/, '\\1.\\2.\\3')
end
number_without_mask() click to toggle source
# File lib/br_documents/suframa.rb, line 31
def number_without_mask
  @number_without_mask ||= @number.delete('.')
end
sequence_of_equal_numbers?() click to toggle source
# File lib/br_documents/suframa.rb, line 27
def sequence_of_equal_numbers?
  number_without_mask.chars.uniq.length == 1
end
valid_check_digit?() click to toggle source
# File lib/br_documents/suframa.rb, line 35
def valid_check_digit?
  weights = [9, 8, 7, 6, 5, 4, 3, 2]

  check_digit = generate_check_digit(number_without_mask, weights)
  number_without_mask[8] == check_digit.to_s
end
valid_pattern?() click to toggle source
# File lib/br_documents/suframa.rb, line 23
def valid_pattern?
  /^(\d{2}\.\d{4}\.\d{3})$|^(\d{9})$/.match(@number).present?
end