class Aws::Templates::Utils::Parametrized::Transformation::AsChain

Apply several transformation sequentially

Useful when a few transformations need to be applied to a single value to get the final result

Example

class Piece
  include Aws::Templates::Utils::Parametrized

  parameter :param,
    transform: as_chain(
                 as_hash,
                 as_object(Aws::Templates::Utils::AsNamed)
               )
end

i = Piece.new(param: [:name, 'Rex'])
i.param.name # => 'Rex'

Attributes

components[R]

Public Class Methods

new(components) click to toggle source
# File lib/aws/templates/utils/parametrized/transformation/as_chain.rb, line 31
def initialize(components)
  @components = _check_components(components)
end

Protected Instance Methods

transform(parameter, value, instance) click to toggle source
# File lib/aws/templates/utils/parametrized/transformation/as_chain.rb, line 37
def transform(parameter, value, instance)
  return if value.nil?
  components.inject(value) { |acc, elem| instance.instance_exec(parameter, acc, &elem) }
end

Private Instance Methods

_check_components(components) click to toggle source
# File lib/aws/templates/utils/parametrized/transformation/as_chain.rb, line 44
def _check_components(components)
  result = components.to_a

  invalid_components = result.reject { |component| component.respond_to?(:to_proc) }
  raise "Invalid components: #{invalid_components}" unless invalid_components.empty?

  result
end