Refactor epp_errors and add attribute to msg

This commit is contained in:
Priit Tark 2015-03-04 17:15:43 +02:00
parent ac6361df05
commit fdac633f07

View file

@ -3,42 +3,42 @@ module EppErrors
def construct_epp_errors def construct_epp_errors
epp_errors = [] epp_errors = []
errors.messages.each do |key, values| errors.messages.each do |attr, errors|
key = key.to_s.split('.')[0].to_sym attr = attr.to_s.split('.')[0].to_sym
next if key == :epp_errors next if attr == :epp_errors
if self.class.reflect_on_association(key) if self.class.reflect_on_association(attr)
epp_errors << collect_child_errors(key) epp_errors << collect_child_errors(attr)
end end
epp_errors << collect_parent_errors(values) epp_errors << collect_parent_errors(attr, errors)
end end
errors[:epp_errors] = epp_errors errors[:epp_errors] = epp_errors
errors[:epp_errors].flatten! errors[:epp_errors].flatten!
end end
def collect_parent_errors(values) def collect_parent_errors(attr, errors)
epp_errors = [] errors = [errors] if errors.is_a?(String)
values = [values] if values.is_a?(String)
values.each do |err| epp_errors = []
errors.each do |err|
code, value = find_epp_code_and_value(err) code, value = find_epp_code_and_value(err)
next unless code next unless code
epp_errors << { code: code, msg: err, value: value } epp_errors << { code: code, msg: "#{err} [#{attr}]", value: value }
end end
epp_errors epp_errors
end end
def collect_child_errors(key) def collect_child_errors(attr)
macro = self.class.reflect_on_association(key).macro macro = self.class.reflect_on_association(attr).macro
multi = [:has_and_belongs_to_many, :has_many] multi = [:has_and_belongs_to_many, :has_many]
# single = [:belongs_to, :has_one] # single = [:belongs_to, :has_one]
epp_errors = [] epp_errors = []
send(key).each do |x| send(attr).each do |x|
x.errors.messages.each do |_key, values| x.errors.messages.each do |attribute, errors|
epp_errors << x.collect_parent_errors(values) epp_errors << x.collect_parent_errors(attribute, errors)
end end
end if multi.include?(macro) end if multi.include?(macro)