summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Keiser <jkeiser@opscode.com>2013-12-10 07:42:45 -0800
committerJohn Keiser <jkeiser@opscode.com>2013-12-10 07:42:45 -0800
commit4920cb60e1bf8b7da0deb85f01c9e33a5d6e31a1 (patch)
treeaf865e7d66fa5809e0014194b3483ed9b721bc42
parent8fc8debbabc932dee599b2857474eb0936be6849 (diff)
downloadchef-jk/resource-provides-fix.tar.gz
Remove the "filter" method for faster platform_resourcejk/resource-provides-fix
-rw-r--r--lib/chef/resource_platform_map.rb43
-rw-r--r--spec/unit/resource_platform_map_spec.rb38
2 files changed, 20 insertions, 61 deletions
diff --git a/lib/chef/resource_platform_map.rb b/lib/chef/resource_platform_map.rb
index dbf49b3b84..16eae7eda2 100644
--- a/lib/chef/resource_platform_map.rb
+++ b/lib/chef/resource_platform_map.rb
@@ -32,27 +32,6 @@ class Chef
@map = map
end
- def filter(platform, version)
- resource_map = {}
- platform_sym = platform
- if platform.kind_of?(String)
- platform.downcase!
- platform.gsub!(/\s/, "_")
- platform_sym = platform.to_sym
- end
-
- [ :default, platform_sym ].each do |platform_key|
- if map.has_key?(platform_key)
- [ :default, version ].each do |version_key|
- if map[platform_key].has_key?(version_key)
- resource_map.merge!(map[platform_key][version_key])
- end
- end
- end
- end
- resource_map
- end
-
def set(args)
validate(
args,
@@ -94,10 +73,28 @@ class Chef
private
def platform_resource(short_name, platform, version)
- pmap = filter(platform, version)
+ platform_sym = platform
+ if platform.kind_of?(String)
+ platform.downcase!
+ platform.gsub!(/\s/, "_")
+ platform_sym = platform.to_sym
+ end
+
rtkey = short_name.kind_of?(Chef::Resource) ? short_name.resource_name.to_sym : short_name
- pmap.has_key?(rtkey) ? pmap[rtkey] : nil
+ [ platform_sym, :default ].each do |platform_key|
+ if map.has_key?(platform_key)
+ [ version, :default ].each do |version_key|
+ if map[platform_key].has_key?(version_key)
+ if map[platform_key][version_key].has_key?(rtkey)
+ return map[platform_key][version_key][rtkey]
+ end
+ end
+ end
+ end
+ end
+
+ nil
end
def resource_matching_short_name(short_name)
diff --git a/spec/unit/resource_platform_map_spec.rb b/spec/unit/resource_platform_map_spec.rb
index 7d73a069ed..8be73e623b 100644
--- a/spec/unit/resource_platform_map_spec.rb
+++ b/spec/unit/resource_platform_map_spec.rb
@@ -44,44 +44,6 @@ describe Chef::Resource::PlatformMap do
})
end
- describe 'filtering the map' do
- it "returns resources for platform and version" do
- pmap = @platform_map.filter("Windows", "6.1")
- pmap.should be_a_kind_of(Hash)
- pmap[:file].should eql("softiefile")
- end
-
- it "returns platform default resources if version does not exist" do
- pmap = @platform_map.filter("windows", "1")
- pmap.should be_a_kind_of(Hash)
- pmap[:file].should eql(Chef::Resource::File)
- end
-
- it "returns global default resources if none exist for plaform" do
- pmap = @platform_map.filter("pop_tron", "1")
- pmap.should be_a_kind_of(Hash)
- pmap[:directory].should eql(Chef::Resource::Directory)
- end
-
- it "returns global default resources if platform does not exist" do
- pmap = @platform_map.filter("BeOS", "1")
- pmap.should be_a_kind_of(Hash)
- pmap[:soundwave].should eql("lazerbeak")
- end
-
- it "returns a merged map of platform version and plaform default resources" do
- pmap = @platform_map.filter("Windows", "6.1")
- pmap[:file].should eql("softiefile")
- pmap[:ping].should eql("pong")
- end
-
- it "returns a merged map of platform specific version and global defaults" do
- pmap = @platform_map.filter("Windows", "6.1")
- pmap[:file].should eql("softiefile")
- pmap[:soundwave].should eql("lazerbeak")
- end
- end
-
describe 'finding a resource' do
it "returns a resource for a platform directly by short name" do
@platform_map.get(:file, "windows", "6.1").should eql("softiefile")