saiqulhaq/case_transform

View on GitHub
lib/case_transform2/hash_ext.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
# frozen_string_literal: true

module CaseTransform2
  # @api private
  class HashExt
    def deep_transform_keys!(object, &block)
      _deep_transform_keys_in_object!(object, &block)
    end

    private

    def _deep_transform_keys_in_object!(object, &block) # rubocop:disable Metrics/MethodLength
      case object
      when Hash
        object.keys.each do |key| # rubocop:disable Style/HashEachMethods
          value = object.delete(key)
          object[yield(key)] = _deep_transform_keys_in_object!(value, &block)
        end
        object
      when Array
        object.map! { |e| _deep_transform_keys_in_object!(e, &block) }
      else
        object
      end
    end
  end
end