class Synapse::Upcasting::UpcasterChain

Attributes

converter_factory[R]

@return [ConverterFactory]

upcasters[R]

@return [Array<Upcaster>]

Public Class Methods

new(converter_factory) click to toggle source

@param [ConverterFactory] converter_factory @return [undefined]

# File lib/synapse/upcasting/upcaster_chain.rb, line 12
def initialize(converter_factory)
  @converter_factory = converter_factory
  @upcasters = Array.new
end

Public Instance Methods

<<(upcaster)
Alias for: push
push(upcaster) click to toggle source

Pushes the given upcaster onto the end of this upcaster chain

@param [Upcaster] upcaster @return [undefined]

# File lib/synapse/upcasting/upcaster_chain.rb, line 21
def push(upcaster)
  @upcasters.push upcaster
end
Also aliased as: <<
upcast(serialized_object, upcast_context) click to toggle source

@param [SerializedObject] serialized_object @param [UpcastingContext] upcast_context @return [Array<SerializedObject>]

# File lib/synapse/upcasting/upcaster_chain.rb, line 30
def upcast(serialized_object, upcast_context)
  serialized_objects = Array.new
  serialized_objects.push serialized_object

  @upcasters.each do |upcaster|
    serialized_objects = upcast_objects upcaster, serialized_objects, upcast_context
  end

  serialized_objects
end

Protected Instance Methods

perform_upcast(upcaster, representation, expected_types, upcast_context) click to toggle source

@param [Upcaster] upcaster @param [SerializedObject] representation @param [Array<SerializedType>] expected_types @param [UpcastingContent] upcast_context @return [Array<SerializedObject>]

# File lib/synapse/upcasting/upcaster_chain.rb, line 48
def perform_upcast(upcaster, representation, expected_types, upcast_context)
  upcaster.upcast representation, expected_types, upcast_context
end

Private Instance Methods

upcast_objects(upcaster, serialized_objects, upcast_context) click to toggle source

@param [Upcaster] upcaster @param [Array<SerializedObject>] serialized_objects @param [UpcastingContext] upcast_context @return [Array<SerializedObject>]

# File lib/synapse/upcasting/upcaster_chain.rb, line 58
def upcast_objects(upcaster, serialized_objects, upcast_context)
  upcast_objects = Array.new

  serialized_objects.each do |serialized_object|
    serialized_type = serialized_object.type

    if upcaster.can_upcast? serialized_type
      serialized_object = converter_factory.convert serialized_object, upcaster.expected_content_type
      expected_types = upcaster.upcast_type serialized_type

      upcast_objects.concat(perform_upcast(upcaster, serialized_object, expected_types, upcast_context))
    else
      upcast_objects.push serialized_object
    end
  end

  upcast_objects
end