Module: Traversable

Included in:
Schemable
Defined in:
lib/traversable.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

._traverse(key, value, path, &block) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/traversable.rb', line 9

def self._traverse(key, value, path, &block)
  if value.is_a?(Hash)
    value.each do |k, v|
      p = path + [key]
      yield(p, value)
      _traverse(k, v, p, &block)
    end
  else
    yield(path + [key], value)
  end
end

Instance Method Details

#ref(key_path) ⇒ Object

reference([“a”, “b”]) is a safe version of self[“b”]



22
23
24
25
26
27
28
# File 'lib/traversable.rb', line 22

def ref(key_path)
  object = self
  key_path.each do |key|
    object = object.is_a?(Hash) ? object[key] : nil
  end
  object
end

#traverse(&block) ⇒ Object



3
4
5
6
7
# File 'lib/traversable.rb', line 3

def traverse(&block)
  self.each do |key, value|
    Traversable._traverse(key, value, [], &block)
  end
end