lib/darkext/hash.rb in darkhelmet-darkext-0.5.3 vs lib/darkext/hash.rb in darkhelmet-darkext-0.5.4
- old
+ new
@@ -6,6 +6,36 @@
# Merges defaults with the hash (destructive)
def with_defaults!(defaults)
self.merge!(defaults) { |key,old,new| old.nil? ? new : old }
end
+
+ def nested_find(*keys)
+ v = self
+ keys.each do |key|
+ v = v[key]
+ return nil if v.nil?
+ end
+ return v
+ end
+
+ # http://snippets.dzone.com/posts/show/4146
+ def deep_merge!(second)
+ # From: http://www.ruby-forum.com/topic/142809
+ # Author: Stefan Rusterholz
+ merger = proc { |key,v1,v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
+ self.merge!(second, &merger)
+ end
+
+ def nested_hash(array)
+ node = self
+ array.each do |i|
+ node[i]=Hash.new if node[i].nil?
+ node = node[i]
+ end
+ self
+ end
+
+ def merge_nested_hash!(nested_hash)
+ deep_merge!(nested_hash)
+ end
end