summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-08-21 23:50:51 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-08-21 23:50:51 +0000
commitbba972fd1bcbb7747f73eee6b6789e02ad18071a (patch)
treec9a5284d6f744e60c9429c02d631c26233f6eeec
parenta1d71d9e5faaebe61c51750c5dfcc2276d4be904 (diff)
downloadpuppet-bba972fd1bcbb7747f73eee6b6789e02ad18071a.tar.gz
puppet-bba972fd1bcbb7747f73eee6b6789e02ad18071a.tar.xz
puppet-bba972fd1bcbb7747f73eee6b6789e02ad18071a.zip
Adding warnings and error throwing for #218 -- metaparams in prototypes are treated specially.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1481 980ebf18-57e1-0310-9a29-db15c13687c0
-rw-r--r--lib/puppet/parser/ast/astarray.rb30
-rw-r--r--lib/puppet/type.rb2
-rw-r--r--test/language/parser.rb25
3 files changed, 55 insertions, 2 deletions
diff --git a/lib/puppet/parser/ast/astarray.rb b/lib/puppet/parser/ast/astarray.rb
index ab24fa86c..c42f658fd 100644
--- a/lib/puppet/parser/ast/astarray.rb
+++ b/lib/puppet/parser/ast/astarray.rb
@@ -111,5 +111,33 @@ class Puppet::Parser::AST
# Another simple container class to make sure we can correctly arrayfy
# things.
- class CompArgument < ASTArray; end
+ class CompArgument < ASTArray
+ @@warnings = {}
+ def initialize(hash)
+ super
+ name = @children[0].value
+
+ # If it's not a metaparamer, we're fine.
+ return unless Puppet::Type.metaparamclass(name)
+
+ if @children[1]
+ if @children[1].value == false
+ raise Puppet::ParseError,
+ "%s is a metaparameter; please choose another name" %
+ name
+ else
+ unless @@warnings[name]
+ @@warnings[name] = true
+ Puppet.warning "%s is a metaparam; this value will inherit to all contained elements" % name
+ end
+ end
+ else
+ raise Puppet::ParseError,
+ "%s is a metaparameter; please choose another name" %
+ name
+ end
+ end
+ end
end
+
+# $Id$
diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb
index b6f0e420a..23495c311 100644
--- a/lib/puppet/type.rb
+++ b/lib/puppet/type.rb
@@ -701,7 +701,7 @@ class Type < Puppet::Element
# Find the metaparameter class associated with a given metaparameter name.
def self.metaparamclass(name)
- @@metaparamhash[name]
+ @@metaparamhash[symbolize(name)]
end
# Find the parameter class associated with a given parameter name.
diff --git a/test/language/parser.rb b/test/language/parser.rb
index 629e124ea..722d95d95 100644
--- a/test/language/parser.rb
+++ b/test/language/parser.rb
@@ -456,6 +456,31 @@ file { "/tmp/yayness":
parser.parse
}
end
+
+ def test_metaparams_in_definition_prototypes
+ parser = Puppet::Parser::Parser.new
+
+ str1 = %{define mydef($schedule) {}}
+ parser.string = str1
+
+ assert_raise(Puppet::ParseError) {
+ parser.parse
+ }
+
+ str2 = %{define mydef($schedule = false) {}}
+ parser.string = str2
+
+ assert_raise(Puppet::ParseError) {
+ parser.parse
+ }
+
+ str3 = %{define mydef($schedule = daily) {}}
+ parser.string = str3
+
+ assert_nothing_raised {
+ parser.parse
+ }
+ end
end
# $Id$