前置き
前回の記事でRubyからTrello APIを使う操作が可能になりました。とはいっても、ボードを作るサンプルだけではさすがに実用性がありません。そこでいくつかの小さなレシピを作ってみることにしました。
事前調査
先行事例は意外と少ないのでドキュメントと格闘することになります。
ruby-trello(ライブラリ)のリファレンスがこちらになります。
Ruby wrapper around the Trello API
ボードやカードをrubyらしくオブジェクトとして操作できます。restの通信もうまい具合に隠蔽してくれます。大抵の要求はこいつが満たしてくれることでしょう。最悪の場合でも、クライアント(Trello.client)から生に近いAPIを発行できるので何とかなります!……とは言ってもTrello APIってば、あまりにも豊富なオプションがあるので、ある程度は仕様を理解していないとつまずいたりします。APIの公式ドキュメントは一通り目を通しておいた方が良いでしょう。
Trello developer API reference
Rubyスクリプト
ドキュメントを読め、読めと言われても、時間ばっかりかかって効率あがらないし、手っ取り早く成果が欲しいよねーーーってことでレシピ集です。
まずは自分探しから
me = Trello::Member.find('me')
puts me.name
自分がこしらえたボードをリストアップできます。詳細
me.boards.each do |b|
puts b.name
end
リストアップはフィルタをかませて絞りこむことができます。この例では、スターをつけたボードだけが出力されます。詳細
me.boards(filter: 'starred').each do |b|
puts b.name
}
ボードのID(urlのhttps://trello.com/b/ の後ろの英数字を組み合わせた文字列)がわかっている場合は、IDから直接取得できます。
b = Trello::Board.find('b0ardID')
puts b.name
ボートにぶら下がるカードを取得します。
b.cards.each do |c|
puts c.name
end
フィルターを使って公開中のカードだけ取得します。詳細ArgumentsのShowボタンを押して
b.cards(filter: 'open').each do |c|
puts c.name
puts c.closed?
end
ボードをアーカイブします。カードも同様です。
b.closed!
アーカイブしたボードを元に戻します。
b.closed=false
b.save
ボードのスターを判定します。理由はわかりませんがスターはreadonlyです。APIにもON/OFFに該当する機能がありませんので、GUIから操作するしかないようです。
b.starred?
カードをコピーします。コピー元のIDだけでなく、コピー先のリストIDも必要です。省略した時はコピー元のリストでいいと思うんですけどね。詳細
b.cards.each do |c|
new_card = Trello::Card.create(source_card_id: c.id, list_id: c.list_id)
end
もちろんリストIDを指定すれば、ほかのボードにもコピーできます。
to_list = Trello::List.find('t0ListId')
b.cards.each do |c|
new_card = Trello::Card.create(source_card_id: c.id, list_id: to_list.id)
end
おまけ
ruby-trelloのオブジェクトはRailsのActiveRecordみたいに親子関係をたどって行けます。
board.cards
card.list.board
これはTrello::BasicDataでmany,oneの関係を定義しているからで、Trello::Board,Trello::Cardなどはこれを継承しているからです。
うまいことオプションを渡せない時はTrello::Clientを使うと良いかもしれません。get,findだけでなくpostもputもあります。パスにパラメータを渡す形式なので柔軟に指定できると思います。