use strict;
use warnings;
{
package My::DateClass;
use Moose;
use MooseX::Types::ISO8601 qw/
ISO8601DateStr
ISO8601TimeStr
ISO8601DateTimeStr
/;
use namespace::autoclean;
foreach my $type (
[date => ISO8601DateStr],
[time => ISO8601TimeStr],
[datetime => ISO8601DateTimeStr],
) {
has $type->[0] => (
isa => $type->[1], is => 'ro', required => 1, coerce => 1,
);
}
}
use Test::More;
use Test::Exception;
use DateTime;
lives_ok {
my $i = My::DateClass->new(
date => '2009-01-01',
time => '12:34:29Z',
datetime => '2009-01-01T12:34:29Z',
);
is( $i->date, '2009-01-01', 'Date unmangled' );
is( $i->time, '12:34:29Z', 'Time unmangled' );
is( $i->datetime, '2009-01-01T12:34:29Z', 'Datetime unmangled' );
} 'Date class instance';
lives_ok {
my $date = DateTime->now;
my $i = My::DateClass->new(
map { $_ => $date } qw/date time datetime/
);
ok !ref($_) for map { $i->$_ } qw/date time datetime/;
like( $i->date, qr/\d{4}-\d{2}-\d{2}/, 'Date mangled' );
like( $i->time, qr/\d{2}:\d{2}Z/, 'Time mangled' );
like( $i->datetime, qr/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z/, 'Datetime mangled' );
} 'Date class instance with coercion';
done_testing;