カスタムModel
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_linkはuriとして使うことができるので、perma_linkを定義して、それが一意なURLを返すなら、uriメソッドを定義する必要がありません。