Sha256: c0129ae829cc9011ee91f1d3ef9fc3a76b9958df8b08c97a94d14a80013ca446

Contents?: true

Size: 1.29 KB

Versions: 11

Compression:

Stored size: 1.29 KB

Contents

require File.join(File.dirname(__FILE__), "resource")

module PoolParty    
  module PluginModel
    
    def plugin(name=:plugin, cloud=nil, &block)
      plugins[name] ||= PluginModel.new(name, &block)
    end
    alias_method :register_plugin, :plugin
    
    def plugins
      $plugins ||= {}
    end
    
    class PluginModel
      attr_accessor :klass
      
      def initialize(name,&block)        
        symc = "#{name}".top_level_class.camelcase
        klass = symc.class_constant(PoolParty::Plugin::Plugin, {:preserve => true}, &block)
        
        lowercase_class_name = symc.downcase
        # Store the name of the class for pretty printing later
        # klass.name = name
        # Add the plugin definition to the cloud as an instance method
        meth = <<-EOM
          def #{lowercase_class_name}(opts={}, &block)
            i = plugin_store.select {|i| i if i.class == #{lowercase_class_name.camelcase}Class }.first if plugin_store
            if i
              i
            else              
              inst = #{lowercase_class_name.camelcase}Class.new(opts, parent, &block)
              plugin_store << inst if plugin_store
              inst
            end
          end
        EOM

        PoolParty::Cloud::Cloud.class_eval meth
      end
      
    end
    
  end
end

Version data entries

11 entries across 11 versions & 3 rubygems

Version Path
auser-poolparty-1.1.5 lib/poolparty/poolparty/plugin_model.rb
auser-poolparty-1.1.6 lib/poolparty/poolparty/plugin_model.rb
auser-poolparty-1.1.7 lib/poolparty/poolparty/plugin_model.rb
auser-poolparty-1.2.0 lib/poolparty/poolparty/plugin_model.rb
auser-poolparty-1.2.1 lib/poolparty/poolparty/plugin_model.rb
auser-poolparty-1.2.2 lib/poolparty/poolparty/plugin_model.rb
auser-poolparty-1.2.3 lib/poolparty/poolparty/plugin_model.rb
auser-poolparty-1.2.4 lib/poolparty/poolparty/plugin_model.rb
auser-poolparty-1.2.7 lib/poolparty/poolparty/plugin_model.rb
fairchild-poolparty-1.1.5 lib/poolparty/poolparty/plugin_model.rb
poolparty-1.2.2 lib/poolparty/poolparty/plugin_model.rb