77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/json_message.rb', line 77
def from_decoded_json(dec_json)
raise ParseError, "Decoded JSON cannot be nil" unless dec_json
errs = {}
dec_json.delete_if {|k, v| v == nil}
fields.each do |name, field|
err = nil
if dec_json.has_key?(name.to_s)
begin
field.validate(dec_json[name.to_s])
rescue ValidationError => e
err = e.errors[name]
end
elsif field.required
err = "Missing field #{name}"
end
errs[name] = err if err
end
raise ValidationError.new(errs) unless errs.empty?
new(dec_json)
end
|