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.

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



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

def param
  @param
end

#valuesObject



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

def values
  @values
end

Instance Method Details

#eachObject



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.



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



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