Refactor some validaors to different file

This commit is contained in:
Martin Lensment 2015-01-02 11:31:59 +02:00
parent 7ebec5ad5d
commit cd7151b463
3 changed files with 26 additions and 42 deletions

View file

@ -56,11 +56,13 @@ class Domain < ActiveRecord::Base
validate :validate_nameservers_count
validate :validate_admin_contacts_count
validate :validate_dnskeys_count
validate :validate_nameservers_uniqueness
validates :nameservers, uniqueness_multi: { attribute: 'hostname' }
validate :validate_tech_contacts_uniqueness
validate :validate_admin_contacts_uniqueness
validate :validate_domain_statuses_uniqueness
validate :validate_dnskeys_uniqueness
validates :domain_statuses, uniqueness_multi: { attribute: 'value' }
validates :dnskeys, uniqueness_multi: { attribute: 'public_key' }
validate :validate_nameserver_ips
attr_accessor :owner_contact_typeahead, :update_me
@ -149,19 +151,6 @@ class Domain < ActiveRecord::Base
errors.add(:dnskeys, :out_of_range, { min: min, max: max })
end
def validate_nameservers_uniqueness
validated = []
list = nameservers.reject(&:marked_for_destruction?)
list.each do |ns|
next if ns.hostname.blank?
existing = list.select { |x| x.hostname == ns.hostname }
next unless existing.length > 1
validated << ns.hostname
errors.add(:nameservers, :invalid) if errors[:nameservers].blank?
ns.errors.add(:hostname, :taken)
end
end
def validate_nameserver_ips
nameservers.each do |ns|
next unless ns.hostname.end_with?(name)
@ -192,32 +181,6 @@ class Domain < ActiveRecord::Base
end
end
def validate_domain_statuses_uniqueness
validated = []
list = domain_statuses.reject(&:marked_for_destruction?)
list.each do |status|
next if status.value.blank?
existing = list.select { |x| x.value == status.value }
next unless existing.length > 1
validated << status.value
errors.add(:domain_statuses, :invalid) if errors[:domain_statuses].blank?
status.errors.add(:value, :taken)
end
end
def validate_dnskeys_uniqueness
validated = []
list = dnskeys.reject(&:marked_for_destruction?)
list.each do |dnskey|
next if dnskey.public_key.blank?
existing = list.select { |x| x.public_key == dnskey.public_key }
next unless existing.length > 1
validated << dnskey.public_key
errors.add(:dnskeys, :invalid) if errors[:dnskeys].blank?
dnskey.errors.add(:public_key, :taken)
end
end
def validate_period
return unless period.present?
if period_unit == 'd'

View file

@ -0,0 +1,14 @@
class UniquenessMultiValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
validated = []
list = value.reject(&:marked_for_destruction?)
list.each do |x|
next if x.send(options[:attribute]).blank?
existing = list.select { |y| x.send(options[:attribute]) == y.send(options[:attribute]) }
next unless existing.length > 1
validated << x.send(options[:attribute])
record.errors.add(attribute, :invalid) if record.errors[attribute].blank?
x.errors.add(options[:attribute], :taken)
end
end
end

View file

@ -980,6 +980,13 @@ describe 'EPP Domain', epp: true do
expect(response[:results][4][:msg]).to eq('Status already exists on this domain')
expect(response[:results][4][:value]).to eq('clientUpdateProhibited')
expect(response[:results][5][:msg]).to eq('Public key already exists')
expect(response[:results][5][:value]).to eq('700b97b591ed27ec2590d19f06f88bba700b97b591ed27ec2590d19f')
expect(response[:results][6][:msg]).to eq('Public key already exists')
expect(response[:results][6][:value]).to eq('841936717ae427ace63c28d04918569a841936717ae427ace63c28d0')
expect(d.domain_statuses.count).to eq(2)
end