class ExpressionEvaluator

Constants

FN_IF

Public Instance Methods

evaluate(expression, conditions) click to toggle source

{'Fn::If’=>} returns X if conditions doesn't include Condition, otherwise it return X or Y depending

Other than Fn::If, it just returns the value itself

# File lib/cfn-model/parser/expression_evaluator.rb, line 8
def evaluate(expression, conditions)
  if if_condition?(expression)
    outcome(expression, conditions)
  else
    expression
  end
end

Private Instance Methods

if_condition?(property_value) click to toggle source
# File lib/cfn-model/parser/expression_evaluator.rb, line 36
def if_condition?(property_value)
  property_value.is_a?(Hash) && property_value.key?(FN_IF) && property_value.size == 1
end
outcome(expression, conditions) click to toggle source
# File lib/cfn-model/parser/expression_evaluator.rb, line 18
def outcome(expression, conditions)
  if if_condition?(expression)
    if_expression = expression[FN_IF]
    condition_name = if_expression[0]
    if conditions[condition_name]
      outcome(if_expression[1], conditions)
    else
      outcome(if_expression[2], conditions)
    end
  elsif expression.is_a?(Hash) # plain dict
    expression.each do |k,v|
      expression[k] = outcome(v, conditions)
    end
  else
    expression
  end
end