2011年10月13日

mtgNotesの開発

Rails3.1を使ってアプリケーションを開発しています。
mtgNotesって暫定的な名前をつけていますが、もう少し名前は考えたいところです。

このツール、自分の周りの人とコラボでいろんなことをやる人に使ってもらいたいなと思って作成しています。
というより、僕自身がそういう感じなので、その記録をとるツールがほしいと思って製作しています。
ただ、コラボっていいながら、このツール自体は個人で使うものになっています。
僕が、どういうグループと何をしたのかを記録していくものです。

プロジェクトに着目するツールというのはけっこうありますが、参加者は常に固定していたりします。
プロジェクトに起こった出来事(活動記録)ごとに、欠席している人もいるはずです。
その、「あのときにはいたけど、このときにはいなかった」ということは、記録できた方がいいはず。
特定の人がいなかったときに決まったことって、後で問題になること、けっこうあります。

そして、(まだ実装してないけど)人側から検索することも可能です。
そうすると、所属プロジェクトに関わりなく、この人と何をしたのかを見ることができます。
もちろんその人の個人情報なんかも収録しておけばよいでしょう。

ある程度データがたまれば、「Aさんに関する活動記録」というレポートと「mというプロジェクトの活動記録」というレポートを作成することができます。
どちらもさまざまな活動をしていると、後で見返すと便利なものになるはずです。

技術的には大したことないプログラムではあるけれど、僕自身のニーズはぴったり満たしている感じで、気に入って開発しています。
開発を手伝ってくださる方も募集しています。
興味がある方は連絡ください。

そうそう、テストプログラムのサイトはこちらです。
http://mtgnote.ecofirm.com/

2011年10月11日

counter_cache (Rails3.1)のspec

Railsのアソシエーションの数を自動的に数えてくれるというしくみ=counter_cacheで、なんだか悩みました。
今でもよく分からない状態。

どうやってテストすればいいんだろう。。。

プロジェクトを適当に二つ作って、最初の方にメンバーを追加する、と。
そうすると、p.members_countが一つ減っていないといけないと思うんだけど、p.members_countはもともとゼロなんだそうです。


it "increment counter_cache when project has changed" do
p = Factory(:project)
p2 = Factory(:project)
m = p.members.create(:name => 'abc')
lambda do
put :update, :id => m, :project_id => p2
end.should change(@, :issues_count).by(-1)
end


ちなみに、counter_cacheのアップデート部分はこんな感じが今のところちゃんと動きます。
update_countersは使えなくなったのか、なんだか挙動不審。
increment/decrement_counterが中でupdate_countersを呼んでいるので、この方が正しい使い方のようです。
belongs_to :project, :counter_cache => true
before_save :update_counters

private
def update_counters
new_project = Project.find self.project_id
Project.increment_counter(:issues_count, new_project)
if self.project_id_was.present?
old_project = Project.find self.project_id_was
Project.decrement_counter(:issues_count, old_project)
end
end