Class: SerialBox::Serializer
- Inherits:
-
Object
- Object
- SerialBox::Serializer
- Defined in:
- lib/serialbox.rb
Overview
An object that is used to define how a class is serialized. The methods of this object can be called within a block given to ClassMethods#serialize_fields.
Defined Under Namespace
Classes: BlockDeserialization, BlockSerialization
Instance Attribute Summary collapse
- #deserialization_operations ⇒ Object readonly
- #object ⇒ Object readonly
- #serialization_operations ⇒ Object readonly
Instance Method Summary collapse
-
#deserializer(json_field, object_method = nil, &block) ⇒ Object
Defines how a field is handled when an object is deserialized from its primitive representation.
-
#initialize(object) ⇒ Serializer
constructor
A new instance of Serializer.
-
#serialize(field, ..., options = {}) ⇒ Object
Specifies that one or more fields should be serialized in the most obvious manner.
-
#serializer(json_field, object_method = nil, &block) ⇒ Object
Defines how a field is handled when an object is prepared for serialization.
Constructor Details
#initialize(object) ⇒ Serializer
Returns a new instance of Serializer.
67 68 69 70 71 |
# File 'lib/serialbox.rb', line 67 def initialize(object) @serialization_operations = Array.new @deserialization_operations = Array.new @object = object end |
Instance Attribute Details
#deserialization_operations ⇒ Object (readonly)
64 65 66 |
# File 'lib/serialbox.rb', line 64 def deserialization_operations @deserialization_operations end |
#object ⇒ Object (readonly)
64 65 66 |
# File 'lib/serialbox.rb', line 64 def object @object end |
#serialization_operations ⇒ Object (readonly)
64 65 66 |
# File 'lib/serialbox.rb', line 64 def serialization_operations @serialization_operations end |
Instance Method Details
#deserializer(json_field, object_method) ⇒ Object #deserializer(json_field) {|value| ... } ⇒ Object
Defines how a field is handled when an object is deserialized from its primitive representation.
156 157 158 159 160 161 162 163 164 |
# File 'lib/serialbox.rb', line 156 def deserializer(json_field, object_method=nil, &block) if block_given? @deserialization_operations << BlockDeserialization.new(json_field, block, object) elsif object_method @deserialization_operations << BlockDeserialization.new(json_field, lambda { |value| send object_method, value }, object) else raise ArgumentError, "Must provide the name of a method or a block that sets a field from a deserialized value" end end |
#serialize(field, ..., options = {}) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/serialbox.rb', line 87 def serialize(*fields) = fields. if [:into] && fields.size > 1 raise ArgumentError, "Can't specify :into option with multiple fields" end fields.each do |field| if field.to_s[0, 1] == '@' field = field.to_s[1..-1] json_field = [:into] || field serializer(json_field) { instance_variable_get :"@#{field}" } deserializer(json_field) { |value| instance_variable_set :"@#{field}", value } else json_field = [:into] || field serializer json_field, field deserializer json_field, :"#{field}=" end end end |
#serializer(json_field, object_method) ⇒ Object #serializer(json_field) { ... } ⇒ Object
Defines how a field is handled when an object is prepared for serialization.
126 127 128 129 130 131 132 133 134 |
# File 'lib/serialbox.rb', line 126 def serializer(json_field, object_method=nil, &block) if block_given? @serialization_operations << BlockSerialization.new(json_field, block) elsif object_method @serialization_operations << BlockSerialization.new(json_field, lambda { send object_method }) else raise ArgumentError, "Must provide the name of a method or a block that returns a value to serialize" end end |