arkency/rails_event_store

View on GitHub
ruby_event_store/lib/ruby_event_store/transform_keys.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

module RubyEventStore
  class TransformKeys
    class << self
      def stringify(data)
        deep_transform(data, &:to_s)
      end

      def symbolize(data)
        deep_transform(data, &:to_sym)
      end

      private

      def deep_transform(data, &block)
        case data
        when Hash
          data.each_with_object({}) do |(key, value), hash|
            hash[yield(key)] = deep_transform(value, &block)
          end
        when Array
          data.map { |i| deep_transform(i, &block) }
        else
          data
        end
      end
    end
  end
end