NAME

DateTimeX::Role::Immutable - A role that can be composed into a DateTime subclass to make it immutable

VERSION

version 0.35

SYNOPSIS

package Your::DateTime;
use base 'DateTime';
use Role::Tiny::With;
with 'DateTimeX::Role::Immutable';

DESCRIPTION

This is role that can be composed into a DateTime subclass to make those objects immutable. The set methods are replaced with new methods that leave the original object untouched, and return a new DateTime object with the expected changes.

The following methods now thrown an exception:

$dt->add_duration()
$dt->subtract_duration()
$dt->add()
$dt->subtract()
$dt->set()
$dt->set_year()
$dt->set_month()
$dt->set_day()
$dt->set_hour()
$dt->set_minute()
$dt->set_second()
$dt->set_nanosecond()
$dt->truncate()

and are replaced by these methods which return the changed value:

$dt->plus_duration()
$dt->minus_duration()
$dt->plus()
$dt->minus()
$dt->with_component()
$dt->with_year()
$dt->with_month()
$dt->with_day()
$dt->with_hour()
$dt->with_minute()
$dt->with_second()
$dt->with_nanosecond()
$dt->trunc()

At the moment, set_time_zone, set_locale, and set_formatter continue to act as mutators. DateTime uses these internally and changing them creates unexpected behavior. These methods also do not really change the time value.

SEE ALSO

DateTimeX::Role::Immutable, DateTime, DateTime::Moonpig, Time::Moment

AUTHOR

Mark Grimes, <mgrimes@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Mark Grimes, <mgrimes@cpan.org>.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.