Project

General

Profile

バグ #1188

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

Added by toshi_a 初音 over 1 year ago. Updated over 1 year ago.

Status:
新規
Priority:
通常
Target version:
プラグイン名:
ブランチ:
クラッシュする:
No

Description

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

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


Files


再現手順

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

History

#1

Updated by cob odo over 1 year ago

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

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

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

Also available in: Atom PDF