summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/metatype/manager.rb15
-rw-r--r--lib/puppet/type.rb1
-rwxr-xr-xtest/types/manager.rb12
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