Sha256: b7ead05c32a12e5acdd6adb7a84b6be43fc822b1bc82485b8eceb8ab181fbe34
Contents?: true
Size: 1.71 KB
Versions: 2
Compression:
Stored size: 1.71 KB
Contents
require 'representable/binding' module Representable module JSON module ObjectBinding include Binding::Object def serialize_method :to_hash end def deserialize_method :from_hash end end class JSONBinding < Representable::Binding def initialize(definition) # FIXME. make generic. super extend ObjectBinding if definition.typed? end def read(hash) return FragmentNotFound unless hash.has_key?(definition.from) # DISCUSS: put it all in #read for performance. not really sure if i like returning that special thing. fragment = hash[definition.from] deserialize_from(fragment) end def write(hash, value) hash[definition.from] = serialize_for(value) end end class PropertyBinding < JSONBinding def serialize_for(value) serialize(value) end def deserialize_from(fragment) deserialize(fragment) end end class CollectionBinding < JSONBinding def serialize_for(value) value.collect { |obj| serialize(obj) } end def deserialize_from(fragment) fragment.collect { |item_fragment| deserialize(item_fragment) } end end class HashBinding < JSONBinding def serialize_for(value) # requires value to respond to #each with two block parameters. {}.tap do |hash| value.each { |key, obj| hash[key] = serialize(obj) } end end def deserialize_from(fragment) fragment.each { |key, item_fragment| fragment[key] = deserialize(item_fragment) } end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
representable-1.2.5 | lib/representable/bindings/json_bindings.rb |
representable-1.2.4 | lib/representable/bindings/json_bindings.rb |