# File lib/rbvmomi/vim/Folder.rb, line 108
  def inventory_flat propSpecs={}
    propSet = [{ :type => 'Folder', :pathSet => ['name', 'parent', 'childEntity'] }]
    propSpecs.each do |k,v|
      case k
      when Class
        fail "key must be a subclass of ManagedEntity" unless k < RbVmomi::VIM::ManagedEntity
        k = k.wsdl_name
      when Symbol, String
        k = k.to_s
      else
        fail "invalid key"
      end

      h = { :type => k }
      if v == :all
        h[:all] = true
      elsif v.is_a? Array
        h[:pathSet] = v + %w(parent)
      else
        fail "value must be an array of property paths or :all"
      end
      propSet << h
    end

    filterSpec = RbVmomi::VIM.PropertyFilterSpec(
      :objectSet => [
        :obj => self,
        :selectSet => [
          RbVmomi::VIM.TraversalSpec(
            :name => 'tsFolder',
            :type => 'Folder',
            :path => 'childEntity',
            :skip => false,
            :selectSet => [
              RbVmomi::VIM.SelectionSpec(:name => 'tsFolder')
            ]
          )
        ]
      ],
      :propSet => propSet
    )

    result = _connection.propertyCollector.RetrieveProperties(:specSet => [filterSpec])
    {}.tap do |h|
      result.each { |r| h[r.obj] = r }
    end
  end