diff options
author | Matthew Kent <mkent@magoazul.com> | 2010-02-23 00:10:22 -0800 |
---|---|---|
committer | Matthew Kent <mkent@magoazul.com> | 2010-02-23 00:10:22 -0800 |
commit | e129a45ec90d19dfa0a4b2dce208b040d9986225 (patch) | |
tree | a2b74b4fee7baacf14472d74a7218e39f23fd5f9 | |
parent | f9f7acabd54de2a5427e942056c568b6645c5e22 (diff) | |
download | chef-e129a45ec90d19dfa0a4b2dce208b040d9986225.tar.gz |
CHEF-928: Drop the use of blank?, as provided by extlib/blank.rb, in determining
if values should be overwritten. Causes some difficult to track down hash merge
issues when extlib is loaded.
Add specs to cover the expected behaviour.
-rw-r--r-- | chef/lib/chef/mixin/deep_merge.rb | 4 | ||||
-rw-r--r-- | chef/spec/unit/mixin/deep_merge_spec.rb | 29 |
2 files changed, 31 insertions, 2 deletions
diff --git a/chef/lib/chef/mixin/deep_merge.rb b/chef/lib/chef/mixin/deep_merge.rb index d4e24bef6e..8cda5465d7 100644 --- a/chef/lib/chef/mixin/deep_merge.rb +++ b/chef/lib/chef/mixin/deep_merge.rb @@ -102,9 +102,9 @@ class Chef sort_merged_arrays = options[:sort_merged_arrays] || false di = options[:debug_indent] || '' # do nothing if source is nil - return dest if source.nil? || (source.respond_to?(:blank?) && source.blank?) + return dest if source.nil? # if dest doesn't exist, then simply copy source to it - if !(dest) && overwrite_unmergeable + if dest.nil? && overwrite_unmergeable dest = source; return dest end diff --git a/chef/spec/unit/mixin/deep_merge_spec.rb b/chef/spec/unit/mixin/deep_merge_spec.rb index a9a8aaa0e6..eba89cb8a4 100644 --- a/chef/spec/unit/mixin/deep_merge_spec.rb +++ b/chef/spec/unit/mixin/deep_merge_spec.rb @@ -666,6 +666,35 @@ describe Chef::Mixin::DeepMerge, "deep_merge!" do DM.deep_merge!(hash_src, hash_dst) hash_dst.should == {"item" => [{"3" => "5"}, {"1" => "3"}, {"2" => "4"}]} end + + # Additions since import + it "should overwrite true with false when merging boolean values" do + hash_src = {"valid" => false} + hash_dst = {"valid" => true} + DM.deep_merge!(hash_src, hash_dst) + hash_dst.should == {"valid" => false} + end + + it "should overwrite false with true when merging boolean values" do + hash_src = {"valid" => true} + hash_dst = {"valid" => false} + DM.deep_merge!(hash_src, hash_dst) + hash_dst.should == {"valid" => true} + end + + it "should overwrite a string with an empty string when merging string values" do + hash_src = {"item" => " "} + hash_dst = {"item" => "orange"} + DM.deep_merge!(hash_src, hash_dst) + hash_dst.should == {"item" => " "} + end + + it "should overwrite an empty string with a string when merging string values" do + hash_src = {"item" => "orange"} + hash_dst = {"item" => " "} + DM.deep_merge!(hash_src, hash_dst) + hash_dst.should == {"item" => "orange"} + end end # deep_merge! # Chef specific |