module TwitterCldr::Utils
Public Class Methods
compute_cache_key(*pieces)
click to toggle source
# File lib/twitter_cldr/utils.rb, line 59 def compute_cache_key(*pieces) if pieces && pieces.size > 0 pieces.join("|").hash else 0 end end
deep_merge!(first, second)
click to toggle source
# File lib/twitter_cldr/utils.rb, line 33 def deep_merge!(first, second) if first.is_a?(Hash) && second.is_a?(Hash) second.each { |key, val| first[key] = deep_merge!(first[key], val) } elsif first.is_a?(Array) && second.is_a?(Array) second.each_with_index { |elem, index| first[index] = deep_merge!(first[index], elem) } else return second end first end
deep_merge_hash(first, second) { |first, second| ... }
click to toggle source
# File lib/twitter_cldr/utils.rb, line 44 def deep_merge_hash(first, second, &block) target = first.dup second.keys.each do |key| if second[key].is_a?(Hash) && first[key].is_a?(Hash) target[key] = deep_merge_hash(target[key], second[key], &block) next end target[key] = block_given? ? yield(first[key], second[key]) : second[key] end target end
deep_symbolize_keys(arg)
click to toggle source
adapted from: snippets.dzone.com/posts/show/11121 (first comment)
# File lib/twitter_cldr/utils.rb, line 22 def deep_symbolize_keys(arg) case arg when Array arg.map { |elem| deep_symbolize_keys(elem) } when Hash Hash[arg.map { |k, v| [k.is_a?(String) ? k.to_sym : k, deep_symbolize_keys(v)] }] else arg end end
traverse_hash(hash, path) { |key, current| ... }
click to toggle source
# File lib/twitter_cldr/utils.rb, line 67 def traverse_hash(hash, path, &block) return if path.empty? path.inject(hash) do |current, key| return unless current.is_a?(Hash) if block yield key, current[key] else current[key] end end end