mirror of
https://github.com/internetee/registry.git
synced 2025-05-17 09:57:23 +02:00
Refactor domain contact uniq validation method
This commit is contained in:
parent
cd7151b463
commit
dd38b7dfe6
2 changed files with 20 additions and 24 deletions
|
@ -59,8 +59,16 @@ class Domain < ActiveRecord::Base
|
||||||
|
|
||||||
validates :nameservers, uniqueness_multi: { attribute: 'hostname' }
|
validates :nameservers, uniqueness_multi: { attribute: 'hostname' }
|
||||||
|
|
||||||
validate :validate_tech_contacts_uniqueness
|
validates :tech_domain_contacts, uniqueness_multi: {
|
||||||
validate :validate_admin_contacts_uniqueness
|
association: 'domain_contacts',
|
||||||
|
attribute: 'contact_code_cache'
|
||||||
|
}
|
||||||
|
|
||||||
|
validates :admin_domain_contacts, uniqueness_multi: {
|
||||||
|
association: 'domain_contacts',
|
||||||
|
attribute: 'contact_code_cache'
|
||||||
|
}
|
||||||
|
|
||||||
validates :domain_statuses, uniqueness_multi: { attribute: 'value' }
|
validates :domain_statuses, uniqueness_multi: { attribute: 'value' }
|
||||||
validates :dnskeys, uniqueness_multi: { attribute: 'public_key' }
|
validates :dnskeys, uniqueness_multi: { attribute: 'public_key' }
|
||||||
validate :validate_nameserver_ips
|
validate :validate_nameserver_ips
|
||||||
|
@ -71,6 +79,14 @@ class Domain < ActiveRecord::Base
|
||||||
# if proc works only on changes on domain sadly
|
# if proc works only on changes on domain sadly
|
||||||
has_paper_trail class_name: 'DomainVersion', meta: { snapshot: :create_snapshot }, if: proc(&:new_version)
|
has_paper_trail class_name: 'DomainVersion', meta: { snapshot: :create_snapshot }, if: proc(&:new_version)
|
||||||
|
|
||||||
|
def tech_domain_contacts
|
||||||
|
domain_contacts.select { |x| x.contact_type == DomainContact::TECH }
|
||||||
|
end
|
||||||
|
|
||||||
|
def admin_domain_contacts
|
||||||
|
domain_contacts.select { |x| x.contact_type == DomainContact::ADMIN }
|
||||||
|
end
|
||||||
|
|
||||||
def new_version
|
def new_version
|
||||||
return false if versions.try(:last).try(:snapshot) == create_snapshot
|
return false if versions.try(:last).try(:snapshot) == create_snapshot
|
||||||
true
|
true
|
||||||
|
@ -160,27 +176,6 @@ class Domain < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_tech_contacts_uniqueness
|
|
||||||
contacts = domain_contacts.reject(&:marked_for_destruction?).select { |x| x.contact_type == DomainContact::TECH }
|
|
||||||
validate_domain_contacts_uniqueness(contacts)
|
|
||||||
end
|
|
||||||
|
|
||||||
def validate_admin_contacts_uniqueness
|
|
||||||
contacts = domain_contacts.reject(&:marked_for_destruction?).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, :invalid) if errors[:domain_contacts].blank?
|
|
||||||
dc.errors.add(:contact_code_cache, :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'
|
||||||
|
|
|
@ -7,7 +7,8 @@ class UniquenessMultiValidator < ActiveModel::EachValidator
|
||||||
existing = list.select { |y| x.send(options[:attribute]) == y.send(options[:attribute]) }
|
existing = list.select { |y| x.send(options[:attribute]) == y.send(options[:attribute]) }
|
||||||
next unless existing.length > 1
|
next unless existing.length > 1
|
||||||
validated << x.send(options[:attribute])
|
validated << x.send(options[:attribute])
|
||||||
record.errors.add(attribute, :invalid) if record.errors[attribute].blank?
|
association = options[:association] || attribute
|
||||||
|
record.errors.add(association, :invalid) if record.errors[association].blank?
|
||||||
x.errors.add(options[:attribute], :taken)
|
x.errors.add(options[:attribute], :taken)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue