DBIx-Class-Service
view release on metacpan or search on metacpan
inc/DBIx/Class/TimeStamp.pm view on Meta::CPAN
use DateTime;
our $VERSION = '0.05';
__PACKAGE__->load_components( qw/InflateColumn::DateTime/ );
__PACKAGE__->mk_classdata(
'__column_timestamp_triggers' => {
on_update => [], on_create => []
}
);
#line 47
sub add_columns {
my $self = shift;
# Add everything else, get everything setup, and then process
$self->next::method(@_);
my @update_columns = ();
my @create_columns = ();
foreach my $column ( $self->columns ) {
my $info = $self->column_info($column);
if ( $info->{data_type} =~ /^(datetime|date|timestamp)$/i ) {
if ( $info->{set_on_update} ) {
push @update_columns, $column;
}
if ( $info->{set_on_create} ) {
push @create_columns, $column;
}
}
}
if ( @update_columns or @create_columns ) {
my $triggers = {
on_update => [ @update_columns ],
on_create => [ @create_columns ],
};
$self->__column_timestamp_triggers($triggers);
}
}
sub insert {
my $self = shift;
my $attrs = shift;
my $now = $self->get_timestamp();
my @columns = @{ $self->__column_timestamp_triggers()->{on_create} };
foreach my $column ( @columns ) {
next if defined $self->get_column( $column );
my $accessor = $self->column_info($column)->{accessor} || $column;
$self->$accessor($now);
}
return $self->next::method(@_);
}
sub update {
my $self = shift;
my $now = $self->get_timestamp();
my %dirty = $self->get_dirty_columns();
my @columns = @{ $self->__column_timestamp_triggers()->{on_update} };
foreach my $column ( @columns ) {
next if exists $dirty{ $column };
my $accessor = $self->column_info($column)->{accessor} || $column;
$self->$accessor($now);
}
return $self->next::method(@_);
}
#line 121
sub get_timestamp {
return DateTime->now
}
#line 141
1;
( run in 0.463 second using v1.01-cache-2.11-cpan-6aa56a78535 )