From 8d4a4c437bf09203419ddb5864c30eeb526f3035 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Mon, 22 Sep 2014 14:01:56 +0300 Subject: [PATCH] Custom uniq validation for domain contacts --- app/models/domain.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/app/models/domain.rb b/app/models/domain.rb index 877b199f9..a6b84aba4 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -40,6 +40,8 @@ class Domain < ActiveRecord::Base validate :validate_period validate :validate_nameservers_count 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 attr_accessor :adding_admin_contact @@ -126,6 +128,27 @@ class Domain < ActiveRecord::Base 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 return unless period.present? if period_unit == 'd'