Sha256: ac1a3cb1343454731812895119e1dac7ce5e605961d6b2702c85a03846636048
Contents?: true
Size: 1.7 KB
Versions: 1
Compression:
Stored size: 1.7 KB
Contents
require 'representable/binding' module Representable module YAML module ObjectBinding include Binding::Object def serialize_method :to_ast end def deserialize_method :from_hash end def write_scalar(value) value end end class YAMLBinding < 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(map, value) map.children << Psych::Nodes::Scalar.new(definition.from) map.children << serialize_for(value) # FIXME: should be serialize. end end class PropertyBinding < YAMLBinding def serialize_for(value) write_scalar serialize(value) end def deserialize_from(fragment) deserialize(fragment) end def write_scalar(value) Psych::Nodes::Scalar.new(value.to_s) end end class CollectionBinding < PropertyBinding def serialize_for(value) Psych::Nodes::Sequence.new.tap do |seq| seq.style = Psych::Nodes::Sequence::FLOW if definition.options[:style] == :flow value.each { |obj| seq.children << super(obj) } end end def deserialize_from(fragment) fragment.collect { |item_fragment| deserialize(item_fragment) } end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
representable-1.2.5 | lib/representable/bindings/yaml_bindings.rb |