cpanモジュール DBIx::ActiveRecordを作りました。

perlのO/Rマッパーっていうと、DBIx::Classとか、DBIx::Skinnyとかあるけど、
DBIx::Classはデカすぎて使うには躊躇しちゃうし、
DBIx::Skinnyは小さいけど、(個人的には)そんなに使えない。


rails3のActiveRecord的なやつであんまり依存関係がないやつがいいんだよ。


ということで、それを作った。
DBIx::ActiveRecord - rails3 ActiveRecord like O/R Mapper - metacpan.org

レポジトリは
GitHub - toshi-saito/perl-dbix-activerecord: Rails3 ActiveRecord like O/R Mapper library for perl

依存はDBIのみ。
本家と同じく、scopeベースになってる。
必要最低限の機能のみ実装してある。
複合キーも(たぶん)使える!
mysqlでしかテストしてない。(ほかでも多分動く!)


モデルの定義はこんな感じ。

package MyApp::Model::User;
use base 'DBIx::ActiveRecord::Model';
__PACKAGE__->table('users'); # テーブル名
__PACKAGE__->columns(qw/id name created_at updated_at/); # カラム一覧
__PACKAGE__->primary_keys(qw/id/); # プライマリキー。(複合キーOK!)

# scope
__PACKAGE__->default_scope(sub{ shift->eq(deleted => 0) });
__PACKAGE__->scope(adult => sub{ shift->le(age => 20) });
__PACKAGE__->scope(latest => sub{ shift->desc('created_at') });

# association
__PACKAGE__->belongs_to(group => 'MyApp::Model::Group');
__PACKAGE__->has_many(posts => 'MyApp::Model::Post');

rails3やった事ある人なら、これで分かってくれるんじゃないかと。
カラム一覧とプライマリキーはユーザに定義させなくても良かったんだけども、
モデル作るときとかにいちいちどんなカラムあったっけ?ってなってmysqlで確認するはめになるので、
定義しておいた方がいいって結論。
しっかり、スコープ使えるし、アソシエーションも使える。
includes(アソシエーションの事前読み込み)とjoinsも使えるので、機能としては十分かなと。

よかったら使ってみてね!
できたらフィードバックも欲しいっす!!