class Hash
  # Hash#deep_symbolize_keys
  # based on
  # https://github.com/svenfuchs/i18n/blob/master/lib/i18n/core_ext/hash.rb
  def deep_symbolize_keys
    inject({}) { |result, (key, value)|
      value = value.deep_symbolize_keys if value.is_a?(self.class)
      result[(key.to_sym rescue key) || key] = value
      result
    }
  end unless self.method_defined?(:deep_symbolize_keys)

  def self.merge(*items)
    return nil if items.compact.empty?
    items.compact.inject({}){|sum, item| sum.merge!(item)}
  end
end