Method: Deep.map

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

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

deep mapping



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/vex/base/enumerable/deep.rb', line 7

def self.map(o, mode, &block)
  case o
  when Hash
    o.inject({}) do |hash, (k,v)|
      k = yield(k) if (mode & KEYS) != 0
      v = map(v, mode, &block)
      hash.update k => v
      hash
    end
  when Array
    if mode & VALUES
      o.map do |v|
        map(v, mode, &block)
      end
    else
      o.dup
    end
  else
    if (mode & VALUES) != 0
      yield o 
    else
      o
    end
  end
end