class Stacker::Stack::Parameter

A Parameter represents a stack parameter. A parameter can be either a literal value (e.g. a string, number, or array) or a reference, otherwise known as a dependency. References parameter values are represented as hashes with a single key indicating the reference type. There is one exception to this rule; references to stack outputs are expressed as hashes with two keys, “Stack” and “Output”.

Attributes

region[R]
value[R]

Public Class Methods

new(value, region) click to toggle source
# File lib/stacker/stack/parameter.rb, line 20
def initialize value, region
  @region = region
  @value = if value.is_a?(Array)
    value.map { |v| Parameter.new v, region }
  else
    value
  end
end

Public Instance Methods

==(parameter) click to toggle source
# File lib/stacker/stack/parameter.rb, line 66
def ==(parameter)
  parameter.value == value && parameter.region == region
end
dependencies() click to toggle source
# File lib/stacker/stack/parameter.rb, line 33
def dependencies
  if dependency?
    [ to_s ]
  elsif value.is_a?(Array)
    value.map(&:dependencies).flatten
  else
    [ ]
  end
end
dependency?() click to toggle source
# File lib/stacker/stack/parameter.rb, line 29
def dependency?
  value.is_a?(Hash)
end
resolved() click to toggle source
# File lib/stacker/stack/parameter.rb, line 43
def resolved
  if dependency?
    begin
      resolver.resolve
    rescue => err
      raise ParameterResolutionError.new value, err
    end
  elsif value.is_a?(Array)
    value.map(&:resolved).join ','
  else
    value
  end
end
to_s() click to toggle source
# File lib/stacker/stack/parameter.rb, line 58
def to_s
  if dependency?
    value.values.map(&:to_s).sort.join('.')
  else
    value.to_s
  end
end

Private Instance Methods

reference_value() click to toggle source
# File lib/stacker/stack/parameter.rb, line 88
def reference_value
  if stack_output?
    value
  else
    value.values.first
  end
end
resolver() click to toggle source
# File lib/stacker/stack/parameter.rb, line 96
def resolver
  resolver_class_name.constantize.new reference_value, region
end
resolver_class_name() click to toggle source
# File lib/stacker/stack/parameter.rb, line 76
def resolver_class_name
  type = if stack_output?
    'StackOutput'
  elsif value.keys.size == 1
    value.keys.first
  else
    raise ReferenceError.new 'Too many top-level keys in reference value.'
  end

  "Stacker::Resolvers::#{type}Resolver"
end
stack_output?() click to toggle source
# File lib/stacker/stack/parameter.rb, line 72
def stack_output?
  dependency? && value['Stack'] && value['Output']
end