module Vizkit::PluginAccessorCommon

Implements the accessors for plugins if a plugin called “vizkit::Viz” or “vizkit.Viz” is added it can be accessed via plugin_accessor.vizkit.Viz and is stored as plugin_accessor.plugin_specs and plugin_specs.vizkit.plugin_specs

Public Instance Methods

add_plugin_spec(spec,name=spec.plugin_name) click to toggle source
# File lib/vizkit/plugin_accessor.rb, line 16
def add_plugin_spec(spec,name=spec.plugin_name)
    @plugin_specs[name] = spec
    names = name.sub(/::/,".").split(".")
    if names.size > 1
        accessor = if self.respond_to? names.first 
                    self.send(names.first)
                else
                    accessor = PluginAccessor.new(names.first)
                    accessor.instance_variable_set(:@uiloader,@uiloader||self)
                    instance_variable_set("@#{names.first}",accessor)
                    (class << self;self;end).send(:define_method,names.first) do 
                        instance_variable_get("@#{names.first}")
                    end
                    accessor
                end
        name = names[1..-1].join(".")
        accessor.add_plugin_spec(spec,name)
    else
        (class << self;self;end).send(:define_method,name) do |*parent|
            reuse = if parent.size >= 2
                        parent[1]
                    else
                        false
                    end
            (@uiloader||self).create_plugin(spec.plugin_name,parent.first,reuse)
        end
    end
    spec
end
available_plugins() click to toggle source
# File lib/vizkit/plugin_accessor.rb, line 7
def available_plugins
    @plugin_specs.keys
end
plugin?(class_name) click to toggle source
# File lib/vizkit/plugin_accessor.rb, line 11
def plugin?(class_name)
    class_name = PluginHelper.normalize_obj(class_name,false).first
    available_plugins.include?(class_name)
end