diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-03-03 22:23:00 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-03-03 22:23:00 +0000 |
commit | f2ea9b7840adedcf3f99b222f6f8fa741ea64650 (patch) | |
tree | b53d3b26de7e0d08234ca7d49407b15052909fc5 /lib/puppet/parser/ast | |
parent | 1a3de8a45d71747978ce9cb1870b39a751352c02 (diff) | |
download | puppet-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.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" % |