diff options
Diffstat (limited to 'lib/puppet/parser/ast')
-rw-r--r-- | lib/puppet/parser/ast/caseopt.rb | 15 | ||||
-rw-r--r-- | lib/puppet/parser/ast/casestatement.rb | 4 |
2 files changed, 14 insertions, 5 deletions
diff --git a/lib/puppet/parser/ast/caseopt.rb b/lib/puppet/parser/ast/caseopt.rb index 366b6e939..6b0e23c3e 100644 --- a/lib/puppet/parser/ast/caseopt.rb +++ b/lib/puppet/parser/ast/caseopt.rb @@ -13,6 +13,7 @@ class Puppet::Parser::AST # Are we the default option? def default? + # Cache the @default value. if defined? @default return @default end @@ -38,13 +39,21 @@ class Puppet::Parser::AST end # You can specify a list of values; return each in turn. - def eachvalue + def eachvalue(scope) if @value.is_a?(AST::ASTArray) @value.each { |subval| - yield subval.value + if scope + yield subval.evaluate(:scope => scope) + elsif subval.is_a? AST::Leaf + yield subval.value + end } else - yield @value.value + if scope + yield @value.evaluate(:scope => scope) + elsif @value.is_a? AST::Leaf + yield @value.value + end end end diff --git a/lib/puppet/parser/ast/casestatement.rb b/lib/puppet/parser/ast/casestatement.rb index e51cc7522..a9e3ee573 100644 --- a/lib/puppet/parser/ast/casestatement.rb +++ b/lib/puppet/parser/ast/casestatement.rb @@ -15,7 +15,7 @@ class Puppet::Parser::AST # Iterate across the options looking for a match. @options.each { |option| - if option.eachvalue { |opval| break true if opval == value } + if option.eachvalue(scope) { |opval| break true if opval == value } # we found a matching option retvalue = option.safeevaluate(:scope => scope) found = true @@ -49,7 +49,7 @@ class Puppet::Parser::AST if option.default? @default = option end - option.eachvalue { |val| + option.eachvalue(nil) { |val| if values.include?(val) raise Puppet::ParseError, "Value %s appears twice in case statement" % |