1 package MooseX::Types::DateTime::MoreCoercions;
6 use DateTime 0.4302 ();
7 use DateTime::Duration 0.4302 ();
8 use DateTimeX::Easy 0.085 ();
9 use Time::Duration::Parse 0.06 qw(parse_duration);
10 use MooseX::Types::DateTime 0.07 ();
11 use MooseX::Types::Moose 0.04 qw/Num HashRef Str/;
13 use namespace::clean 0.08;
15 our $VERSION = '0.11';
17 use MooseX::Types 0.04 -declare => [qw( DateTime Duration)];
19 subtype DateTime, as MooseX::Types::DateTime::DateTime;
21 @{ MooseX::Types::DateTime::DateTime->coercion->type_coercion_map },
22 from Str, via { DateTimeX::Easy->new($_) },
25 subtype Duration, as MooseX::Types::DateTime::Duration;
27 @{ MooseX::Types::DateTime::Duration->coercion->type_coercion_map },
29 DateTime::Duration->new(
30 seconds => parse_duration($_)
41 MooseX::Types::DateTime::MoreCoercions - Extensions to L<MooseX::Types::DateTime>
45 package MyApp::MyClass;
47 use MooseX::Types::DateTime::MoreCoercions qw( DateTime );
55 my $instance = MyApp::MyClass->new(created=>'January 1, 1980');
56 print $instance->created->year; # is 1980
58 ## Coercions from the base type continue to work as normal.
59 my $instance = MyApp::MyClass->new(created=>{year=>2000,month=>1,day=>10});
61 Please see the test case for more example usage.
65 This module builds on L<MooseX::Types::DateTime> to add additional custom types and coercions. Since it builds on an existing type, all coercions and constraints are inherited.
69 This module defines the following additional subtypes.
73 Subtype of L<MooseX::Types::DateTime/DateTime>. Adds an additional coercion from strings.
75 Uses L<DateTimeX::Easy> to try and convert strings, like "yesterday" into a valid L<DateTime> object. Please note that due to ambiguity with how different systems might localize their timezone, string parsing may not always return the most expected value. IN general we try to localize to UTC whenever possible. Feedback welcomed!
79 Subtype of L<MooseX::Types::DateTime/Duration> that coerces from a string. We use the module L<Time::Duration::Parse> to attempt this.
83 Firstly, this module uses L<DateTimeX::Easy> which is way more DWIM than any sane person would desire. L<DateTimeX::Easy> works by falling back until something makes sense, this is variable. Furthermore, all the modules that L<DateTimeX::Easy> *can* use aren't required for "proper" function of L<DateTimeX::Easy>. What does this mean? Simple, your mileage may vary in your coercions because L<DateTimeX::Easy> is installation specific.
89 =item * L<MooseX::Types::DateTime> Replacement for this module -- coercions with less voodoo
91 =item * L<DateTimeX::Easy> Backend of this module
93 =item * L<Time::Duration::Parse> Duration parsing backend for this module
99 John Napiorkowski E<lt>jjn1056 at yahoo.comE<gt>
101 Broken into a separate package from L<MooseX::Types::DateTime> by Evan Carroll.
103 Forked from L<MooseX::Types::DateTimeX> and ported back to use
104 L<MooseX::Types::DateTime> by Dagfinn Ilmari MannsE<aring>ker
105 E<lt>ilmari@ilmari.orgE<gt>.
109 Copyright (c) 2008 John Napiorkowski.
111 This program is free software; you can redistribute
112 it and/or modify it under the same terms as Perl itself.