Class: Temporal::PayloadConverter::Composite

Inherits:
Base
  • Object
show all
Defined in:
lib/temporal/payload_converter/composite.rb

Defined Under Namespace

Classes: ConverterNotFound, EncodingNotSet

Instance Method Summary collapse

Constructor Details

#initialize(*converters) ⇒ Composite

Returns a new instance of Composite.



10
11
12
13
14
15
16
17
# File 'lib/temporal/payload_converter/composite.rb', line 10

def initialize(*converters)
  super()

  @converters = converters.each_with_object({}) do |converter, result|
    result[converter.encoding] = converter
    result
  end
end

Instance Method Details

#from_payload(payload) ⇒ Object

Raises:



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/temporal/payload_converter/composite.rb', line 29

def from_payload(payload)
  encoding = payload.['encoding']
  raise EncodingNotSet, 'Missing payload encoding' unless encoding

  converter = converters[encoding]
  unless converter
    available = converters.keys.join(', ')
    raise ConverterNotFound, "Missing converter for encoding '#{encoding}' (available: #{available})"
  end

  converter.from_payload(payload)
end

#to_payload(data) ⇒ Object

Raises:



19
20
21
22
23
24
25
26
27
# File 'lib/temporal/payload_converter/composite.rb', line 19

def to_payload(data)
  converters.each_value do |converter|
    payload = converter.to_payload(data)
    return payload unless payload.nil?
  end

  available = converters.values.map(&:class).join(', ')
  raise ConverterNotFound, "Available converters (#{available}) could not convert data"
end