#!/usr/bin/env ruby
module AddinManager
@addins = {
:generic => { },
:navigation => { },
:authentication => { }
}
def self.<<(addin)
puts "Registering add-in #{addin.ComponentName} (via #{addin.class})"
end
def self.[](category)
nil unless @addins.include?(category)
# Create an instance of the class if one hasn't been done before
if @addins[category][:instance] == nil
begin
object = @addins[Addin][:class]
@addins[Addin][:instance] = eval("#{object}.new")
rescue Exception => e
raise("Could not create instance of Addin #{Addin}: #{e}")
end
end
@addins[Addin][:instance]
end
end
class GenericAddin
def self.inherited(object)
AddinManager << object.new
end
def Title
return "Generic Add-in. This should never trigger, I think."
end
def ComponentName
return "AddIn.GenericAddIn"
end
def Description
return <<_EOF
===============================================================
= GENERIC APPLICATION ADD-IN CLASS DESCRIPTION =
===============================================================
This is a generic add-in. Anything that is not overridden here,
will show up with default values.
_EOF
end
def Category
return :generic
end
end
class FooAddin < GenericAddin
def ComponentName
raise "XXX"
end
def Description
return <<_EOF
===============================================================
= FooAddin ADD-IN FOR THE SAMPLE ADD-IN SYSTEM =
===============================================================
Generic text here. Woof, ruff, bark, meow.
_EOF
end
def Category
return :generic
end
def Title
return "FooAddin 1.0.0"
end
end