module ValidatesSpanishDocuments::InstanceMethods
rubocop:disable Metrics/ModuleLength
Private Class Methods
included(base)
click to toggle source
Call nss validators
# File lib/validates_spanish_documents.rb, line 180 def included(base) base.send(:validate, :nss_validators) end
Private Instance Methods
check_if(condition)
click to toggle source
rubocop:enable Metrics/CyclomaticComplexity
# File lib/validates_spanish_documents.rb, line 171 def check_if(condition) return send(condition) if condition.class == String || condition.class == Symbol return condition.call if condition.class == Proc true end
cif_valid?(field_name)
click to toggle source
Check validate CIF
# File lib/validates_spanish_documents.rb, line 70 def cif_valid?(field_name) if send(field_name) =~ REGEX_CIF number = Regexp.last_match(2) first_letter = Regexp.last_match(1) province_code = number[0..1] actual_control = Regexp.last_match(3) total = number .split('') .each_with_index .inject(0) do |acc, (element, index)| acc + if index.even? (element.to_i * 2).digits.inject(:+) else element.to_i end end decimal = total.digits.first expected_control = decimal != 0 ? 10 - decimal : decimal # Control code must be a letter return LETTERS_CIF_CONTROL[expected_control] if LETTERS_CIF_NUMBER.include?(first_letter) || province_code == '00' # Control code will be a number or a letter return [expected_control.to_s, LETTERS_CIF_CONTROL[expected_control]].include?(actual_control) end false end
dni_valid?(field_name)
click to toggle source
Check validate DNI
# File lib/validates_spanish_documents.rb, line 43 def dni_valid?(field_name) if send(field_name) =~ REGEX_DNI number = Regexp.last_match(1).to_i position = number % 23 control_code = Regexp.last_match(2) return true if control_code == LETTERS_DNI[position] end false end
nie_valid?(field_name)
click to toggle source
Check validate NIE
# File lib/validates_spanish_documents.rb, line 56 def nie_valid?(field_name) if send(field_name) =~ REGEX_NIE number_first = LETTERS_NIE.index(Regexp.last_match(1)) number = (number_first.to_s + Regexp.last_match(2)).to_i position = number % 23 control_code = Regexp.last_match(3) return true if control_code == LETTERS_DNI[position] end false end
nif_valid?(field_name)
click to toggle source
Check validate nif
# File lib/validates_spanish_documents.rb, line 23 def nif_valid?(field_name) if send(field_name).match?(REGEX_DNI) dni_valid?(field_name) elsif send(field_name).match?(REGEX_NIE) nie_valid?(field_name) else cif_valid?(field_name) end end
nss_validators()
click to toggle source
Call all validations rubocop:disable Metrics/CyclomaticComplexity
# File lib/validates_spanish_documents.rb, line 156 def nss_validators self.class.nss_validations.each do |item| next if send(item[:field_name]).blank? || (item[:if] && !check_if(item[:if])) case item[:validation] when :nif then send(:validate_nss_nif, item[:field_name]) when :dni then send(:validate_nss_dni, item[:field_name]) when :cif then send(:validate_nss_cif, item[:field_name]) when :nie then send(:validate_nss_nie, item[:field_name]) when :person_nif then send(:validate_nss_person_nif, item[:field_name]) end end end
person_nif_valid?(field_name)
click to toggle source
Check validate PERSON NIF
# File lib/validates_spanish_documents.rb, line 34 def person_nif_valid?(field_name) if send(field_name).match?(REGEX_DNI) dni_valid?(field_name) else nie_valid?(field_name) end end
validate_nss_cif(field_name)
click to toggle source
Validate CIF method es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal
# File lib/validates_spanish_documents.rb, line 145 def validate_nss_cif(field_name) unless cif_valid?(field_name) errors.add field_name, :invalid false end true end
validate_nss_dni(field_name)
click to toggle source
Validate DNI method
# File lib/validates_spanish_documents.rb, line 124 def validate_nss_dni(field_name) unless dni_valid?(field_name) errors.add field_name, :invalid false end true end
validate_nss_nie(field_name)
click to toggle source
Validate NIE method
# File lib/validates_spanish_documents.rb, line 134 def validate_nss_nie(field_name) unless nie_valid?(field_name) errors.add field_name, :invalid false end true end
validate_nss_nif(field_name)
click to toggle source
Validate NIF method
# File lib/validates_spanish_documents.rb, line 104 def validate_nss_nif(field_name) unless nif_valid?(field_name) errors.add field_name, :invalid false end true end
validate_nss_person_nif(field_name)
click to toggle source
Validate NIF method
# File lib/validates_spanish_documents.rb, line 114 def validate_nss_person_nif(field_name) unless person_nif_valid?(field_name) errors.add field_name, :invalid false end true end