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も使えるので、機能としては十分かなと。
よかったら使ってみてね!
できたらフィードバックも欲しいっす!!