From 6b86af30489327075daa339953be8f26489e32d7 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Thu, 7 Aug 2014 14:19:36 +0300 Subject: [PATCH] Refactor epp errors to concern --- app/controllers/concerns/epp/common.rb | 27 ++++---------------------- app/helpers/epp/domains_helper.rb | 14 +------------ app/models/concerns/epp_errors.rb | 17 +++++++++------- app/models/domain.rb | 22 --------------------- 4 files changed, 15 insertions(+), 65 deletions(-) diff --git a/app/controllers/concerns/epp/common.rb b/app/controllers/concerns/epp/common.rb index a1d92b61d..74f3c025b 100644 --- a/app/controllers/concerns/epp/common.rb +++ b/app/controllers/concerns/epp/common.rb @@ -32,29 +32,10 @@ module Epp::Common @current_epp_user ||= EppUser.find(epp_session[:epp_user_id]) if epp_session[:epp_user_id] end - def handle_epp_errors(error_code_map, obj) - obj.errors.each do |key, msg| - if msg.is_a?(Hash) - epp_errors << { - code: find_code(error_code_map, msg[:msg]), - msg: msg[:msg], - value: {obj: msg[:obj], val: msg[:val]}, - } - else - next unless code = find_code(error_code_map, msg) - epp_errors << { - code: code, - msg: msg - } - end - end - end - - def find_code(error_code_map, msg) - error_code_map.each do |code, values| - return code if values.include?(msg) - end - nil + def handle_errors(obj) + obj.construct_epp_errors + @errors = obj.errors[:epp_errors] + render '/epp/error' end def validate_request diff --git a/app/helpers/epp/domains_helper.rb b/app/helpers/epp/domains_helper.rb index eb61bfc84..b73b1d231 100644 --- a/app/helpers/epp/domains_helper.rb +++ b/app/helpers/epp/domains_helper.rb @@ -6,10 +6,7 @@ module Epp::DomainsHelper if @domain.save && @domain.attach_contacts(domain_contacts) && @domain.attach_nameservers(domain_nameservers) render '/epp/domains/create' else - @domain.construct_epp_errors - - handle_errors - render '/epp/error' + handle_errors(@domain) raise ActiveRecord::Rollback end end @@ -76,13 +73,4 @@ module Epp::DomainsHelper return ph[:hostAttr] if ph[:hostAttr] [] end - - def handle_errors - handle_epp_errors({ - '2302' => ['Domain name already exists', 'Domain name is reserved or restricted'], - '2306' => ['Registrant is missing', 'Nameservers count must be between 1-13', 'Admin contact is missing'], - '2303' => ['Contact was not found'], - '2005' => ['Hostname is invalid', 'IP is invalid'] - }, @domain) - end end diff --git a/app/models/concerns/epp_errors.rb b/app/models/concerns/epp_errors.rb index a86b7bc69..7c2560cda 100644 --- a/app/models/concerns/epp_errors.rb +++ b/app/models/concerns/epp_errors.rb @@ -1,7 +1,6 @@ module EppErrors extend ActiveSupport::Concern - EPP_CODE_MAP = { '2302' => ['Domain name already exists', 'Domain name is reserved or restricted'], '2306' => ['Registrant is missing', 'Nameservers count must be between 1-13', 'Admin contact is missing'], @@ -18,10 +17,10 @@ module EppErrors epp_errors = [] errors.messages.each do |key, values| if self.class.reflect_on_association(key) - epp_errors = collect_child_errors(key, values) - else - epp_errors = collect_parent_errors(key, values) + epp_errors << collect_child_errors(key) end + + epp_errors << collect_parent_errors(key, values) end errors[:epp_errors] = epp_errors @@ -34,15 +33,19 @@ module EppErrors values.each do |err| if err.is_a?(Hash) - epp_errors << {code: find_epp_code(err[:msg]), msg: err[:msg], value: {val: err[:val], obj: err[:obj]}} + next unless code = find_epp_code(err[:msg]) + epp_errors << {code: code, msg: err[:msg], value: {val: err[:val], obj: err[:obj]}} else - epp_errors << {code: find_epp_code(err), msg: err, value: {val: send(key), obj: EPP_OBJ_MAP[key]}} + next unless code = find_epp_code(err) + err = {code: code, msg: err} + err[:value] = {val: send(key), obj: EPP_OBJ_MAP[key]} unless self.class.reflect_on_association(key) + epp_errors << err end end epp_errors end - def collect_child_errors(key, values) + def collect_child_errors(key) macro = self.class.reflect_on_association(key).macro multi = [:has_and_belongs_to_many, :has_many] single = [:belongs_to, :has_one] diff --git a/app/models/domain.rb b/app/models/domain.rb index bf0b6e015..486e377e8 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -2,8 +2,6 @@ class Domain < ActiveRecord::Base #TODO whois requests ip whitelist for full info for own domains and partial info for other domains #TODO most inputs should be trimmed before validatation, probably some global logic? - - include EppErrors belongs_to :registrar @@ -77,8 +75,6 @@ class Domain < ActiveRecord::Base save - # add_child_collection_errors(:nameservers, :ns) - validate_nameservers_count errors.empty? @@ -102,24 +98,6 @@ class Domain < ActiveRecord::Base self.nameservers.build(attrs) end - def add_child_collection_errors(attr_key, epp_obj_name) - send(attr_key).each do |obj| - obj.errors.keys.each do |key| - add_errors_with_value(attr_key, epp_obj_name, obj, key) - end - end - end - - def add_errors_with_value(attr_key, epp_obj_name, obj, key) - obj.errors[key].each do |x| - errors.add(attr_key, { - obj: epp_obj_name, - val: obj.send(key), - msg: x - }) - end - end - def validate_nameservers_count unless nameservers.count.between?(1, 13) errors.add(:nameservers, :out_of_range, {min: 1, max: 13})