Sha256: 705befa36ee330af4fc3e322786278f239726c69e327cc54498a09df97fd5ad4

Contents?: true

Size: 888 Bytes

Versions: 3

Compression:

Stored size: 888 Bytes

Contents

# frozen_string_literal: true

# Extend Object through refinements
module Runger::Ext::DeepDup
  refine ::Hash do
    # Based on ActiveSupport http://api.rubyonrails.org/classes/Hash.html#method-i-deep_dup
    def deep_dup
      each_with_object(dup) do |(key, value), hash|
        hash[key] =
          if value.is_a?(::Hash) || value.is_a?(::Array)
            value.deep_dup
          else
            value
          end
      end
    end
  end

  refine ::Array do
    # From ActiveSupport http://api.rubyonrails.org/classes/Array.html#method-i-deep_dup
    def deep_dup
      map do |value|
        if value.is_a?(::Hash) || value.is_a?(::Array)
          value.deep_dup
        else
          value
        end
      end
    end
  end

  refine ::Object do
    def deep_dup
      dup
    end
  end

  refine ::Module do
    def deep_dup
      self
    end
  end

  using self
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
runger_config-5.2.0 lib/runger/ext/deep_dup.rb
runger_config-5.1.0 lib/runger/ext/deep_dup.rb
runger_config-5.0.0 lib/runger/ext/deep_dup.rb