プロジェクト

全般

プロフィール

バグ #1188

method_missingが反応できるメソッド名にはrespond_to_missing?が真を返すようにする

toshi_a 初音5ヶ月前に追加. 3ヶ月前に更新.

ステータス:
新規
優先度:
通常
担当者:
対象バージョン:
プラグイン名:
ブランチ:
クラッシュする:
いいえ

説明

Plugin::Twitter::World がTwitter APIのオブジェクトにメソッドを移譲しているが、respond_to_missing?を実装していないため移譲先として使われず、正しく呼ばれていない。

method_missingでソースコードをgrepした結果まあまあな数があった。


再現手順

  1. https://github.com/toshia/portal をインストールする
  2. PrimaryまたはSecondaryにTwitter Worldを含めたPortalを作る
  3. そのPortalをカレントワールドにした状態でTwitterユーザのプロフィールタブを開く
  4. UIのほとんどの内容が表示されない

履歴

#1 cob odo3ヶ月前に更新

一通り眺めてパッチを書いてみました。

core/lib/lazy.rb に含まれる、 MethodCallDelayer クラスの method_missing に対応する respond_to_missing? の追加だけはよくわかりませんでした。

method_missingで実際にメンバーメソッドの呼び出しが発生するまで処理を遅延するものだと思うのですが、指定されたメソッド呼び出しが可能かどうかはcallstackをcallしてみないとわかりません。
callするのであればmethod_missingよりも前に実際の呼び出しが行われることになりますし、しかも(副作用のあるメソッドのことを考えると)全体で1回だけ呼び出されるように調整する必要がありそうで、なかなか厳しそうだなという印象を受けました。

他の形式にエクスポート: Atom PDF