diff options
Diffstat (limited to 'lib/puppet/parser/ast/ifstatement.rb')
-rw-r--r-- | lib/puppet/parser/ast/ifstatement.rb | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/lib/puppet/parser/ast/ifstatement.rb b/lib/puppet/parser/ast/ifstatement.rb new file mode 100644 index 000000000..b5cb63cdf --- /dev/null +++ b/lib/puppet/parser/ast/ifstatement.rb @@ -0,0 +1,41 @@ +class Puppet::Parser::AST + # A basic 'if/elsif/else' statement. + class IfStatement < AST::Branch + attr_accessor :test, :else, :statements + + def each + [@test,@else,@statements].each { |child| yield child } + end + + # Short-curcuit evaluation. If we're true, evaluate our statements, + # else if there's an 'else' setting, evaluate it. + # the first option that matches. + def evaluate(hash) + scope = hash[:scope] + value = @test.safeevaluate(:scope => scope) + + if Puppet::Parser::Scope.true?(value) + return @statements.safeevaluate(:scope => scope) + else + if defined? @else + return @else.safeevaluate(:scope => scope) + else + return nil + end + end + end + + def tree(indent = 0) + rettree = [ + @test.tree(indent + 1), + ((@@indline * indent) + self.typewrap(self.pin)), + @statements.tree(indent + 1), + @else.tree(indent + 1) + ] + + return rettree.flatten.join("\n") + end + end +end + +# $Id$ |