class PluginManager class_inheritable_accessor :plugins self.plugins = {} class << self def register(plugin_class, callback_method) self.plugins[plugin_class] = callback_method end def query_plugins(request) returning Array.new do |arr| self.plugins.each do |plugin_name, callback| link_name, link_url = plugin_name.send(callback, request) arr << {:text => link_name, :url => link_url } if link_name && link_url end end end end end