Initial Import
[dbsrgits/DBIx-Class-DateTime-Epoch.git] / lib / DBIx / Class / DateTime / Epoch.pm
CommitLineData
77f8d0c0 1package DBIx::Class::DateTime::Epoch;\r
2\r
3use strict;\r
4use warnings;\r
5\r
6use base qw( DBIx::Class );\r
7\r
8use DateTime;\r
9\r
10__PACKAGE__->mk_classdata( ctime_columns => [ ] );\r
11__PACKAGE__->mk_classdata( mtime_columns => [ ] );\r
12\r
13sub register_column {\r
14 my( $class, $col, $info ) = @_;\r
15 $class->next::method( $col, $info );\r
16 \r
17 if( my $type = $info->{ datetime } ) {\r
18 $class->ctime_columns( [ @{ $class->ctime_columns }, $col ] ) if $type eq 'ctime';\r
19 $class->mtime_columns( [ @{ $class->mtime_columns }, $col ] ) if $type eq 'mtime';\r
20 \r
21 $class->inflate_column(\r
22 $col => {\r
23 inflate => sub { DateTime->from_epoch( epoch => shift ) },\r
24 deflate => sub { shift->epoch }\r
25 }\r
26 );\r
27 }\r
28}\r
29\r
30sub insert {\r
31 my $self = shift;\r
32 my $time = time;\r
33 \r
34 for my $column ( @{ $self->ctime_columns }, @{ $self->mtime_columns } ) {\r
35 next if defined $self->get_column( $column );\r
36 $self->store_column( $column => $time );\r
37 }\r
38\r
39 $self->next::method( @_ );\r
40}\r
41\r
42sub update {\r
43 my $self = shift;\r
44 my $time = time;\r
45 \r
46 for my $column ( @{ $self->mtime_columns } ) {\r
47 $self->set_column( $column => $time );\r
48 }\r
49 \r
50 $self->next::method( @_ );\r
51}\r
52\r
531;