diff options
-rw-r--r-- | lib/puppet/metatype/manager.rb | 15 | ||||
-rw-r--r-- | lib/puppet/type.rb | 1 | ||||
-rwxr-xr-x | test/types/manager.rb | 12 |
3 files changed, 27 insertions, 1 deletions
diff --git a/lib/puppet/metatype/manager.rb b/lib/puppet/metatype/manager.rb index 53cb5951d..ee396389b 100644 --- a/lib/puppet/metatype/manager.rb +++ b/lib/puppet/metatype/manager.rb @@ -54,7 +54,13 @@ module Manager end # Define a new type. - def newtype(name, parent = nil, &block) + def newtype(name, options = {}, &block) + # Handle backward compatibility + unless options.is_a?(Hash) + Puppet.warning "Puppet::Type.newtype now accepts a hash as the second argument" + options = {:parent => options} + end + # First make sure we don't have a method sitting around name = symbolize(name) newmethod = "new#{name.to_s}" @@ -71,11 +77,18 @@ module Manager end end + options = symbolize_options(options) + + if parent = options[:parent] + options.delete(:parent) + end + # Then create the class. klass = genclass(name, :parent => (parent || Puppet::Type), :overwrite => true, :hash => @types, + :attributes => options, &block ) diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb index a81424b45..fb73e0459 100644 --- a/lib/puppet/type.rb +++ b/lib/puppet/type.rb @@ -50,6 +50,7 @@ class Type < Puppet::Element # the Type class attribute accessors class << self attr_reader :name + attr_accessor :self_refresh include Enumerable, Puppet::Util::ClassGen include Puppet::MetaType::Manager end diff --git a/test/types/manager.rb b/test/types/manager.rb index f4353c128..480e5a02e 100755 --- a/test/types/manager.rb +++ b/test/types/manager.rb @@ -39,6 +39,18 @@ class TestTypeManager < Test::Unit::TestCase assert_nil(FakeManager.type(:testing), "Type was not removed") assert(! defined?(FakeManager::Testing), "Constant was not removed") end + + def test_newtype + assert_nothing_raised do + FakeManager.newtype(:testing, :self_refresh => true) do + newparam(:name, :namevar => true) + end + end + + test = FakeManager.type(:testing) + assert(test, "did not get type") + assert(test.self_refresh, "did not set attribute") + end end # $Id$
\ No newline at end of file |