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のカスタマイズ周りの知識があまりないので、この回避方法が適切なのか不安です。
大壳り出し品質保証