diff options
author | John Keiser <jkeiser@opscode.com> | 2013-12-10 07:42:45 -0800 |
---|---|---|
committer | John Keiser <jkeiser@opscode.com> | 2013-12-10 07:42:45 -0800 |
commit | 4920cb60e1bf8b7da0deb85f01c9e33a5d6e31a1 (patch) | |
tree | af865e7d66fa5809e0014194b3483ed9b721bc42 | |
parent | 8fc8debbabc932dee599b2857474eb0936be6849 (diff) | |
download | chef-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.rb | 43 | ||||
-rw-r--r-- | spec/unit/resource_platform_map_spec.rb | 38 |
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") |