Method: JsonMessage.from_decoded_json

Defined in:
lib/json_message.rb

.from_decoded_json(dec_json) ⇒ Object

Raises:



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 = {}

  # Treat null values as if the keys aren't present. This isn't as strict
  # as one would like, but conforms to typical use cases.
  dec_json.delete_if {|k, v| v == nil}

  # Collect errors by field
  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