Class: Puppet::Parser::AST::CaseStatement

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

Overview

The basic logical structure in Puppet. Supports a list of tests and statement arrays.

Instance Attribute Summary collapse

Attributes inherited from Branch

#children, #pin

Instance Method Summary collapse

Methods inherited from Branch

#initialize

Constructor Details

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

Instance Attribute Details

#defaultObject



7
8
9
# File 'lib/puppet/parser/ast/casestatement.rb', line 7

def default
  @default
end

#optionsObject



7
8
9
# File 'lib/puppet/parser/ast/casestatement.rb', line 7

def options
  @options
end

#testObject



7
8
9
# File 'lib/puppet/parser/ast/casestatement.rb', line 7

def test
  @test
end

Instance Method Details

#eachObject



37
38
39
# File 'lib/puppet/parser/ast/casestatement.rb', line 37

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

#evaluate(scope) ⇒ Object

Short-curcuit evaluation. Return the value of the statements for the first option that matches.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/puppet/parser/ast/casestatement.rb', line 13

def evaluate(scope)
  level = scope.ephemeral_level

  value = @test.safeevaluate(scope)

  # Iterate across the options looking for a match.
  default = nil
  @options.each do |option|
    option.eachopt do |opt|
      return option.safeevaluate(scope) if opt.evaluate_match(value, scope)
    end

    default = option if option.default?
  end

  # Unless we found something, look for the default.
  return default.safeevaluate(scope) if default

  Puppet.debug "No true answers and no default"
  return nil
ensure
  scope.unset_ephemeral_var(level)
end