class RbVmomi::TypeLoader

Public Class Methods

new(fn, extension_dirs, namespace) click to toggle source
# File lib/rbvmomi/type_loader.rb, line 8
def initialize fn, extension_dirs, namespace
  @extension_dirs = extension_dirs
  @namespace = namespace
  @lock = Monitor.new
  @db = {}
  @id2wsdl = {}
  @loaded = {}
  add_types Hash[BasicTypes::BUILTIN.map { |k| [k,nil] }]
  vmodl_database = File.open(fn, 'r') { |io| Marshal.load io }
  vmodl_database.reject! { |k,v| k =~ %r^_/ }
  add_types vmodl_database
  preload
end

Public Instance Methods

add_types(types) click to toggle source
# File lib/rbvmomi/type_loader.rb, line 65
def add_types types
  @lock.synchronize do
    @db.merge! types
  end
end
get(name) click to toggle source
# File lib/rbvmomi/type_loader.rb, line 53
def get name
  fail unless name.is_a? String
  return @loaded[name] if @loaded.member? name
  @lock.synchronize do
    return @loaded[name] if @loaded.member? name
    klass = make_type(name)
    @namespace.const_set name, klass
    load_extension name
    @loaded[name] = klass
  end
end
has?(name) click to toggle source
# File lib/rbvmomi/type_loader.rb, line 48
def has? name
  fail unless name.is_a? String
  @db.member?(name) or BasicTypes::BUILTIN.member?(name)
end
preload() click to toggle source
# File lib/rbvmomi/type_loader.rb, line 22
def preload
  names = (@namespace.constants + Object.constants).map(&:to_s).uniq.
                                                    select { |x| has? x }
  names.each { |x| get(x) }
end
reload_extensions() click to toggle source

Reload all extensions for loaded VMODL types

# File lib/rbvmomi/type_loader.rb, line 29
def reload_extensions
  @extension_dirs.each do |path|
    reload_extensions_dir path
  end
end
reload_extensions_dir(path) click to toggle source

Reload all extensions for loaded VMODL types from the given directory

# File lib/rbvmomi/type_loader.rb, line 36
def reload_extensions_dir path
  loaded = Set.new(typenames.select { |x| @namespace.const_defined? x })
  Dir.open(path) do |dir|
    dir.each do |file|
      next unless file =~ %r\.rb$/
      next unless loaded.member? $`
      file_path = File.join(dir, file)
      load file_path
    end
  end
end
typenames() click to toggle source
# File lib/rbvmomi/type_loader.rb, line 71
def typenames
  @db.keys
end