def parse_messages(result, data)
raw = (result || {})['messages'] || []
raw.delete_if do |m|
m.delete_if{ |k,v| k.nil? || v.blank? } if m.is_a? Hash
m.blank?
end
warnings, messages, raw = Array(raw).inject([[],[],[]]) do |a, m|
severity, field, text = m.values_at('severity', 'field', 'text')
text = (text || "").gsub(/\A\n+/m, "").rstrip
case severity
when 'warning'
a[0] << text
when 'debug'
a[2] << m
a[1] << text if debug?
when 'info'
a[2] << m
a[1] << text if debug? || field == 'result'
else
a[2] << m
a[1] << text
end
a
end
if data.is_a?(Array)
data.each do |d|
d['messages'] = messages
d['warnings'] = warnings
end
elsif data.is_a?(Hash)
data['messages'] = messages
data['warnings'] = warnings
end
warnings.each do |warning|
unless (@warning_map ||= Set.new).include?(warning)
@warning_map << warning
warn warning
end
end if respond_to? :warn
raw
end