Class: Protip::Transformers::DecoratingTransformer

Inherits:
Object
  • Object
show all
Includes:
Protip::Transformer
Defined in:
lib/protip/transformers/decorating_transformer.rb

Overview

A transformer which decorates all messages, passing in another transformer (generally a “parent” delegating transformer with this as its fallback) to the generated decorators. Allows cascading message decoration.

Instance Method Summary collapse

Constructor Details

#initialize(transformer) ⇒ DecoratingTransformer

Returns a new instance of DecoratingTransformer.



12
13
14
# File 'lib/protip/transformers/decorating_transformer.rb', line 12

def initialize(transformer)
  @transformer = transformer
end

Instance Method Details

#to_message(object, field) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/protip/transformers/decorating_transformer.rb', line 20

def to_message(object, field)
  if object.is_a?(Protip::Decorator)
    object.message
  elsif object.is_a?(Hash)
    decorator = Protip::Decorator.new(field.subtype.msgclass.new, @transformer)
    decorator.assign_attributes(object)
    decorator.message
  else
    raise ArgumentError.new("#to_message expected a Hash or an already decorated object, received #{object.class.name} for #{field.type} #{field.name}")
  end
end

#to_object(message, field) ⇒ Object



16
17
18
# File 'lib/protip/transformers/decorating_transformer.rb', line 16

def to_object(message, field)
  Protip::Decorator.new(message, @transformer)
end