Method: Deep.reject

Defined in:
lib/vex/base/enumerable/deep.rb

.reject(o, mode, &block) ⇒ Object

deep reject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/vex/base/enumerable/deep.rb', line 35

def self.reject(o, mode, &block)
  case o
  when Hash
    o.inject({}) do |hash, (k,v)|
      next hash if (mode & KEYS) && yield(k)
      v = reject v, mode, &block
      next hash if (mode & VALUES) && yield(v)
      hash.update k => v
      hash
    end
  when Array
    if mode & VALUES
      o.inject([]) do |r, v|
        v = reject(v, mode, &block)
        r << v unless yield(v)
        r
      end
    else
      o.dup
    end
  else
    o
  end
end