f2a2422b9b6ca4ebc0bfc540a2fc2435c4c98a26
[packages/precise/mcollective.git] / lib / mcollective / vendor / i18n / lib / i18n / core_ext / hash.rb
1 class Hash
2   def slice(*keep_keys)
3     h = {}
4     keep_keys.each { |key| h[key] = fetch(key) }
5     h
6   end unless Hash.method_defined?(:slice)
7
8   def except(*less_keys)
9     slice(*keys - less_keys)
10   end unless Hash.method_defined?(:except)
11
12   def deep_symbolize_keys
13     inject({}) { |result, (key, value)|
14       value = value.deep_symbolize_keys if value.is_a?(Hash)
15       result[(key.to_sym rescue key) || key] = value
16       result
17     }
18   end unless Hash.method_defined?(:deep_symbolize_keys)
19
20   # deep_merge_hash! by Stefan Rusterholz, see http://www.ruby-forum.com/topic/142809
21   MERGER = proc do |key, v1, v2|
22     Hash === v1 && Hash === v2 ? v1.merge(v2, &MERGER) : v2
23   end
24   
25   def deep_merge!(data)
26     merge!(data, &MERGER)
27   end unless Hash.method_defined?(:deep_merge!)
28 end
29