Acme-DateTime-Duration-Numeric

 view release on metacpan or  search on metacpan

lib/Acme/DateTime/Duration/Numeric.pm  view on Meta::CPAN

package Acme::DateTime::Duration::Numeric;

use strict;
use 5.8.1;
our $VERSION = '0.03';

use overload '""' => \&value, '+0' => \&value, fallback => 1;
use DateTime;
use DateTime::Duration;

sub import {
    ## Should we do this for 'float' as well?
    overload::constant integer => sub { Acme::DateTime::Duration::Numeric->new(@_) };

    ## Gross hack to bypass DateTime's Params::Validate check
    $Params::Validate::NO_VALIDATION = 1;
}

sub new {
    my($class, $value) = @_;
    bless { value => $value }, $class;
}

sub value { $_[0]->{value} }

for my $accessor (qw( day hour minute month second week year )) {
    no strict 'refs';
    my $plural = $accessor . "s";
    *$accessor = *$plural = sub {
        my $self = shift;
        DateTime::Duration->new($plural => $self->{value});
    };
}

sub fortnight {
    my $self = shift;
    DateTime::Duration->new(weeks => 2 * $self->{value});
}

*fortnights = \&fortnight;

sub DateTime::Duration::ago {
    my $duration = shift;
    my $dt = $_[0] ? $_[0]->clone : DateTime->now;
    $dt->subtract_duration($duration);
}

*DateTime::Duration::until = \&DateTime::Duration::ago;

sub DateTime::Duration::from_now {
    my $duration = shift;
    my $dt = $_[0] ? $_[0]->clone : DateTime->now;
    $dt->add_duration($duration);
}

*DateTime::Duration::since = \&DateTime::Duration::from_now;

1;
__END__

=for stopwords DateTime ActiveSupport

=head1 NAME

Acme::DateTime::Duration::Numeric - ActiveSupport equivalent to Perl numeric variables

=head1 WARNING

This module is deprecated. Use L<autobox::DateTime::Duration> instead.

=head1 SYNOPSIS

  use Acme::DateTime::Duration::Numeric;

  # equivalent to DateTime::Duration->new(months => 1, days => 5);
  $duration = 1->month + 2->days;

  # equivalent to DateTime->now->add(years => 2);
  $datetime = 2->years->from_now;

  # equivalent to DateTime->now->add(months => 4, years => 5);



( run in 1.081 second using v1.01-cache-2.11-cpan-39bf76dae61 )