chokan 再実装
IRC BOT を作り直し。RICE 使うことにする。
プラグインのロード方法を変えた。新しい無名のモジュールを作ってその中で実行してクラスのインスタンスを得るようにする。そうすれば空間が汚れないし GC 的にも嬉しいっぽい。たぶん。
def load(klass_name)
filename = klass2file(klass_name)
mod = Module.new
mod.module_eval(File.open("#{dir}/#{filename}") {|f| f.read}, filename)
c = nil
begin
c = mod.const_get(klass_name)
rescue NameError
raise ClassNotFoundError.new("#{dir}/#{filename} must include #{klass_name} class")
end
# @klass (new に渡した上位クラス) を継承していなかったらエラー
if c < @klass
@plugins[klass_name] = {
:instance => c.new,
:loaded => Time.now,
}
else
raise NotInheritAbstractClassError.new("The class #{klass_name} must inherit #{@klass}")
end
klass_name
end
Abstract っていうのはなんか違う気がする。
関連エントリー
- Ruby でスコープをはずれたときに自動で何かをする Guard オブジェクト Perl だと Guard オブジェクトとかいうハックがあって、スコープを出るタイミングで必ず呼ばれるファイナライ...
- chokan & FOAF 実験的に Rena を使ってみたかったので、よろしそうなプログラムを考える。 IRC BOT に何か FOAF アレこれできるような機能をつ...
- Ruby で sysfs 経由での GPIO 操作 GPIO の操作はいろいろやる方法があるみたいだけど、LL からだと sysfs への IO を行うのが一番簡単っぽい。以下のような感じでか...
- nginx の rewrite ルールっぽく h2o の mruby でリクエストの rewrite を行う このサイトのHTTPS化にあたって nginx で書いていた rewrite のルールを h2o の mruby で処理するように変える必要...
- ruby-xslt 0.8.2 新しくなっているのに気付いた。 ruby extconf.rb --enable-error-handler (off by default...