class Rackson::ObjectMapper
Public Instance Methods
deserialize(input, klass)
click to toggle source
# File lib/rackson/object_mapper.rb, line 5 def deserialize(input, klass) case input when String deserialize(JSON.parse(input), klass) when Hash deserialize_from_hash(input, klass) when Array deserialize_into_array(input, klass) end end
deserialize_from_hash(hash, klass)
click to toggle source
# File lib/rackson/object_mapper.rb, line 20 def deserialize_from_hash(hash, klass) klass.new.tap do |instance| klass.instance_variable_get(:@json_properties).each do |property| value = generate_value property, hash instance.instance_variable_set("@#{property.name}", value) end end end
deserialize_into_array(array, klass)
click to toggle source
# File lib/rackson/object_mapper.rb, line 29 def deserialize_into_array(array, klass) array.map do |value| deserialize(value, klass) end end
serialize(input)
click to toggle source
# File lib/rackson/object_mapper.rb, line 16 def serialize(input) JSON.dump(input.serializable_hash) end
Private Instance Methods
generate_value(property, json_hash)
click to toggle source
# File lib/rackson/object_mapper.rb, line 37 def generate_value(property, json_hash) value_from_json = json_hash.fetch(property.name.to_s) do |key| if property.required? raise "missing required key #{key}" end end case value_from_json # already cast to the appropriate class when property.klass value_from_json # needs to be deserialized into its own object when Hash deserialize_from_hash(value_from_json, property.klass) when NilClass nil else raise "type mismatch between #{value_from_json.inspect} (a #{value_from_json.class}) and #{property.klass}" end end