lib/representable/binding.rb in representable-1.2.9 vs lib/representable/binding.rb in representable-1.3.0

- old
+ new

@@ -8,13 +8,14 @@ def definition # TODO: remove in 1.4. raise "Binding#definition is no longer supported as all Definition methods are now delegated automatically." end - def initialize(definition, represented) + def initialize(definition, represented, user_options={}) # TODO: remove default arg. super(definition) - @represented = represented + @represented = represented + @user_options = user_options end # Main entry point for rendering/parsing a property object. def serialize(value) value @@ -22,11 +23,38 @@ def deserialize(fragment) fragment end + + def write_fragment(doc, value) + value = default_for(value) + + write_fragment_for(value, doc) + end + + def write_fragment_for(value, doc) + return if skipable_nil_value?(value) + write(doc, value) + end + + def read_fragment(doc) + value = read_fragment_for(doc) + + if value == FragmentNotFound + return unless has_default? + value = default + end + + yield value + end + + def read_fragment_for(doc) + read(doc) + end + # Hooks into #serialize and #deserialize to extend typed properties # at runtime. module Extend # Extends the object with its representer before serialization. def serialize(*) @@ -60,15 +88,15 @@ include Binding::Extend # provides #serialize/#deserialize with extend. def serialize(object) return object if object.nil? - super.send(serialize_method, :wrap => false) # TODO: pass :binding => self + super.send(serialize_method, @user_options.merge!({:wrap => false})) # TODO: pass :binding => self end def deserialize(data) # DISCUSS: does it make sense to skip deserialization of nil-values here? - super(create_object(data)).send(deserialize_method, data) + super(create_object(data)).send(deserialize_method, data, @user_options) end def create_object(fragment) instance_for(fragment) or class_for(fragment) end