カスタム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
メソッドを定義する必要がありません。