tdiary/tdiary-core — pull request #236 by machu (2013-01-14 22:00:35+00:00)
Title: Enhanced plugin

リンク元をAjaxで表示 (#37) をひとまず実装しました。

まだインタフェースが完全に固まっていないので、今回のリリースではドキュメント化せずに、安定するまで待ちたいのですがどうでしょう。

## 目的

プラグインが独自でコンテンツを返せるようにする。

* ファイルを生成できないPaaS環境でmakerssプラグインが動作できる
* category, searchプラグインが本体を改造しなくても実装可能に

## 仕様

* `index.rb?plugin=[plugin_name]&date=[date]` でプラグイン呼び出し
* プラグイン側が `add_content_proc(plugin_name)` で登録したコールバックを呼び出す
* プラグインはコンテンツを返す責務を追う

## 本体の変更点

* TDiaryPluginView (TDiaryBaseを継承して作成)
* dateクエリから日付を判定し、@diaries, @dateを設定
* pluginクエリから呼び出し対象のプラグインを特定する
* eval_htmlでプラグインのcontent_procを呼び出す
* Dispatcher::IndexMain
* TDiaryPluginView呼び出しのルーティング追加
* Plugin
* `add_content_proc` を追加

## 本体のToDo

* specを書く
* TDiaryBaseサブクラス全般…
* rhtmlテンプレート対応 (categoryプラグイン巻取り)
* Railsのrenderメソッドのようなインタフェースが必要？
* GETメソッド以外への対応
* レスポンスヘッダのカスタマイズ（必要？）
* 現在はIndexMain側で実装されているので手が出せない
* PC以外のユーザーエージェントを考慮
* URLルーティングのカスタマイズ
* `/makerss.xml`, `/referer.json` みたいにしたい？
* TDiaryBaseクラスのコントローラとIOを分離したい
* 日記データだけをコンパクトに取り扱えるオブジェクトが欲しい

## リンク元のAjax表示 (lazy_referer.rb)

いきなり05referer.rbに手を入れるのは影響が大きいのでひとまず別プラグインにしました。
安定したら本体にマージしても良いと思います。

* `@mode == day` で本日のリンク元の代わりに取得ボタンを表示
* 取得ボタンを押すと、Ajaxでリンク元を取得して表示
* 最新日記のみ、volatileも表示

リファラの処理はよく分かっていないところもあります。

* `referer_of_today_short` と `referer_of_today_long` の違い
* 月表示、最新表示でのリンク元表示の有無

### ToDo

* テストを書く
* Rubyはrspecで、JavaScriptはJasmineで
* リファラの遅延ロード
* 現在はTDiaryDayでの日記データ取得時にリファラも取得している
* 表示のみAjaxで遅延している
* 必要になるまでリファラを取得しない仕組みが必要か？