diff options
author | Luke Kanies <luke@madstop.com> | 2009-09-01 00:20:15 -0700 |
---|---|---|
committer | Luke Kanies <luke@madstop.com> | 2009-09-01 00:20:15 -0700 |
commit | 800a78b993f15e2d77312bf207929ec876e9b227 (patch) | |
tree | b56321378a756cac23efadb3c3a555dd35a8c669 | |
parent | 6750aeb90a4d19a2cd1de3ff007f216d31c4e65d (diff) | |
download | puppet-800a78b993f15e2d77312bf207929ec876e9b227.tar.gz puppet-800a78b993f15e2d77312bf207929ec876e9b227.tar.xz puppet-800a78b993f15e2d77312bf207929ec876e9b227.zip |
The first regex node now matches first
Before it was undefined, but now we always match
the first defined node.
Signed-off-by: Luke Kanies <luke@madstop.com>
-rw-r--r-- | lib/puppet/parser/loaded_code.rb | 23 | ||||
-rw-r--r-- | spec/unit/parser/loaded_code.rb | 7 |
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) |