mirror of
https://github.com/internetee/registry.git
synced 2025-05-16 17:37:17 +02:00
Refactor some validaors to different file
This commit is contained in:
parent
7ebec5ad5d
commit
cd7151b463
3 changed files with 26 additions and 42 deletions
|
@ -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'
|
||||
|
|
14
app/validators/uniqueness_multi_validator.rb
Normal file
14
app/validators/uniqueness_multi_validator.rb
Normal 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
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue