AsakusaSatellite はプラグインを作成することにより、 機能を拡張することができます。 以下の二種類の拡張方法があります。
ジェネレータが用意されています。
$ rails g as_filter フィルタ名
とすることで vendor/plugins/as_フィルタ名_filter に以下に以下のように生成されます。
フィルタの登録は config/filter.yml で行います。 登録されたフィルタは、上から順番に適用されます。
- name: フィルタ名_filter
任意の名前で引数を与えることもできます。
- name: フィルタ名_filter
url: xxx
フィルタプログラムは AsakusaSatellite::Filter::Base を継承したクラスを作成し、 process メソッドを実装します。 (ジェネレータで生成した場合は lib/フィルタ名_filter.rb に生成されています。) フィルタ設定で与えた引数はAsakusaSatellite::Filter::Base を継承したクラスでは config 変数で保持しています。
class XxxFilter < AsakusaSatellite::Filter::Base
# メッセージを処理します
# text: メッセージの本文
# return: フィルタしたメッセージ
def process(text)
%[<a target="_blank" href="#{config.url}">#{text}</a>]
end
end
ビューフックは AsakusaSatellite のビュープログラムに あらかじめ設定されたフックポイントにプラグインからHTMLを 埋め込んで画面を拡張する仕組みです。
ビューフックを使用して画面を拡張するには AsakusaSatellite::Hook::Listener を継承したクラスを実装します。
AsakusaSatellite::Hook::Listener を継承したクラスはRailsの起動時に読み込まれ、 自動的に登録されます。
vendor/plugins/ 以下にプラグインフォルダを作成します。 ここでは vendor/plugins/test_listener とします
vendor/plugins/test_listener/lib を作成し、リスナクラスを実装します。
class TestListener < AsakusaSatellite::Hook::Listener
def message_buttons(context)
if context[:message].body
context[:message].body.size.to_s + "文字"
else
"0文字"
end
end
end
リスナクラスでAsakusaSatelliteに設置されているフックポイント名と同名の メソッドを実装します(上記の例ではmessage_buttons) 。引数(context)はビューフックから 渡されてくるオブジェクトを保持するハッシュが渡されます。
フックポイントを調べるには、view の中で call_hook を呼んでいる 箇所を検索することができます。 具体的には、以下のコマンドが利用できます。
$ git grep call_hook app/views
現在のバージョンでは、以下のフックポイントが有効です。