This will soon replace all of the env/parser mungling we have to do. A given process will only be able to have one collection of code per environment in memory.
This is somewhat limiting, in theory, but some global means of looking up code collection (LoadedCode instances) must exist for the pure ruby stuff to work. Signed-off-by: Luke Kanies <[email protected]> --- lib/puppet/parser/parser_support.rb | 2 +- spec/integration/parser/parser.rb | 4 +- spec/unit/parser/loaded_code.rb | 61 ++++++++++++++++++++--------------- spec/unit/parser/resource_type.rb | 6 ++-- spec/unit/util/rdoc/parser.rb | 4 +- 5 files changed, 43 insertions(+), 34 deletions(-) diff --git a/lib/puppet/parser/parser_support.rb b/lib/puppet/parser/parser_support.rb index df89ed7..77ee28f 100644 --- a/lib/puppet/parser/parser_support.rb +++ b/lib/puppet/parser/parser_support.rb @@ -194,8 +194,8 @@ class Puppet::Parser::Parser end def initialize(options = {}) - @loaded_code = options[:loaded_code] || Puppet::Parser::LoadedCode.new @environment = options[:environment] + @loaded_code = options[:loaded_code] || Puppet::Parser::LoadedCode.new(@environment) initvars() end diff --git a/spec/integration/parser/parser.rb b/spec/integration/parser/parser.rb index 71ae136..cc6591c 100755 --- a/spec/integration/parser/parser.rb +++ b/spec/integration/parser/parser.rb @@ -4,8 +4,8 @@ require File.dirname(__FILE__) + '/../../spec_helper' describe Puppet::Parser::Parser do before :each do - @loaded_code = Puppet::Parser::LoadedCode.new - @parser = Puppet::Parser::Parser.new :environment => "development", :loaded_code => @loaded_code + @resource_type_collection = Puppet::Parser::ResourceTypeCollection.new("env") + @parser = Puppet::Parser::Parser.new :environment => "development", :resource_type_collection => @resource_type_collection end describe "when parsing comments before statement" do diff --git a/spec/unit/parser/loaded_code.rb b/spec/unit/parser/loaded_code.rb index 9b72dab..3a230f9 100644 --- a/spec/unit/parser/loaded_code.rb +++ b/spec/unit/parser/loaded_code.rb @@ -8,22 +8,31 @@ require 'puppet/parser/resource_type' describe Puppet::Parser::LoadedCode do before do @instance = Puppet::Parser::ResourceType.new(:hostclass, "foo") - @code = Puppet::Parser::LoadedCode.new + @code = Puppet::Parser::LoadedCode.new("env") + end + + it "should require an environment at initialization" do + Puppet::Parser::LoadedCode.new("foo").environment.should == "foo" + end + + it "should store itself as the environment-specific code collection in its class" do + code = Puppet::Parser::LoadedCode.new("foo") + Puppet::Parser::LoadedCode["foo"].should equal(code) end it "should be able to add a resource type" do - Puppet::Parser::LoadedCode.new.should respond_to(:add) + Puppet::Parser::LoadedCode.new("env").should respond_to(:add) end it "should consider '<<' to be an alias to 'add' but should return self" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") loader.expects(:add).with "foo" loader.expects(:add).with "bar" loader << "foo" << "bar" end it "should set itself as the code collection for added resource types" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") node = Puppet::Parser::ResourceType.new(:node, "foo") @@ -56,48 +65,48 @@ describe Puppet::Parser::LoadedCode do %w{hostclass node definition}.each do |data| it "should have a method for adding a #{data}" do - Puppet::Parser::LoadedCode.new.should respond_to("add_" + data) + Puppet::Parser::LoadedCode.new("env").should respond_to("add_" + data) end it "should use the name of the instance to add it" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") loader.send("add_#{data}", @instance) loader.send(data, @instance.name).should equal(@instance) end it "should fail to add a #{data} when one already exists" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") loader.add @instance lambda { loader.add(@instance) }.should raise_error(Puppet::ParseError) end it "should return the added #{data}" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") loader.add(@instance).should equal(@instance) end it "should be able to retrieve #{data} by name" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(data, "bar") loader.add instance loader.send(data, "bar").should equal(instance) end it "should retrieve #{data} insensitive to case" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(data, "Bar") loader.add instance loader.send(data, "bAr").should equal(instance) end it "should return nil when asked for a #{data} that has not been added" do - Puppet::Parser::LoadedCode.new.send(data, "foo").should be_nil + Puppet::Parser::LoadedCode.new("env").send(data, "foo").should be_nil end it "should be able to retrieve all #{data}s" do plurals = { "hostclass" => "hostclasses", "node" => "nodes", "definition" => "definitions" } - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(data, "foo") loader.add instance loader.send(plurals[data]).should == { "foo" => instance } @@ -106,54 +115,54 @@ describe Puppet::Parser::LoadedCode do describe "when finding a qualified instance" do it "should return any found instance if the instance name is fully qualified" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(:hostclass, "foo::bar") loader.add instance loader.find("namespace", "::foo::bar", :hostclass).should equal(instance) end it "should return nil if the instance name is fully qualified and no such instance exists" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") loader.find("namespace", "::foo::bar", :hostclass).should be_nil end it "should return the partially qualified object if it exists in the provided namespace" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(:hostclass, "foo::bar::baz") loader.add instance loader.find("foo", "bar::baz", :hostclass).should equal(instance) end it "should return the unqualified object if it exists in the provided namespace" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(:hostclass, "foo::bar") loader.add instance loader.find("foo", "bar", :hostclass).should equal(instance) end it "should return the unqualified object if it exists in the parent namespace" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(:hostclass, "foo::bar") loader.add instance loader.find("foo::bar::baz", "bar", :hostclass).should equal(instance) end it "should should return the partially qualified object if it exists in the parent namespace" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(:hostclass, "foo::bar::baz") loader.add instance loader.find("foo::bar", "bar::baz", :hostclass).should equal(instance) end it "should return the qualified object if it exists in the root namespace" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(:hostclass, "foo::bar::baz") loader.add instance loader.find("foo::bar", "foo::bar::baz", :hostclass).should equal(instance) end it "should return nil if the object cannot be found" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") instance = Puppet::Parser::ResourceType.new(:hostclass, "foo::bar::baz") loader.add instance loader.find("foo::bar", "eh", :hostclass).should be_nil @@ -161,36 +170,36 @@ describe Puppet::Parser::LoadedCode do end it "should use the generic 'find' method with an empty namespace to find nodes" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") loader.expects(:find).with("", "bar", :node) loader.find_node("bar") end it "should use the generic 'find' method to find hostclasses" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") loader.expects(:find).with("foo", "bar", :hostclass) loader.find_hostclass("foo", "bar") end it "should use the generic 'find' method to find definitions" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") loader.expects(:find).with("foo", "bar", :definition) loader.find_definition("foo", "bar") end it "should indicate whether any nodes are defined" do - loader = Puppet::Parser::LoadedCode.new + loader = Puppet::Parser::LoadedCode.new("env") loader.add_node(Puppet::Parser::ResourceType.new(:node, "foo")) loader.should be_nodes end it "should indicate whether no nodes are defined" do - Puppet::Parser::LoadedCode.new.should_not be_nodes + Puppet::Parser::LoadedCode.new("env").should_not be_nodes end describe "when finding nodes" do before :each do - @loader = Puppet::Parser::LoadedCode.new + @loader = Puppet::Parser::LoadedCode.new("env") end it "should return any node whose name exactly matches the provided node name" do diff --git a/spec/unit/parser/resource_type.rb b/spec/unit/parser/resource_type.rb index ddf8ce9..f368f2a 100755 --- a/spec/unit/parser/resource_type.rb +++ b/spec/unit/parser/resource_type.rb @@ -270,7 +270,7 @@ describe Puppet::Parser::ResourceType do describe "when describing and managing parent classes" do before do - @code = Puppet::Parser::LoadedCode.new + @code = Puppet::Parser::ResourceTypeCollection.new("env") @parent = Puppet::Parser::ResourceType.new(:hostclass, "bar") @code.add @parent @@ -364,7 +364,7 @@ describe Puppet::Parser::ResourceType do @top = Puppet::Parser::ResourceType.new :hostclass, "top" @middle = Puppet::Parser::ResourceType.new :hostclass, "middle", :parent => "top" - @code = Puppet::Parser::LoadedCode.new + @code = Puppet::Parser::ResourceTypeCollection.new("env") @code.add @top @code.add @middle end @@ -455,7 +455,7 @@ describe Puppet::Parser::ResourceType do end it "should fail if both classes have different parent classes" do - code = Puppet::Parser::LoadedCode.new + code = Puppet::Parser::ResourceTypeCollection.new("env") {"a" => "b", "c" => "d"}.each do |parent, child| code.add Puppet::Parser::ResourceType.new(:hostclass, parent) code.add Puppet::Parser::ResourceType.new(:hostclass, child, :parent => parent) diff --git a/spec/unit/util/rdoc/parser.rb b/spec/unit/util/rdoc/parser.rb index 19c91bb..88945c9 100755 --- a/spec/unit/util/rdoc/parser.rb +++ b/spec/unit/util/rdoc/parser.rb @@ -141,8 +141,8 @@ describe RDoc::Parser do @definition = stub_everything 'definition', :file => "module/manifests/init.pp", :type => :definition, :name => "mydef" @node = stub_everything 'node', :file => "module/manifests/init.pp", :type => :node, :name => "mynode" - @loadedcode = Puppet::Parser::LoadedCode.new - @parser.ast = @loadedcode + @resource_type_collection = Puppet::Parser::ResourceTypeCollection.new("env") + @parser.ast = @resource_type_collection @container = stub_everything 'container' end -- 1.6.1
-- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
