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 )