Modelとは

mikutterでTwitter上のオブジェクト以外のものを扱うには、Modelを新しく定義し、それを利用します。Modelはmikutter上で値を扱うことに特化しており、Modelを使ってデータを表現することで、例えばそれをタイムライン上でツイートのように表示することができるようになります。

MessageやUserといった、mikutterでよく扱うオブジェクトも、全てModelの一部です。mikutter 3.5では、プラグインがこのModelを独自に定義することで、Twitter以外のオブジェクトを扱うことができるようになります。

最小のModel

class BlankModel < Retriever::Model
end

Modelは、Retriever::Modelを継承したクラスのことで、新たなModelを追加するには、これを継承したクラスを新たに作れば良いのです。

値の読み書き

この状態では、[][]=を使って、Hash のように値を読み書きすることができます。

bm = BlankModel.new
bm[:foo] = 1
bm[:foo] # => 1

ただし、キーはSymbolにしましょう。

URI

すべてのModelのインスタンスには、URIが割り振られています。違うデータを示すなら、必ずこれは違う値になります。

bm = BlankModel.new
bm.uri # => blankmodel://blankmodel/550e8400-e29b-41d4-a716-446655440000

デフォルトでは、上のように、インスタンスごとにランダムな値が生成されます。

インスタンスが異なっても、本質的に同じデータを指すものであれば、同じURIを返すようにしましょう。例えばツイートのURIは、以下の様に、ツイートのパーマリンクになっています。

https://twitter.com/toshi_a/status/781963811016155136

mikutterは、これによってModelの同一性を判定します。あなたが定義するModelも、一意なURIを返すようにuriをオーバライドしましょう。

なお、Retriever::Model#uriの戻り値は、URI::Genericか、そのサブクラスです。

perma_linkとURI

Modelがperma_linkメソッド(またはフィールド)を持っている場合、その戻り値がURIとして使われます。

httpまたはhttpsスキームを持っていて、Web上のリソースを指すのがperma_linkです。一方uriは、それ以外のURI一般を含みます。perma_linkuriとして使うことができるので、perma_linkを定義して、それが一意なURLを返すなら、uriメソッドを定義する必要がありません。