これは、NJS Javascript Interpreter <URL:http://www.bbassett.net/njs/> を Ruby から利用するための拡張モジュールです。
現在の Version(0.0.4)では、以下のようなことが出来ます。
% ruby -rjs -e 'p JS::evaluate(%!true!)'
true
% ruby -rjs -e 'p JS::evaluate(%!Math.PI!)'
3.141592654
% ruby -rjs -e 'p JS::evaluate(%q!new Date().toString()!)'
"Mon Feb 24 12:39:15 2003"
% ruby -r./js -e \
'js = JS.new;p js.eval("a = new Array(5); a.length;"); \
p js.eval("a.toString()")'
5
"undefined,undefined,undefined,undefined,undefined"
% ruby -r./js -e \
'js = JS.new;p js.eval(%q!a = new Array("a","b","cc",new Array(1,2,3.1414));!)'
["a", "b", "cc", [1, 2, 3.1414]]
js.h には、たくさん API がありますが基本的には eval() を利用することで ほぼ全ての機能が Rubyから使えるようです。
ただし、過度な期待は禁物です:-) 当然ですが NJS が提供する機能以上のことは 出来ません。 例えば window オブジェクトなどは存在しないので、alert()などはできませんし、 document.write() もムリです。利用する側がクラス宣言などをしてやる必要が あります。
実装には、
を参考にさせてもらいました。
まずは、NJS をインストールしてください。 ./configure && make してから sudo make install するだけです。0.2.5 のみを Linux(Kondara-2.1/Plamo-3.0) のみで動作確認していますが、 他の OS でも動くでしょう。
拡張モジュール自体のインストールは
% ruby extconf.rb % make % sudo make install
だけです。
JS.evaluate(code)Javascript のコードを評価した値を返します。 エラーの場合 JSError 例外を起こします。
JS.new()Javascript インタプリタのインスタンスを作ります。
JS#eval(code)インタプリタがコードを評価し結果の値を返します。 エラーの場合 JSError 例外を起こします。
JS::LIB_VERSIONNJS のバージョンを返します。
JSクラスの発生させる例外で、StandardError を継承してます。
無保証です。ライセンスは、NJS同様 GPL2 とします。js.c を御覧ください。
Sat Mar 11 00:00:00 2003
Sat Feb 29 00:00:00 2003
Wed Feb 26 18:00:00 2003
Mon Feb 24 18:00:00 2003
Sun Feb 23 18:00:00 2003
たむらけんいち tamura@ruby-lang.org