現行のpraggerでは,-pオプションを利用して,pluginを配置するディレクトリを変更できます.
このオプションの意味を「pluginを配置するディレクトリの追加」に変更するのはどうでしょう?
privateなプラグインが利用しやすくなる予定.あと#8ともちょと関係があるかもしれません.
この件についてコメントを募集します.
pragger.rbに対するパッチを添付しますが,このパッチは他にもいろいろ変更を含んでいるので,良くないパッチだと思います.すみません.
一応,このパッチでの変更点をリストします.
- $plugins変数にプラグインを全て登録
- Pathnameを利用して,File.readlinkを除去
- Plugin#sourceメソッドで,プラグインのソースコードを取得
- -uオプションを,-uオプションと-lオプションに分離
- eval_praggerのreturnを排除
- プラグインの説明とするコメントの書式の変更
いろいろと微妙なやつがあるので,IKeJIと直接相談したかったんですが,つかまらないのでTracに登録します.ちなみに全体の行数はたぶんちょっと短くなるはず(39行).
Index: pragger.rb
===================================================================
--- pragger.rb (revision 41)
+++ pragger.rb (working copy)
@@ -3,44 +3,37 @@
require 'yaml'
require 'optparse'
require 'kconv'
+require 'pathname'
+$plugins = {}
class Plugin
+ attr_reader :source
def initialize(file)
- instance_eval( File.read(file).toutf8 , file , 1)
+ @source = File.read(file).toutf8
+ instance_eval( @source, file , 1)
end
- def self.load_plugins(folder = "plugin")
- Dir.glob(File.join(folder, "**/*.rb")).sort.inject({}) do |plugins,file|
- plugins.update( Hash[ file[folder.size+1..-1].to_s.gsub("/","::")[0..-4] , Plugin.new(file) ])
+ def self.load_plugins(folder = (Pathname.new(__FILE__).realpath.parent + "plugin").to_s)
+ Dir.glob(File.join(folder, "**/*.rb")).sort.each do |file|
+ $plugins.update( Hash[ file[folder.size+1..-1].to_s.gsub("/","::")[0..-4] , Plugin.new(file) ])
end
end
end
def eval_pragger(command_array,data)
- command_array.inject({}) do|data,command|
+ command_array.inject({}) do |data,command|
puts "exec plugin #{command["module"]}"
- $plugin[command["module"]].send(command["module"].sub(/.*::/,""), command["config"], data.clone)
+ $plugins[command["module"]].send(command["module"].sub(/.*::/,""), command["config"], data.clone)
end
- return data
end
-baseDir = begin File.readlink(__FILE__)
- rescue Exception
- (__FILE__) end
-pluginDir = File.join(File.dirname(baseDir), "plugin")
+Plugin.load_plugins()
configFile = "config.yaml"
-OptionParser.new do|opt|
- opt.on("-c", "--configfile CONFIGFILE"){|v| configFile = v }
- opt.on("-p", "--plugindir PLUGINDIR"){|v| pluginDir= v }
- opt.on("-u", "--pluginusage [PLUGINNAME]"){|v|
- if(v==nil)
- Plugin.load_plugin(pluginDir).each{|k,v| puts k }
- else
- File.read(File.join(pluginDir,v.gsub("::","/")+".rb")).sub(/#(.*)/){ puts $1 }
- end
- exit
- }
+OptionParser.new do |opt|
+ opt.on("-c", "--configfile CONFIGFILE") {|v| configFile = v }
+ opt.on("-p", "--plugindir PLUGINDIR") {|v| Plugin.load_plugins v }
+ opt.on("-u", "--pluginusage PLUGINNAME") {|v| $plugins[v].source.gsub(/^##(.*)/){ puts $1 }; exit }
+ opt.on("-l", "--listplugin") { $plugins.keys.sort.each{|k| puts k }; exit }
opt.parse!(ARGV)
end
-$plugin = Plugin.load_plugins(pluginDir)
eval_pragger(YAML.load(File.read(configFile).toutf8),[])