| DateTime-Format-Natural documentation | Contained in the DateTime-Format-Natural distribution. |
DateTime::Format::Natural::Wrappers - Wrappers for DateTime operations
Please see the DateTime::Format::Natural documentation.
The DateTime::Format::Natural::Wrappers class provides internal wrappers
for DateTime operations.
Steven Schubiger <schubiger@cpan.org>
This program is free software; you may redistribute it and/or modify it under the same terms as Perl itself.
| DateTime-Format-Natural documentation | Contained in the DateTime-Format-Natural distribution. |
package DateTime::Format::Natural::Wrappers; use strict; use warnings; our $VERSION = '0.03'; sub _add { my $self = shift; $self->_math(@_); } sub _subtract { my $self = shift; $self->_math(@_); } sub _math { my $self = shift; my ($unit, $value) = @_; my ($method) = (caller(1))[3] =~ /.+::(.+)$/; $method =~ s/^_//; $unit .= 's' unless $unit =~ /s$/; $self->{datetime}->$method($unit => $value); chop $unit; $self->{modified}{$unit}++; } sub _add_or_subtract { my $self = shift; if (ref $_[0] eq 'HASH') { my %opts = %{$_[0]}; if ($opts{when} > 0) { $self->_add($opts{unit} => $opts{value}); } elsif ($opts{when} < 0) { $self->_subtract($opts{unit} => $opts{value}); } } elsif (@_ == 2) { # Handle additions as expected and also subtractions # as the inverse result of adding a negative number. $self->_add(@_); } } sub _set { my $self = shift; my %values = @_; $self->{datetime}->set(%values); foreach my $unit (keys %values) { $self->{modified}{$unit}++; } } 1; __END__