いろいろな処理をするファイルをプラグインとして適当なディレクトリに入れておくと、それらをロードしてオブジェクト化するやりかた。
バッチ処理とかでカスタムな方法をインプリしたいときとかに使えるかと思う。
plugin_loader.rb
class PluginLoader
attr_reader :plugins
def initialize(plugin_base, extension = 'rb')
@plugin_base = plugin_base
@plugins = []
Dir.glob(@plugin_base + "*.#{extension}").each do |p|
require p
@plugins << Object.const_get(to_classname(p)).new
end
end
private
def to_classname(str)
str.sub(/^#{@plugin_base}/){""}.sub(/\.rb$/){""}.gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
end
end
使い方はこんな感じ(あらかじめpluginsディレクトリにxxxx.rbファイルを作っておく)
test.rb
require './plugin_loader'
pl = PluginLoader.new(File.dirname(__FILE__) + "/plugins/")
pl.plugins.each do | p |
p.run
end
ツイート