Class: Puppet::Parser::AST::Selector

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

Overview

The inline conditional operator. Unlike CaseStatement, which executes code, we just return a value.

API:

  • public

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

#paramObject

API:

  • public



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

def param
  @param
end

#valuesObject

API:

  • public



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

def values
  @values
end

Instance Method Details

#eachObject

API:

  • public



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

def each
  [@param,@values].each { |child| yield child }
end

#evaluate(scope) ⇒ Object

Find the value that corresponds with the test.

API:

  • public



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

def evaluate(scope)
  level = scope.ephemeral_level
  # Get our parameter.
  paramvalue = @param.safeevaluate(scope)

  default = nil

  @values = [@values] unless @values.instance_of? AST::ASTArray or @values.instance_of? Array

  # Then look for a match in the options.
  @values.each do |obj|
    # short circuit asap if we have a match
    return obj.value.safeevaluate(scope) if obj.param.evaluate_match(paramvalue, scope)

    # Store the default, in case it's necessary.
    default = obj if obj.param.is_a?(Default)
  end

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

  self.fail Puppet::ParseError, "No matching value for selector param '#{paramvalue}'"
ensure
  scope.unset_ephemeral_var(level)
end

#to_sObject

API:

  • public



40
41
42
43
44
45
46
47
48
# File 'lib/puppet/parser/ast/selector.rb', line 40

def to_s
  if @values.instance_of? AST::ASTArray or @values.instance_of? Array
    v = @values
  else
    v = [@values]
  end

  param.to_s + " ? { " + v.collect { |v| v.to_s }.join(', ') + " }"
end