class CurpGenerator::Curp

Constants

MissingParamError
PARAMS_TO_VALIDATE

Public Class Methods

new(data = {}) click to toggle source
# File lib/curp.rb, line 20
def initialize(data = {})
  @first_name       = data.dig(:first_name)
  @second_name      = data.dig(:second_name)
  @first_last_name  = parse_attribute(data.dig(:first_last_name))
  @second_last_name = parse_attribute(data.dig(:second_last_name)) || ''
  @birth_date       = data.dig(:birth_date)
  @birth_state      = parse_attribute(data.dig(:birth_state))
  @gender           = data.dig(:gender)
end

Public Instance Methods

generate() click to toggle source
# File lib/curp.rb, line 30
def generate
  validate_params

  prefix = partial_curp
  prefix + verifying_digit(prefix)
end

Private Instance Methods

first_four_curp_digits() click to toggle source
# File lib/curp.rb, line 74
def first_four_curp_digits
  @first_four_curp_digits ||=
    first_last_name_element.first_character +
    first_last_name_element.next_vowel +
    second_last_name_element.first_character +
    first_name_element.first_character
end
first_last_name_element() click to toggle source
# File lib/curp.rb, line 82
def first_last_name_element
  @first_last_name_element ||= CurpGenerator::Element.new(@first_last_name)
end
first_name_element() click to toggle source
# File lib/curp.rb, line 90
def first_name_element
  @first_name_element ||= CurpGenerator::Element.new(validate_first_name)
end
gender_character() click to toggle source
# File lib/curp.rb, line 62
def gender_character
  @gender == 'male' ? 'H' : 'M'
end
homoclave_digit() click to toggle source
# File lib/curp.rb, line 70
def homoclave_digit
  @birth_date.year < 2000 ? '0' : 'A'
end
partial_curp() click to toggle source
# File lib/curp.rb, line 45
def partial_curp
  validate_first_four_curp_digits +
  parse_date(@birth_date, "%y") +
  parse_date(@birth_date, "%m") +
  parse_date(@birth_date, "%d") +
  gender_character +
  state_code +
  first_last_name_element.next_consonant +
  second_last_name_element.next_consonant +
  first_name_element.next_consonant +
  homoclave_digit
end
second_last_name_element() click to toggle source
# File lib/curp.rb, line 86
def second_last_name_element
  @second_last_name_element ||= CurpGenerator::Element.new(@second_last_name)
end
state_code() click to toggle source
# File lib/curp.rb, line 66
def state_code
  STATES.dig(@birth_state.upcase) || 'NE'
end
validate_first_four_curp_digits() click to toggle source
# File lib/curp.rb, line 58
def validate_first_four_curp_digits
  FORBIDDEN_WORDS.dig(first_four_curp_digits) || first_four_curp_digits
end
validate_first_name() click to toggle source
# File lib/curp.rb, line 94
def validate_first_name
  name = parse_attribute(@first_name)
  COMMON_NAMES.include?(name) ? @second_name : name
end
validate_params() click to toggle source
# File lib/curp.rb, line 39
def validate_params
  PARAMS_TO_VALIDATE.each do |param|
    raise MissingParamError, "Missing #{param}" if blank_string?(instance_variable_get("@#{param}"))
  end
end