summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-10 21:37:29 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-04-10 21:37:29 +0000
commit0507486ad35189c557903d0c78bd1bbd7d43b967 (patch)
tree3555b793c684ec009dd906b9d8c28212ba242fd7
parentae4b12e2cd337007f32c6bdb51924969a1bddc48 (diff)
downloadpuppet-0507486ad35189c557903d0c78bd1bbd7d43b967.tar.gz
puppet-0507486ad35189c557903d0c78bd1bbd7d43b967.tar.xz
puppet-0507486ad35189c557903d0c78bd1bbd7d43b967.zip
Fixing #117. If only one value was provided, then it was not placed in an array, yet AST::Selector expected an array. The grammar needs to have some abstraction added or something, because I seem to have encountered this bug for every ast type that supports arrays internally.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1097 980ebf18-57e1-0310-9a29-db15c13687c0
-rw-r--r--examples/code/snippets/singleselector.pp22
-rw-r--r--lib/puppet/parser/ast/selector.rb2
-rwxr-xr-xtest/language/snippets.rb14
3 files changed, 38 insertions, 0 deletions
diff --git a/examples/code/snippets/singleselector.pp b/examples/code/snippets/singleselector.pp
new file mode 100644
index 000000000..520a14017
--- /dev/null
+++ b/examples/code/snippets/singleselector.pp
@@ -0,0 +1,22 @@
+$value1 = ""
+$value2 = true
+$value3 = false
+$value4 = yay
+
+$test = "yay"
+
+$mode1 = $value1 ? {
+ "" => 755
+}
+
+$mode2 = $value2 ? {
+ true => 755
+}
+
+$mode3 = $value3 ? {
+ default => 755
+}
+
+file { "/tmp/singleselector1": ensure => file, mode => $mode1 }
+file { "/tmp/singleselector2": ensure => file, mode => $mode2 }
+file { "/tmp/singleselector3": ensure => file, mode => $mode3 }
diff --git a/lib/puppet/parser/ast/selector.rb b/lib/puppet/parser/ast/selector.rb
index 299473fda..3adf0261c 100644
--- a/lib/puppet/parser/ast/selector.rb
+++ b/lib/puppet/parser/ast/selector.rb
@@ -19,6 +19,8 @@ class Puppet::Parser::AST
default = nil
+ @values = [@values] unless @values.instance_of? AST::ASTArray
+
# Then look for a match in the options.
@values.each { |obj|
param = obj.param.safeevaluate(:scope => scope)
diff --git a/test/language/snippets.rb b/test/language/snippets.rb
index 220c50511..f10b12aaa 100755
--- a/test/language/snippets.rb
+++ b/test/language/snippets.rb
@@ -345,6 +345,20 @@ class TestSnippets < Test::Unit::TestCase
}
end
+ def snippet_singleselector(trans)
+ nums = %w{1 2 3}
+ files = nums.collect { |n|
+ "/tmp/singleselector%s" % n
+ }
+
+ files.each { |f|
+ @@tmpfiles << f
+ assert(FileTest.exists?(f), "File %s does not exist" % f)
+ assert(File.stat(f).mode & 007777 == 0755,
+ "File %s is not 755" % f)
+ }
+ end
+
def snippet_falsevalues(trans)
file = "/tmp/falsevaluesfalse"
@@tmpfiles << file