| Jifty-DBI documentation | Contained in the Jifty-DBI distribution. |
Jifty::DBI::Filter::Duration - Encodes time durations
If value is defined, then encode it using parse_duration in Time::Duration::Parse, otherwise do nothing. If the value can't be parsed, then set it to undef.
If value is defined, then decode it using duration_exact in Time::Duration and concise in Time::Duration, otherwise do nothing.
| Jifty-DBI documentation | Contained in the Jifty-DBI distribution. |
package Jifty::DBI::Filter::Duration; use warnings; use strict; use base qw|Jifty::DBI::Filter|; use Time::Duration qw(); use Time::Duration::Parse qw();
sub encode { my $self = shift; my $value_ref = $self->value_ref; return unless defined $$value_ref and length $$value_ref; my ($parsed) = eval { Time::Duration::Parse::parse_duration($$value_ref) }; if ( not $@ ) { $$value_ref = $parsed; return 1; } else { $$value_ref = undef; return; } }
sub decode { my $self = shift; my $value_ref = $self->value_ref; return unless defined $$value_ref and length $$value_ref and $$value_ref =~ /^\s*\d+\s*$/; $$value_ref = Time::Duration::concise(Time::Duration::duration_exact($$value_ref)); }
1;