Ruby/JS Javascript engine for Ruby

これは、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 class

Class Method:

JS.evaluate(code)

Javascript のコードを評価した値を返します。 エラーの場合 JSError 例外を起こします。

JS.new()

Javascript インタプリタのインスタンスを作ります。

JS#eval(code)

インタプリタがコードを評価し結果の値を返します。 エラーの場合 JSError 例外を起こします。

Constants:

JS::LIB_VERSION

NJS のバージョンを返します。

JSError class

JSクラスの発生させる例外で、StandardError を継承してます。

お約束

無保証です。ライセンスは、NJS同様 GPL2 とします。js.c を御覧ください。

ChangeLog

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