JRuby で Pragger を実行してみる

PlaggerRuby 版とも言える Pragger(revision:72)を JRuby(0.9.8)からとりあえず実行するには、
pragger.rb(Pragger のルートディレクトリにある)に以下のような修正を加える必要があった。

  • tout8 メソッド呼び出しを削除
  • Plugin.new(file) の記述を Plugin.new(file.to_s) に変更

一応、この対応で load_file と print プラグインが JRuby で動作する事は確認。
ただし、全てのプラグインが正常に動作するかどうかは不明。

オリジナルの pragger.rb と JRuby 対応化したものの diff による差分は以下。

12c12
<     instance_eval( @source = File.read(file).toutf8, file , 1)
---
>     instance_eval( @source = File.read(file), file , 1)
17c17
<         $plugins[ file.relative_path_from(folder).to_s.gsub("/","::")[0..-4] ]= Plugin.new(file)
---
>         $plugins[ file.relative_path_from(folder).to_s.gsub("/","::")[0..-4] ]= Plugin.new(file.to_s)
41c41
< eval_pragger(YAML.load(File.read(configFile).toutf8),[])
---
> eval_pragger(YAML.load(File.read(configFile)),[])

tout8 メソッド呼び出しを削除

tout8 メソッドの実行時に以下のようなエラーが発生したため、tout8 を使わない事で回避。

jruby-0.9.8/lib/ruby/1.8/kconv.rb:210:in `method_missing': undefined method `nkf' for NKF:Module (NoMethodError)

JRuby 0.9.8 の NKF モジュールには nkf メソッドが用意されていないため、上記のようなエラーが発生する模様。
NKF モジュールはビルトインモジュールとして jruby.jar に .ser ファイルとして含まれている。

Plugin.new(file) の記述を Plugin.new(file.to_s) に変更

Plugin.new(file) では以下のようなエラーが発生したため、to_s メソッドによる文字列化で回避。

java.lang.ClassCastException: org.jruby.RubyObject cannot be cast to org.jruby.RubyString