DBIx::Skinny::InflateColumn::DateTime のテストデータ投入時のエラー回避

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

1件のコメント

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください