summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/parser/loaded_code.rb23
-rw-r--r--spec/unit/parser/loaded_code.rb7
2 files changed, 19 insertions, 11 deletions
diff --git a/lib/puppet/parser/loaded_code.rb b/lib/puppet/parser/loaded_code.rb
index 111e8ea1b..065fcb99c 100644
--- a/lib/puppet/parser/loaded_code.rb
+++ b/lib/puppet/parser/loaded_code.rb
@@ -3,6 +3,9 @@ class Puppet::Parser::LoadedCode
@hostclasses = {}
@definitions = {}
@nodes = {}
+
+ # So we can keep a list and match the first-defined regex
+ @node_list = []
end
def add_hostclass(name, code)
@@ -14,19 +17,23 @@ class Puppet::Parser::LoadedCode
end
def add_node(name, code)
- @nodes[check_name(name)] = code
+ name = check_name(name)
+ @node_list << name unless @node_list.include?(name)
+ @nodes[name] = code
end
def node(name)
name = check_name(name)
- unless node = @nodes[name]
- @nodes.each do |nodename, n|
- if nodename.regex? and nodename.match(name)
- return n
- end
- end
+
+ if node = @nodes[name]
+ return node
+ end
+
+ @node_list.each do |nodename|
+ n = @nodes[nodename]
+ return n if nodename.regex? and nodename.match(name)
end
- node
+ nil
end
def nodes?
diff --git a/spec/unit/parser/loaded_code.rb b/spec/unit/parser/loaded_code.rb
index 16bd1be83..a280f9827 100644
--- a/spec/unit/parser/loaded_code.rb
+++ b/spec/unit/parser/loaded_code.rb
@@ -159,10 +159,11 @@ describe Puppet::Parser::LoadedCode do
@loader.node(nameout) == "bar"
end
- it "should return the first matching regex nodename" do
+ it "should return the first matching rgex nodename" do
@nodename1.stubs(:regex?).returns(true)
- @nodename1.expects(:match).returns(true)
- @nodename2.stubs(:regex?).returns(false)
+ @nodename1.stubs(:match).returns(true)
+ @nodename2.stubs(:regex?).returns(true)
+ @nodename2.stubs(:match).returns(true)
@loader.add_node(@nodename1, @node1)
@loader.add_node(@nodename2, @node2)