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