allow from_definition to be invoked from base class
This helps testing.
This commit is contained in:
parent
d5f18b6778
commit
a711277f16
@ -36,24 +36,28 @@ module Pacemaker
|
|||||||
def from_name(name)
|
def from_name(name)
|
||||||
definition = get_definition(name)
|
definition = get_definition(name)
|
||||||
return nil unless definition and ! definition.empty?
|
return nil unless definition and ! definition.empty?
|
||||||
obj_type = type(definition)
|
from_definition(definition)
|
||||||
subclass = @@subclasses[obj_type]
|
|
||||||
unless subclass
|
|
||||||
raise "No subclass of #{self.name} was registered with type '#{obj_type}'"
|
|
||||||
end
|
|
||||||
obj = subclass.from_definition(definition)
|
|
||||||
return nil unless obj
|
|
||||||
unless name == obj.name
|
|
||||||
raise "Name '#{obj.name}' in definition didn't match name '#{name}' used for retrieval"
|
|
||||||
end
|
|
||||||
obj
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def from_definition(definition)
|
def from_definition(definition)
|
||||||
obj = new(name)
|
if method(__method__).owner == self.singleton_class
|
||||||
obj.definition = definition
|
# Invoked via (this) base class
|
||||||
obj.parse_definition
|
obj_type = type(definition)
|
||||||
obj
|
subclass = @@subclasses[obj_type]
|
||||||
|
unless subclass
|
||||||
|
raise "No subclass of #{self.name} was registered with type '#{obj_type}'"
|
||||||
|
end
|
||||||
|
return subclass.from_definition(definition)
|
||||||
|
else
|
||||||
|
# Invoked via subclass
|
||||||
|
obj = new(name)
|
||||||
|
unless name == obj.name
|
||||||
|
raise "Name '#{obj.name}' in definition didn't match name '#{name}' used for retrieval"
|
||||||
|
end
|
||||||
|
obj.definition = definition
|
||||||
|
obj.parse_definition
|
||||||
|
obj
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -18,6 +18,11 @@ describe Pacemaker::Resource::Primitive do
|
|||||||
expect(obj.is_a? Pacemaker::Resource::Primitive).to be_true
|
expect(obj.is_a? Pacemaker::Resource::Primitive).to be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should be instantiated via Pacemaker::CIBObject.from_definition" do
|
||||||
|
obj = Pacemaker::CIBObject.from_definition(@primitive.definition_string)
|
||||||
|
expect(obj.is_a? Pacemaker::Resource::Primitive).to be_true
|
||||||
|
end
|
||||||
|
|
||||||
it "should barf if the loaded definition's type is not primitive" do
|
it "should barf if the loaded definition's type is not primitive" do
|
||||||
Mixlib::ShellOut.any_instance.stub(:error!)
|
Mixlib::ShellOut.any_instance.stub(:error!)
|
||||||
expect_any_instance_of(Mixlib::ShellOut) \
|
expect_any_instance_of(Mixlib::ShellOut) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user