[ create a new paste ] login | about

Link: http://codepad.org/mkx3P4tx    [ raw code | output | fork ]

Ruby, pasted on May 23:
#!/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


Output:
1
Registering add-in AddIn.GenericAddIn (via FooAddin)


Create a new paste based on this one


Comments: