diff options
| author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-08-21 23:50:51 +0000 |
|---|---|---|
| committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-08-21 23:50:51 +0000 |
| commit | bba972fd1bcbb7747f73eee6b6789e02ad18071a (patch) | |
| tree | c9a5284d6f744e60c9429c02d631c26233f6eeec | |
| parent | a1d71d9e5faaebe61c51750c5dfcc2276d4be904 (diff) | |
| download | puppet-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.rb | 30 | ||||
| -rw-r--r-- | lib/puppet/type.rb | 2 | ||||
| -rw-r--r-- | test/language/parser.rb | 25 |
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$ |
