insert_or_update
が update_or_insert
になった。
この関数、find_or_create
と一緒に使うことが多くて、その関係か update_or_insert
ってよく間違えてエラーってたからうれしい。
*insert_or_update = \&update_or_insert;
とかしてあって、一応まえのも使える。
$c->forward( $c->view('YAML') );
したとき日本語が数値参照になるなぁ、とかおもったら DBIC::UTF8Columns で get_columns オーバーライドしてなかった。
するようにした。
DBIC::UTF8Columns
昨日のやつ、bast のほうにコミット。次のDBICのリリースに含まれちゃうよ><
使い方はテーブルクラスで
__PACKAGE__->load_components(qw/UTF8Columns Core/);
とかしてロードしておき、
__PACKAGE__->utf8_columns(qw/name description/);
と文字列カラムを指定。
こうすると $table->name
や $table->get_column('name')
でとってくる値は utf-8 フラグが自動的にたつ。
逆に $table->name( $name );
とかでは utf-8 フラグが落とされてから保存される。
utf8_columns で自分で指定するだけじゃなく、テーブル単位で文字列カラムにすべてに対して有効になる機能もあるといいかも?
DBIC::UTF8Columns
書いた。
Template::Stash::ForceUTF8 インスパイア。
MySQL の DATETIME 型
って、タイムゾーン情報ないから、deflate するとき set_time_zone してタイムゾーンそろえたほうがいいと思った。
あと、inflate 時も floating timezone で帰ってくるから、保存時のタイムゾーンをセットしてあげたほうが良い。
inflate => sub {
DateTime::Format::MySQL->parse_datetime(shift)
->set_time_zone('local');
},
deflate => sub {
DateTime::Format::MySQL->format_datetime(
shift->set_time_zone('local') );
},
と思うんだけどどーなんだろ。
決めうちでしかつかわないならいいんかな。
refactored
sub fuzzyfind { my ( $self, $id ) = @_;
$id and $id =~ /\D/
? ( $self->find( { uuid => $id } ), 1 )
: $self->find($id);
}
こうか。
fuzzyfind
sub fuzzyfind { my ( $self, $id ) = @_;
my ( $exist, $uuid );
$exist = $self->find( { uuid => $id } ) and $uuid++
if $id and $id =~ /\w/;
defined $exist ? ( $exist, $uuid ) : $self->find($id);
}
namingsence by 2ndlife.
* 16:46 コード修正
下記 CLON::Model::DBIC だと use CLON;
な使い方でも warning はでないんだ。唯一の利点かm
clon_server.pl で warning がでるのは require してるせい。どうしようもねーな。
ためしに CLON の CLON::Model::DBIC
を Schema::Loader
ベースにしてみた。
sub table {
my ( $self, $table ) = @_;
__PACKAGE__->resultset( $self->loader->monikers->{$table} );
}
こんなコードを入れておくことにより、Catalyst::Model::DBIC
互換な $c->model('DBIC')->table('table_name')
がそのまま利用でき、CLON はこの書き方をしていたのでこのファイルを書き換えるだけで他は何も変更しなくて良かった。
といってもこれじゃ別に Schema の恩恵にまったくあずかれないし、相変わらず Class::C3 はうるさいし、あんまりいいことない。
cpanrecent_crawler を Schema::Loader にスイッチ
今朝かいた Catalyst の Model を Schema::Loader でロードってやつを、CPAN Recent Changes のクローラでやってみた。
今までは use MyApp;
方式でロードしていて、それからの変更は以下のような感じ。
こんな感じで割りとすぐ移行可能。Class::C3
の warning が消えたのがかなりうれしいなぁ。