Opal

Opal処理系のバグの調査方法

More than 3 years have passed since last update.

Opalのバグっぽいものを見つけたので、調査方法など書いておきます。

発端

  1. opal-jqueryではElement.find(...)とかで要素を検索する
  2. しかしfindメソッドが無いと言われる
  3. 上でFoo::Elementというクラスを定義しているのが怪しいか…?

結論

試行錯誤してみたところ、

class A
  class B < `Object`; end
end
p B

のようにインナークラスがJSクラスを継承している場合に、クラス定義がトップレベルに漏れてしまうようでした。

Opalはまだこんな感じで処理系自体にバグがあったりするので、取り扱いには注意が必要です(´・ω・`)
以下ではバグっぽいものを見つけたときにやることについてメモしておきます。

opalrb.org/tryで試す

http://opalrb.org/try/ にWeb版のirbっぽいものがあるので、ここにコードを書いて挙動を試すことができます。

注意点ですが、Runボタンを押しても 環境はリセットされない ので、トップレベルで定義したクラスとかは残ってしまいます。リセットするにはブラウザをリロードする必要があります。

またRunの隣のLinkというボタンを押すと、そのコードのpermalinkを得ることができます。バグ報告の際にはこのURLを貼ると親切かもしれません。

opal gemで試す

gem install opalでopal gemを入れておくと、試したいコードをfoo.rbに保存して

$ opal foo.rb

で実行することができます。(※たぶんJS実行環境が必要)

$ opal -c foo.rb だと実行する代わりにJSが出力されます。

git masterで試す

念のためmasterでも試したいというときは、opal/opalをcloneして

$ ruby -Ilib bin/opal foo.rb

で実行することができます(-Ilibを付けないとgemで入れたopalを読み込もうとするので注意)。