class BoxGrinder::PluginManager

Attributes

plugins[R]

Public Class Methods

new() click to toggle source
# File lib/boxgrinder-build/managers/plugin-manager.rb, line 36
def initialize
  @plugins = {:delivery => {}, :os => {}, :platform => {}}
end

Public Instance Methods

initialize_plugin(type, name) click to toggle source
# File lib/boxgrinder-build/managers/plugin-manager.rb, line 64
def initialize_plugin(type, name)
  plugins = @plugins[type]
  # this should never happen
  raise "There are no #{type} plugins." if plugins.nil?
  plugin_info = plugins[name]
  raise "There is no #{type} plugin registered for '#{name}' type/name." if plugin_info.nil?

  begin
    plugin = plugin_info[:class].new
  rescue
    raise "Error while initializing '#{plugin_info[:class].to_s}' plugin."
  end

  [plugin, plugin_info]
end
register_plugin(clazz, info) click to toggle source
# File lib/boxgrinder-build/managers/plugin-manager.rb, line 40
def register_plugin(clazz, info)
  info = {:class => clazz, :require_root => false}.merge(info)

  validate_plugin_info(info)

  raise "We already have registered plugin for #{info[:name]}." unless @plugins[info[:name]].nil?

  unless info[:types].nil?
    info[:types].each do |type|
      @plugins[info[:type]][type] = info
    end
  else
    @plugins[info[:type]][info[:name]] = info
  end

  self
end
validate_plugin_info(info) click to toggle source
# File lib/boxgrinder-build/managers/plugin-manager.rb, line 58
def validate_plugin_info(info)
  raise "No name specified for your plugin" if info[:name].nil?
  raise "No class specified for your plugin" if info[:class].nil?
  raise "No type specified for your plugin" if info[:type].nil?
end