DBIx::Skinny::InflateColumn::DateTime のテストデータ投入時のエラー回避
2012/10/29
DBIx::Skinny::InflateColumn::DateTime を便利に使わせてもらっています。 これを使うと、DBから値取得時に _at とかのカラム名の値をDateTimeに変換してモデルオブジェクトに格納してくれて、 DBに書き込む前に文字列に変換してくれます。
通常の利用ではこれで問題ないのですが、テスト時 Test::Fixture::DBIxSkinny を使ってにテストデータをモデルオブジェクトに格納する際に yamlの日付文字列がそのまま文字列になるため、テストデータ投入時に、文字列をDateTimeとみなして日付文字列に変換しようとしてエラーが 発生していました。
% diff -u DBIx/Skinny/InflateColumn/DateTime/Auto.pm.org DBIx/Skinny/InflateColumn/DateTime/Auto.pm --- DBIx/Skinny/InflateColumn/DateTime/Auto.pm.org 2012-10-30 12:50:55.801996269 +0900 +++ DBIx/Skinny/InflateColumn/DateTime/Auto.pm 2012-10-26 16:20:12.831917124 +0900 @@ -29,6 +29,7 @@ }; $schema->inflate_rules->{ $rule }->{ deflate } = sub { my $value = shift; + return $value unless ref $value eq 'DateTime'; return DateTime::Format::MySQL->format_datetime($value); }; } |
deflate時も、値の型を判定して、文字列だったらそのまま返すようにしたところ、問題なくなりました。 Skinnyのカスタマイズ周りの知識があまりないので、この回避方法が適切なのか不安です。
大壳り出し品質保証