Sha256: 47188a78a9e3530f300441c1441eaebd49c97f2d57f804c9683bac11dce8da37
Contents?: true
Size: 1.99 KB
Versions: 4
Compression:
Stored size: 1.99 KB
Contents
# Copyright (c) 2010 VMware, Inc. All Rights Reserved. require 'set' module RbVmomi class TypeStore def initialize fn File.open(fn, 'r') do |io| @db = Marshal.load io end end def [](k) @db[k] end end class TypeLoader attr_reader :typenames def initialize target, fn @target = target @db = TypeStore.new fn end def init @typenames = Set.new(@db['_typenames'] + BasicTypes::BUILTIN) @target.constants.select { |x| has_type? x.to_s }.each { |x| load_type x.to_s } BasicTypes::BUILTIN.each do |x| @target.const_set x, BasicTypes.const_get(x) load_extension x end Object.constants.map(&:to_s).select { |x| has_type? x }.each do |x| load_type x end end def has_type? name fail unless name.is_a? String @typenames.member? name end def load_type name fail unless name.is_a? String @target.const_set name, make_type(name) load_extension name nil end private def load_extension name dirs = @target.extension_dirs dirs.map { |x| File.join(x, "#{name}.rb") }. select { |x| File.exists? x }. each { |x| load x } end def make_type name name = name.to_s fail if BasicTypes::BUILTIN.member? name desc = @db[name] or fail "unknown VMODL type #{name}" case desc['kind'] when 'data' then make_data_type name, desc when 'managed' then make_managed_type name, desc when 'enum' then make_enum_type name, desc else fail desc.inspect end end def make_data_type name, desc superclass = @target.const_get desc['wsdl_base'] Class.new(superclass).tap do |klass| klass.init name, desc['props'] end end def make_managed_type name, desc superclass = @target.const_get desc['wsdl_base'] Class.new(superclass).tap do |klass| klass.init name, desc['props'], desc['methods'] end end def make_enum_type name, desc Class.new(BasicTypes::Enum).tap do |klass| klass.init name, desc['values'] end end end end
Version data entries
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
rbvmomi-1.2.3 | lib/rbvmomi/type_loader.rb |
rbvmomi-1.2.2 | lib/rbvmomi/type_loader.rb |
rbvmomi-1.2.1 | lib/rbvmomi/type_loader.rb |
rbvmomi-1.2.0 | lib/rbvmomi/type_loader.rb |