Method: RbVmomi::VIM::Folder#traverse

Defined in:
lib/rbvmomi/vim/Folder.rb

#traverse(path, type = Object, create = false) ⇒ VIM::ManagedEntity

TODO:

Move create functionality into another method.

Retrieve a descendant of this Folder.

Parameters:

  • path (String)

    Path delimited by ‘/’, or an array of path elements.

  • create (Boolean) (defaults to: false)

    If set, create folders that don’t exist.

  • type (Class) (defaults to: Object)

    Return nil unless the found entity is_a? type.

Returns:



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/rbvmomi/vim/Folder.rb', line 78

def traverse path, type=Object, create=false
  if path.is_a? String
    es = path.split('/').reject(&:empty?)
  elsif path.is_a? Enumerable
    es = path
  else
    fail "unexpected path class #{path.class}"
  end
  return self if es.empty?
  final = es.pop

  p = es.inject(self) do |f,e|
    f.find(e, RbVmomi::VIM::Folder) || (create && f.CreateFolder(:name => e)) || return
  end

  if x = p.find(final, type)
    x
  elsif create and type == RbVmomi::VIM::Folder
    p.CreateFolder(:name => final)
  elsif create and type == RbVmomi::VIM::Datacenter
    p.CreateDatacenter(:name => final)
  else
    nil
  end
end