Initial Import
[dbsrgits/DBIx-Class-DateTime-Epoch.git] / lib / DBIx / Class / DateTime / Epoch.pm
1 package DBIx::Class::DateTime::Epoch;\r
2 \r
3 use strict;\r
4 use warnings;\r
5 \r
6 use base qw( DBIx::Class );\r
7 \r
8 use DateTime;\r
9 \r
10 __PACKAGE__->mk_classdata( ctime_columns => [ ] );\r
11 __PACKAGE__->mk_classdata( mtime_columns => [ ] );\r
12 \r
13 sub 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
30 sub 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
42 sub 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
53 1;