Module: AnyCable::Serializer
- Defined in:
- lib/anycable/serializer.rb
Overview
Serializer is responsible for converting Ruby objects to and from a transferrable format (e.g., for identifiers, connection/channel state, etc.). It relies on configurable ‘.object_serializer` to handle non-primitive values and handles Hash/Array seririlzation.
Class Attribute Summary collapse
-
.object_serializer ⇒ Object
Returns the value of attribute object_serializer.
Class Method Summary collapse
-
.deserialize(val) ⇒ Object
Deserialize previously serialized value to a Ruby object.
- .serialize(obj) ⇒ Object
Class Attribute Details
.object_serializer ⇒ Object
Returns the value of attribute object_serializer.
8 9 10 |
# File 'lib/anycable/serializer.rb', line 8 def object_serializer @object_serializer end |
Class Method Details
.deserialize(val) ⇒ Object
Deserialize previously serialized value to a Ruby object.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/anycable/serializer.rb', line 27 def deserialize(val) if val.is_a?(::String) handled = object_serializer&.deserialize(val) return handled if handled end case val when Hash val.transform_values { |v| deserialize(v) } when Array val.map { |v| deserialize(v) } else val end end |
.serialize(obj) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/anycable/serializer.rb', line 10 def serialize(obj) handled = object_serializer&.serialize(obj) return handled if handled case obj when nil, true, false, Integer, Float, String, Symbol obj when Hash obj.transform_values { |v| serialize(v) } when Array obj.map { |v| serialize(v) } else raise ArgumentError, "Can't serialize #{obj.inspect}" end end |