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