summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Kent <mkent@magoazul.com>2010-02-23 00:10:22 -0800
committerMatthew Kent <mkent@magoazul.com>2010-02-23 00:10:22 -0800
commite129a45ec90d19dfa0a4b2dce208b040d9986225 (patch)
treea2b74b4fee7baacf14472d74a7218e39f23fd5f9
parentf9f7acabd54de2a5427e942056c568b6645c5e22 (diff)
downloadchef-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.rb4
-rw-r--r--chef/spec/unit/mixin/deep_merge_spec.rb29
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