therubyracerは、V8 JavaScriptエンジンをRubyから使うためのGemです。ちょっと試してみたので、忘れないうちにメモしておきます。
オブジェクトを作って、そのメソッドを呼び出すという単純な例を、RubyとJavaScriptで実行する部分を変えて3種類作ってみました。
準備
JavaScriptでクラス(?)を定義する。
require 'therubyracer'
v8 = V8::Context.new
v8.eval <<EOF
function Friend(name) {
this.name = name;
this.hello = function() { return "Hello, " + this.name };
}
EOF
その1: 全部JavaScriptでやる
JavaScriptでオブジェクトを作り、メソッドを呼び出す。
script = <<EOS
var suzuki = new Friend("Suzuki");
suzuki.hello();
EOS
puts v8.eval(script) # => Hello, Suzuki
その2: オブジェクトをJavaScriptを作る
JavaScriptでオブジェクトを作り、Rubyでメソッドを呼ぶ。
tanaka = v8.eval "new Friend('Tanaka')"
puts tanaka.hello # => Hello, Tanaka
その3: 全部Rubyでやる
JavaScriptからコンストラクタを取り出す。
Rubyでオブジェクトを作り、メソッドを呼び出す。
Friend = v8.eval "Friend"
kimura = Friend.new("Kimura")
puts kimura.hello # => Hello, Kimura