Sha256: 54ebfa9991390820e5c3d3bebea31639899967952b25603a83cd684ee8f6e0dc

Contents?: true

Size: 1.47 KB

Versions: 11

Compression:

Stored size: 1.47 KB

Contents

require 'rubygems'
require 'set'

module JIJI
  module Plugin
    
    @@registry = {}
    
    #プラグインを登録する。
    #future:: 機能の識別子
    #instance:: 機能を提供するプラグインインスタンス
    def self.register( future, instance )
      if @@registry.key? future 
        @@registry[future] << instance
      else
        @@registry[future] = [instance]
      end
    end
    
    #プラグインを取得する。
    #future:: 機能の識別子
    #return:: 機能を提供するプラグインの配列
    def self.get( future )
      @@registry.key?(future) ? @@registry[future] : []
    end
    
    # プラグインローダー
    class Loader 
      def initialize
        @loaded = Set.new
      end
      # プラグインをロードする。
      def load
        ($: + Gem.latest_load_paths).each {|dir|
          plugin = File.expand_path "#{dir}/jiji_plugin.rb"
          next unless File.exist? plugin
          next if @loaded.include?( plugin )
          begin 
            Kernel.load plugin
            server_logger.info( "plugin loaded. plugin_path=#{plugin}" ) if server_logger
            @loaded << plugin
          rescue Exception
            server_logger.error( "plugin load failed. plugin_path=#{plugin}" )  if server_logger
            server_logger.error($!)  if server_logger
          end
        }
      end
      attr :server_logger, true
    end
    
  end
end

Version data entries

11 entries across 11 versions & 2 rubygems

Version Path
unageanu-jiji-1.1.0 lib/jiji/plugin/plugin_loader.rb
unageanu-jiji-1.1.1 lib/jiji/plugin/plugin_loader.rb
unageanu-jiji-1.1.2 lib/jiji/plugin/plugin_loader.rb
unageanu-jiji-1.1.3 lib/jiji/plugin/plugin_loader.rb
unageanu-jiji-1.1.4 lib/jiji/plugin/plugin_loader.rb
unageanu-jiji-1.2.1 lib/jiji/plugin/plugin_loader.rb
unageanu-jiji-1.2.3 lib/jiji/plugin/plugin_loader.rb
unageanu-jiji-1.2.4 lib/jiji/plugin/plugin_loader.rb
jiji-1.2.7 lib/jiji/plugin/plugin_loader.rb
jiji-1.2.6 lib/jiji/plugin/plugin_loader.rb
jiji-1.2.5 lib/jiji/plugin/plugin_loader.rb