Jifty::DBI::Filter::Duration - Encodes time durations


Jifty-DBI documentation Contained in the Jifty-DBI distribution.

Index


Code Index:

NAME

Top

Jifty::DBI::Filter::Duration - Encodes time durations

DESCRIPTION

Top

encode

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.

decode

If value is defined, then decode it using duration_exact in Time::Duration and concise in Time::Duration, otherwise do nothing.

SEE ALSO

Top

Jifty::DBI::Filter, Time::Duration, Time::Duration::Parse


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;