Class: Puppet::Parser::AST::IfStatement

Inherits:
Branch show all
Defined in:
lib/vendor/puppet/parser/ast/ifstatement.rb

Overview

A basic ‘if/elsif/else’ statement.

Constant Summary

Constants inherited from Puppet::Parser::AST

AST

Constants included from Util::Docs

Util::Docs::HEADER_LEVELS

Instance Attribute Summary collapse

Attributes inherited from Branch

#children, #pin

Attributes inherited from Puppet::Parser::AST

#file, #line, #parent, #scope

Attributes included from Util::Docs

#doc, #nodoc

Instance Method Summary collapse

Methods inherited from Branch

#initialize

Methods inherited from Puppet::Parser::AST

associates_doc, #evaluate_match, #initialize, #inspect, #parsefail, #parsewrap, #safeevaluate, settor?, #use_docs

Methods included from Util::Docs

#desc, #dochook, #doctable, #markdown_definitionlist, #markdown_header, #nodoc?, #pad, scrub

Methods included from Util::MethodHelper

#requiredopts, #set_options, #symbolize_options

Methods included from Util::Errors

#adderrorcontext, #devfail, #error_context, #exceptwrap, #fail

Constructor Details

This class inherits a constructor from Puppet::Parser::AST::Branch

Instance Attribute Details

#elseObject

Returns the value of attribute else.



9
10
11
# File 'lib/vendor/puppet/parser/ast/ifstatement.rb', line 9

def else
  @else
end

#statementsObject

Returns the value of attribute statements.



9
10
11
# File 'lib/vendor/puppet/parser/ast/ifstatement.rb', line 9

def statements
  @statements
end

#testObject

Returns the value of attribute test.



9
10
11
# File 'lib/vendor/puppet/parser/ast/ifstatement.rb', line 9

def test
  @test
end

Instance Method Details

#eachObject



11
12
13
# File 'lib/vendor/puppet/parser/ast/ifstatement.rb', line 11

def each
  [@test,@else,@statements].each { |child| yield child }
end

#evaluate(scope) ⇒ Object

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



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/vendor/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