Class: ActiveModel::Validations::SirenValidator
- Inherits:
-
EachValidator
- Object
- EachValidator
- ActiveModel::Validations::SirenValidator
- Defined in:
- lib/active_model/validations/siren_validator.rb
Instance Method Summary collapse
-
#valid_siren?(input) ⇒ Boolean
Validates siren format according to fr.wikipedia.org/wiki/SIREN.
- #validate_each(record, attribute, value) ⇒ Object
Instance Method Details
#valid_siren?(input) ⇒ Boolean
Validates siren format according to fr.wikipedia.org/wiki/SIREN
6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/active_model/validations/siren_validator.rb', line 6 def valid_siren?(input) str = input.to_s reversed_array = str.split('').reverse digits = reversed_array.each_with_index.map do |char, i| coeff = (i % 2) + 1 (char.to_i * coeff).to_s.split('') end sum = digits.flatten.map(&:to_i).inject(:+) (sum % 10) == 0 end |
#validate_each(record, attribute, value) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/active_model/validations/siren_validator.rb', line 20 def validate_each(record, attribute, value) if value.nil? record.errors.add_on_blank(attribute) else if value.to_s.length != 9 record.errors.add attribute, :length else record.errors.add attribute, :format unless valid_siren?(value) end end end |