Commit | Line | Data |
77f8d0c0 |
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; |