Sha256: 103846f0866346a3aef8d5bf5f1b1116eb62f41ba9f0b1383219049527d056ad

Contents?: true

Size: 982 Bytes

Versions: 1

Compression:

Stored size: 982 Bytes

Contents

# frozen_string_literal: true

module Runger
  module Ext
    # Extend Hash through refinements
    module Hash
      refine ::Hash do
        def stringify_keys!
          keys.each do |key|
            value = delete(key)
            self[key.to_s] = value
          end

          self
        end

        def bury(val, *path)
          raise ArgumentError, "No path specified" if path.empty?
          raise ArgumentError, "Path cannot contain nil" if path.compact.size != path.size

          last_key = path.pop
          hash = path.reduce(self) do |hash, k|
            hash[k] = {} unless hash.key?(k) && hash[k].is_a?(::Hash)
            hash[k]
          end

          hash[last_key] = val
        end

        def deep_transform_keys(&block)
          each_with_object({}) do |(key, value), result|
            result[yield(key)] = value.is_a?(::Hash) ? value.deep_transform_keys(&block) : value
          end
        end
      end

      using self
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
runger_config-4.0.0 lib/runger/ext/hash.rb