package Jifty::DBI::Filter::Duration; use warnings; use strict; use base qw|Jifty::DBI::Filter|; use Time::Duration qw(); use Time::Duration::Parse qw(); =head1 NAME Jifty::DBI::Filter::Duration - Encodes time durations =head1 DESCRIPTION =head2 encode If value is defined, then encode it using L, otherwise do nothing. If the value can't be parsed, then set it to undef. =cut 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; } } =head2 decode If value is defined, then decode it using L and L, otherwise do nothing. =cut 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)); } =head1 SEE ALSO L, L, L =cut 1;