summaryrefslogtreecommitdiffstats
path: root/lib/puppet/parser/ast
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-03-03 22:23:00 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-03-03 22:23:00 +0000
commitf2ea9b7840adedcf3f99b222f6f8fa741ea64650 (patch)
treeb53d3b26de7e0d08234ca7d49407b15052909fc5 /lib/puppet/parser/ast
parent1a3de8a45d71747978ce9cb1870b39a751352c02 (diff)
downloadpuppet-f2ea9b7840adedcf3f99b222f6f8fa741ea64650.tar.gz
puppet-f2ea9b7840adedcf3f99b222f6f8fa741ea64650.tar.xz
puppet-f2ea9b7840adedcf3f99b222f6f8fa741ea64650.zip
Supporting variables as the test value in both case statements and selectors.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@976 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet/parser/ast')
-rw-r--r--lib/puppet/parser/ast/caseopt.rb15
-rw-r--r--lib/puppet/parser/ast/casestatement.rb4
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" %