Extract mismatch validator to separate class

#569
This commit is contained in:
Artur Beljajev 2017-09-12 14:55:41 +03:00
parent 4d5830efdf
commit d5197962ee
5 changed files with 40 additions and 28 deletions

View file

@ -12,7 +12,7 @@ class Contact::Ident
validates :type, presence: true, inclusion: { in: proc { types } }
validates :country_code, presence: true, iso31661_alpha2: true
validate :mismatched
validates_with MismatchValidator
def self.epp_code_map
{
@ -35,14 +35,6 @@ class Contact::Ident
%w[org priv birthday]
end
Mismatch = Struct.new(:type, :country)
def self.mismatches
[
Mismatch.new('birthday', Country.new('EE'))
]
end
def marked_for_destruction?
false
end
@ -66,10 +58,7 @@ class Contact::Ident
private
# https://github.com/rails/rails/issues/1513
def validation_context=(_value); end
def mismatched
mismatched = self.class.mismatches.include?(Mismatch.new(type, country))
errors.add(:base, :mismatch, type: type, country: country) if mismatched
def validation_context=(_value)
;
end
end

View file

@ -0,0 +1,20 @@
class Contact::Ident::MismatchValidator < ActiveModel::Validator
Mismatch = Struct.new(:type, :country)
def self.mismatches
[
Mismatch.new('birthday', Country.new('EE')),
]
end
def validate(record)
record.errors.add(:base, :mismatch, type: record.type, country: record.country) if mismatched?(record)
end
private
def mismatched?(record)
mismatch = Mismatch.new(record.type, record.country)
self.class.mismatches.include?(mismatch)
end
end