MouseX::Types::DateTime - A DateTime type library for Mouse


MouseX-Types-DateTime documentation Contained in the MouseX-Types-DateTime distribution.

Index


Code Index:

NAME

Top

MouseX::Types::DateTime - A DateTime type library for Mouse

SYNOPSIS

Top

CLASS TYPES

    package MyApp;
    use Mouse;
    use MouseX::Types::DateTime;

    has 'datetime' => (
        is     => 'rw',
        isa    => 'DateTime',
        coerce => 1,
    );

    has 'duration' => (
        is     => 'rw',
        isa    => 'DateTime::Duration',
        coerce => 1,
    );

    has 'timezone' => (
        is     => 'rw',
        isa    => 'DateTime::TimeZone',
        coerce => 1,
    );

    has 'locale' => (
        is     => 'rw',
        isa    => 'DateTime::Locale',
        coerce => 1,
    );

CUSTOM TYPES

    package MyApp;
    use Mouse;
    use MouseX::Types::DateTime qw(DateTime Duration TimeZone Locale);

    has 'datetime' => (
        is     => 'rw',
        isa    => DateTime,
        coerce => 1,
    );

    has 'duration' => (
        is     => 'rw',
        isa    => Duration,
        coerce => 1,
    );

    has 'timezone' => (
        is     => 'rw',
        isa    => TimeZone,
        coerce => 1,
    );

    has 'locale' => (
        is     => 'rw',
        isa    => Locale,
        coerce => 1,
    );

DESCRIPTION

Top

MouseX::Types::DateTime creates common Mouse types and coercions for dealing with DateTime objects as Mouse attributes.

Coercions (see Mouse::TypeRegistry) are made from Str and HashRef to DateTime, DateTime::Duration, DateTime::TimeZone and DateTime::Locale objects.

TYPES

Top

DateTime

A DateTime class type.

Coerces from Str via from_epoch in DateTime or new in DateTimeX::Easy.

Coerces from HashRef via new in DateTime.

Duration

A DateTime::Duration class type.

Coerces from Str via parse_duration in Time::Duration::Parse and new in DateTime::Duration.

Coerces from HashRef via new in DateTime::Duration.

TimeZone

A DateTime::TimeZone class type.

Coerces from Str via new in DateTime::TimeZone.

Locale

A DateTime::Locale (see DateTime::Locale::root) class type.

Coerces from Str via load in DateTime::Locale.

AUTHOR

Top

NAKAGAWA Masaki <masaki@cpan.org>

THANKS TO

Top

Yuval Kogman, John Napiorkowski, AUTHOR in MooseX::Types::DateTime

LICENSE

Top

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

SEE ALSO

Top

Mouse, Mouse::TypeRegistry,

DateTime, DateTimeX::Easy,

MooseX::Types::DateTime, MooseX::Types::DateTimeX


MouseX-Types-DateTime documentation Contained in the MouseX-Types-DateTime distribution.

package MouseX::Types::DateTime;

use strict;
use warnings;
use 5.8.1;
use DateTime ();
use DateTime::Duration ();
use DateTime::TimeZone ();
use DateTime::Locale ();
use DateTime::Locale::root ();
use DateTimeX::Easy ();
use Time::Duration::Parse qw(parse_duration);
use Scalar::Util qw(looks_like_number);
use Mouse::Util::TypeConstraints;
use MouseX::Types::Mouse qw(Str HashRef);
use namespace::clean;

use MouseX::Types
    -declare => [qw(DateTime Duration TimeZone Locale)]; # export Types

our $VERSION = '0.02';

class_type 'DateTime'           => { class => 'DateTime' };
class_type 'DateTime::Duration' => { class => 'DateTime::Duration' };
class_type 'DateTime::TimeZone' => { class => 'DateTime::TimeZone' };
class_type 'DateTime::Locale'   => { class => 'DateTime::Locale::root' };

subtype DateTime, as 'DateTime';
subtype Duration, as 'DateTime::Duration';
subtype TimeZone, as 'DateTime::TimeZone';
subtype Locale,   as 'DateTime::Locale';

for my $type ( 'DateTime', DateTime ) {
    coerce $type,
        from Str, via {
            looks_like_number($_)
                ? 'DateTime'->from_epoch(epoch => $_)
                : DateTimeX::Easy->new($_);
        },
        from HashRef, via { 'DateTime'->new(%$_) };
}

for my $type ( 'DateTime::Duration', Duration ) {
    coerce $type,
        from Str, via {
            DateTime::Duration->new(
                seconds => looks_like_number($_) ? $_ : parse_duration($_)
            );
        },
        from HashRef, via { DateTime::Duration->new(%$_) };
}

for my $type ( 'DateTime::TimeZone', TimeZone ) {
    coerce $type,
        from Str, via { DateTime::TimeZone->new(name => $_) };
}

for my $type ( 'DateTime::Locale', Locale ) {
    coerce $type,
        from Str, via { DateTime::Locale->load($_) };
}

1;