操作
バグ #1188
未完了method_missingが反応できるメソッド名にはrespond_to_missing?が真を返すようにする
プラグイン名:
ブランチ:
クラッシュする:
いいえ
説明
Plugin::Twitter::World がTwitter APIのオブジェクトにメソッドを移譲しているが、respond_to_missing?を実装していないため移譲先として使われず、正しく呼ばれていない。
method_missingでソースコードをgrepした結果まあまあな数があった。
ファイル
再現手順
- https://github.com/toshia/portal をインストールする
- PrimaryまたはSecondaryにTwitter Worldを含めたPortalを作る
- そのPortalをカレントワールドにした状態でTwitterユーザのプロフィールタブを開く
- UIのほとんどの内容が表示されない
cob odo さんが6年以上前に更新
一通り眺めてパッチを書いてみました。
core/lib/lazy.rb に含まれる、 MethodCallDelayer クラスの method_missing に対応する respond_to_missing? の追加だけはよくわかりませんでした。
method_missingで実際にメンバーメソッドの呼び出しが発生するまで処理を遅延するものだと思うのですが、指定されたメソッド呼び出しが可能かどうかはcallstackをcallしてみないとわかりません。
callするのであればmethod_missingよりも前に実際の呼び出しが行われることになりますし、しかも(副作用のあるメソッドのことを考えると)全体で1回だけ呼び出されるように調整する必要がありそうで、なかなか厳しそうだなという印象を受けました。
操作