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

Class Method Summary collapse

Class Attribute Details

.object_serializerObject

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