class BraDocumentValidation::CPFValidator
Constants
- FORMATTED_CPF_PATTERN
- NOT_NUMBER_PATTERN
- RAW_CPF_PATTERN
Public Instance Methods
validate_each(record, attribute, value)
click to toggle source
# File lib/bra_document_validation/cpf_validator.rb, line 9 def validate_each(record, attribute, value) return record.errors.add(attribute, error_message(:invalid_format)) unless document_format.match?(value.to_s) full_number = only_numbers_for(value.to_s) record.errors.add(attribute, error_message(:invalid_verification_digit)) if black_listed?(full_number) || !digit_verified?(full_number) end
Private Instance Methods
black_listed?(number)
click to toggle source
# File lib/bra_document_validation/cpf_validator.rb, line 31 def black_listed?(number) number.chars.uniq.size == 1 end
digit_verified?(number)
click to toggle source
# File lib/bra_document_validation/cpf_validator.rb, line 17 def digit_verified?(number) person_number = number_without_verifying_digits_for(number) number == BraDocuments::CPFGenerator.generate(person_number: person_number) end
document_format()
click to toggle source
# File lib/bra_document_validation/cpf_validator.rb, line 35 def document_format options[:formatted] ? FORMATTED_CPF_PATTERN : RAW_CPF_PATTERN end
error_message(default_message)
click to toggle source
# File lib/bra_document_validation/cpf_validator.rb, line 39 def error_message(default_message) options.fetch(:message, default_message) end
number_without_verifying_digits_for(number)
click to toggle source
# File lib/bra_document_validation/cpf_validator.rb, line 23 def number_without_verifying_digits_for(number) number.chars.shift(BraDocuments::CPFGenerator::PERSON_NUMBER_SIZE).join end
only_numbers_for(value)
click to toggle source
# File lib/bra_document_validation/cpf_validator.rb, line 27 def only_numbers_for(value) value.gsub(NOT_NUMBER_PATTERN, '') end