aglushkov/serega

View on GitHub
lib/serega/utils/enum_deep_freeze.rb

Summary

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

class Serega
  #
  # Utilities
  #
  module SeregaUtils
    #
    # Utility to freeze nested hashes and arrays
    #
    class EnumDeepFreeze
      class << self
        #
        # Freezes nested hashes and arrays
        #
        # @param data[Hash, Array] data to freeze
        #
        # @return [Hash, Array] same deeply frozen data
        #
        def call(data)
          case data
          when Hash
            data.transform_values! { |value| call(value) }
            data.freeze
          when Array
            data.map! { |value| call(value) }
            data.freeze
          end

          data
        end
      end
    end
  end
end