Sha256: f3c2c1cb67cc51ae93cefde697fc9d7aeb17b59f269e3485d4c9a6cf50407de2

Contents?: true

Size: 652 Bytes

Versions: 9

Compression:

Stored size: 652 Bytes

Contents

class Hash
  # Returns a new hash with keys deleted if they match a criteria
  #   h1 = { x: { y: [ { z: 4, y: 1 }, 5, 6] }, a: { b: 2 }  }
  #
  #   h1.deep_delete { |k,v| k == :z } #=> { x: { y: [ { y: 1 }, 5, 6] }, a: { b: 2 }  }
  #   h1.deep_delete { |k,v| k == :y } #=> { x: {}, a: { b: 2 }  }
  def deep_delete_if(&block)
    result = {}
    each do |key, value|
      next if block.call(key, value)

      result[key] = if value.is_a?(Hash)
        value.deep_delete_if(&block)
      elsif value.is_a?(Array)
        value.map { |v| v.is_a?(Hash) ? v.deep_delete_if(&block) : v }
      else
       value
      end
    end

    result
  end
end

Version data entries

9 entries across 9 versions & 2 rubygems

Version Path
motion-support-1.2.1 motion/core_ext/hash/deep_delete_if.rb
motion-support-1.1.1 motion/core_ext/hash/deep_delete_if.rb
motion-support-1.2.0 motion/core_ext/hash/deep_delete_if.rb
motion-support-1.1.0 motion/core_ext/hash/deep_delete_if.rb
motion-support-1.0.0 motion/core_ext/hash/deep_delete_if.rb
motion-support-0.3.0 motion/core_ext/hash/deep_delete_if.rb
motion_blender-support-0.2.8 motion/core_ext/hash/deep_delete_if.rb
motion_blender-support-0.2.7 motion/core_ext/hash/deep_delete_if.rb
motion-support-0.2.6 motion/core_ext/hash/deep_delete_if.rb