Custom uniq validation for domain contacts

This commit is contained in:
Martin Lensment 2014-09-22 14:01:56 +03:00
parent f65cf32991
commit 8d4a4c437b

View file

@ -40,6 +40,8 @@ class Domain < ActiveRecord::Base
validate :validate_period validate :validate_period
validate :validate_nameservers_count validate :validate_nameservers_count
validate :validate_nameservers_uniqueness, if: :new_record? validate :validate_nameservers_uniqueness, if: :new_record?
validate :validate_tech_contacts_uniqueness, if: :new_record?
validate :validate_admin_contacts_uniqueness, if: :new_record?
# validates_associated :nameservers # validates_associated :nameservers
attr_accessor :adding_admin_contact attr_accessor :adding_admin_contact
@ -126,6 +128,27 @@ class Domain < ActiveRecord::Base
end end
end end
def validate_tech_contacts_uniqueness
contacts = domain_contacts.select { |x| x.contact_type == DomainContact::TECH }
validate_domain_contacts_uniqueness(contacts)
end
def validate_admin_contacts_uniqueness
contacts = domain_contacts.select { |x| x.contact_type == DomainContact::ADMIN }
validate_domain_contacts_uniqueness(contacts)
end
def validate_domain_contacts_uniqueness(contacts)
validated = []
contacts.each do |dc|
existing = contacts.select { |x| x.contact_id == dc.contact_id }
next unless existing.length > 1
validated << dc
errors.add(:'domain_contacts.contact', 'duplicate')
dc.errors.add(:contact, :taken)
end
end
def validate_period def validate_period
return unless period.present? return unless period.present?
if period_unit == 'd' if period_unit == 'd'