抽出タブのデータソースを、サードパーティプラグインが提供する方法です。

Fixed tab vs Datasource

Fixed tab Datasource

インストールするだけでタブが表示される

設定が必要

他のデータソースとミキシングできる

×

ユーザがフィルタ条件を設定できる

他のプラグインがフィルタ条件を追加できる

×

ユーザがタブを削除・非表示にできる

ユーザが(同じ内容の)タブを作成できる

タイムラインの新着通知

プラグインがタブを提供してしまうと、タブに関する制御にまで責任を持たなくてはいけません。 一方で、Datasourceを提供する方法であれば、タブの制御は全てextractプラグインが担当してくれます。 また、extractプラグインは、データソースだけではなく、抽出条件もサポートしているので、ユーザがタブに対して気軽にフィルタリングを行うことができるようになります。

上記の『△』と書かれた項目を全て自分で実装するのは大変です。それどころか、Datasourceを提供する方法を使えば、同じようにDatasourceを提供する他のプラグインと連携することができます。

したがって、抽出タブで実現できることなら、できるだけ抽出タブを利用しましょう。ユーザにとっても、そのほうが便利なはずです。

実装の方法

データソースの追加

extract_datasources フィルタ

Plugin.create :extract_example_1 do
  filter_extract_datasources do |datasources|
    [{my_datasource: "新しいデータソース"}.merge(datasources)]
  end
end

データソースを追加するためのメソッドは用意されていません。代わりに、 extract_datasources フィルタを利用します。

このフィルタは、次のようなHashを含みます。

{データソースslug: データソースの表示名}

データソースslug は、データソースを関係のあらゆるところで利用される、他のデータソースと重複しない Symbol 。

データソースの表示名 は、抽出タブの設定画面の「データソース」タブに表示されるテキストです。

名前もデータソースslugも、このフィルタが呼ばれた時に決定して、フィルタの結果に含めるようにしてください。名前はユーザに表示するだけですが、データソースslugは次でも使います。

データソースにModelを配信する

前の節で、設定画面にデータソースが表示され、正しく設定できるようになりました。

最後に、そのデータソースにツイートを入れることができたら完成です。次のようなコードで、データソースに対してツイートを配信できます。

Plugin.call :extract_receive_message, :my_datasource, messages

extract_receive_message イベントを発生させます。このイベントは二つの引数を取ります。

第一引数はデータソースslugで、第二引数は、第一引数のデータソースに配信するMessageの配列です。これはMessageが一つだったとしても、必ず配列で渡すようにしてください。

データソースに配信すべきツイートが見つかった段階で上記のようなコードでイベントを発生させると、即座にそのデータソースを使っている抽出タブにツイートが表示されます。また、同じツイートはタイムラインには一つしか表示されないので、何度同じツイートを配信しても問題ありません。

参考

  • Message