Module: Transmutation::Serialization

Included in:
Serializer
Defined in:
lib/transmutation/serialization.rb,
lib/transmutation/serialization/lookup.rb,
lib/transmutation/serialization/rendering.rb,
lib/transmutation/serialization/lookup/serializer_not_found.rb

Defined Under Namespace

Modules: Rendering Classes: Lookup

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.cacheObject



38
39
40
# File 'lib/transmutation/serialization.rb', line 38

def self.cache
  @cache ||= {}
end

Instance Method Details

#lookup_serializer(object, namespace: nil, serializer: nil) ⇒ Class<Transmutation::Serializer>

Lookup the serializer for the given object.

This calls Transmutation::Serialization::Lookup#serializer_for to find the serializer for the given object.

This also caches the result for future lookups.

Parameters:

  • object (Object)

    The object to lookup the serializer for.

  • namespace (String, Symbol, Module) (defaults to: nil)

    The namespace to lookup the serializer in.

  • serializer (String, Symbol, Class) (defaults to: nil)

    The serializer to use.

Returns:



33
34
35
36
# File 'lib/transmutation/serialization.rb', line 33

def lookup_serializer(object, namespace: nil, serializer: nil)
  Serialization.cache[[self.namespace, object.class, namespace, serializer]] ||=
    Lookup.new(self, namespace:).serializer_for(object, serializer:)
end

#namespaceObject



42
43
44
# File 'lib/transmutation/serialization.rb', line 42

def namespace
  @namespace ||= self.class.name.split("::")[...-1].join("::")
end

#serialize(object, namespace: nil, serializer: nil, depth: 0, max_depth: 1) ⇒ Transmutation::Serializer

Serialize a given object with the looked up serializer.

Parameters:

  • object (Object)

    The object to serialize.

  • namespace (String, Symbol, Module) (defaults to: nil)

    The namespace to lookup the serializer in.

  • serializer (String, Symbol, Class) (defaults to: nil)

    The serializer to use.

  • max_depth (Integer) (defaults to: 1)

    The maximum depth of nested associations to serialize.

Returns:



13
14
15
16
17
18
19
# File 'lib/transmutation/serialization.rb', line 13

def serialize(object, namespace: nil, serializer: nil, depth: 0, max_depth: 1)
  if object.respond_to?(:map) && !object.respond_to?(:to_hash)
    return object.map { |item| serialize(item, namespace:, serializer:, depth:, max_depth:) }
  end

  lookup_serializer(object, namespace:, serializer:).new(object, depth:, max_depth:)
end