Sha256: 8642520003f4003f2de423dec83bb17e0e2be00fcc2e087bff08c2d05ffaba7e

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

# load 'the_role/hash.rb' - UPDATE, BUT NOT RELOAD [for console testing]
class Hash
  # deep_transform_keys
  # deep_stringify_keys
  # underscorify_keys
  # deep_reset
  unless {}.respond_to?(:deep_transform_keys)
    def deep_transform_keys(&block)
      result = {}
      each do |key, value|
        result[yield(key)] = value.is_a?(Hash) ? value.deep_transform_keys(&block) : value
      end
      result
    end

    def deep_transform_keys!(&block)
      keys.each do |key|
        value = delete(key)
        self[yield(key)] = value.is_a?(Hash) ? value.deep_transform_keys!(&block) : value
      end
      self
    end
  end

  unless {}.respond_to?(:deep_stringify_keys)
    def deep_stringify_keys
      deep_transform_keys{ |key| key.to_s }
    end

    def deep_stringify_keys!
      deep_transform_keys!{ |key| key.to_s }
    end
  end

  unless {}.respond_to?(:underscorify_keys)
    def underscorify_keys
      deep_transform_keys{ |key| key.to_s.to_slug_param(delimiter: '_') }
    end

    def underscorify_keys!
      replace underscorify_keys
    end
  end

  unless {}.respond_to?(:deep_reset)
    def deep_reset(default = nil)
      hash = dup
      hash.each do |key, value|
        hash[key] = hash[key].is_a?(Hash) ? hash[key].deep_reset(default) : default
      end
      hash
    end

    def deep_reset!(default = nil)
      replace deep_reset(default)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
the_role-2.5.1 lib/the_role/hash.rb
the_role-2.5 lib/the_role/hash.rb