Sha256: 3cea88188809c03bb15cd4708ae90c2dc4c1ed95b046aebdfc82f58f1873ad37

Contents?: true

Size: 771 Bytes

Versions: 6

Compression:

Stored size: 771 Bytes

Contents

class Hash
  def deep_camel_case_lower_keys(hash=self)
    {}.tap { |h|
      hash.each { |key, value| h[camel_case_lower_key(key)] = map_value(value, :deep_camel_case_lower_keys) }
    }
  end

  def deep_underscore_keys(hash=self)
    {}.tap { |h|
      hash.each { |key, value| h[underscore_key(key)] = map_value(value, :deep_underscore_keys) }
    }
  end

  private

  def underscore_key(key)
    key.to_s.underscore.to_sym
  end

  def camel_case_lower_key(key)
    key.to_s.split('_').inject([]){ |buffer, e| buffer.push(buffer.empty? ? e : e.capitalize) }.join.to_sym
  end

  def map_value(thing, method)
    case thing
    when Hash
      __send__(method, thing)
    when Array
      thing.map { |v| map_value(v, method) }
    else
      thing
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
ipay-rails-1.0 lib/ipay/utilities/hash.rb
alegra-0.4.1 lib/alegra/utilities/hash.rb
alegra-0.1.2.3 lib/alegra/utilities/hash.rb
alegra-0.1.2.2 lib/alegra/utilities/hash.rb
alegra-0.1.2.1 lib/alegra/utilities/hash.rb
alegra-0.1.2 lib/alegra/utilities/hash.rb