class Puppet::Parser::AST::IfStatement

A basic ‘if/elsif/else’ statement.

Attributes

else[RW]
statements[RW]
test[RW]

Public Instance Methods

each() { |child| ... } click to toggle source
# File lib/puppet/parser/ast/ifstatement.rb, line 11
def each
  [@test,@else,@statements].each { |child| yield child }
end
evaluate(scope) click to toggle source

Short-curcuit evaluation. If we’re true, evaluate our statements, else if there’s an ‘else’ setting, evaluate it. the first option that matches.

# File lib/puppet/parser/ast/ifstatement.rb, line 18
def evaluate(scope)
  level = scope.ephemeral_level
  value = @test.safeevaluate(scope)

  # let's emulate a new scope for each branches
  begin
    if Puppet::Parser::Scope.true?(value)
      return @statements.safeevaluate(scope)
    else
      return defined?(@else) ? @else.safeevaluate(scope) : nil
    end
  ensure
    scope.unset_ephemeral_var(level)
  end
end