GateprotectGmbH/sparrow

View on GitHub
lib/sparrow/core_ext/hash.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Sparrow
  module CoreExt
    module Hash
      refine ::Hash do
        # Defines deep_transform_keys as available in ActiveSupport >= 4.0.2.
        # See {http://apidock.com/rails/v4.2.1/Hash/deep_transform_keys}
        def deep_transform_keys(&block)
          deep_transform_in_object(self, &block)
        end

        private

        def deep_transform_in_object(obj, &block)
          case obj
            when ::Hash
              obj.each_with_object({}) do |(key,value), result|
                result[yield(key)] = deep_transform_in_object(value, &block)
              end
            when Array
              obj.map { |el| deep_transform_in_object(el, &block) }
            else
              obj
          end
        end
      end
    end
  end
end