Skip to content

Instantly share code, notes, and snippets.

@leejo
Last active August 29, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leejo/e71c0a51bd7328903ff0 to your computer and use it in GitHub Desktop.
Save leejo/e71c0a51bd7328903ff0 to your computer and use it in GitHub Desktop.
Trying to convert a MySQL date / timestamp to a DateTime object with Moo + Type::Tiny. Failing. Badly. Any clues?
#!perl
use strict;
use warnings;
package Type::Tester;
use Moo;
use Type::Library -base, -declare => qw/DateTime/;
use Types::Standard qw/ Str /;
use Type::Utils qw/ class_type coerce from via /;
use DateTime::Format::MySQL;
class_type DateTime => { class => 'DateTime' };
coerce DateTime,
from Str,
via {
my $dt = $_ =~ /:/
? DateTime::Format::MySQL->parse_datetime($_)
: DateTime::Format::MySQL->parse_date($_);
$dt->set_time_zone( 'UTC' );
return $dt;
}
;
has [ qw/ date datetime / ] => (
'is' => 'rw',
'isa' => DateTime,
'coerce' => DateTime->coercion,
'required' => 0
);
1;
package main;
use Test::Most;
my $TypeTester = Type::Tester->new;
ok( $TypeTester->date( '2013-12-23' ),'set date' );
isa_ok( $TypeTester->date,'DateTime',' ... is coerced to DateTime' );
ok( !$TypeTester->date( undef ) );
is( $TypeTester->date,undef,'undef value is not coerced' );
ok( $TypeTester->datetime( '2013-12-23 00:00:00' ),'set datetime' );
isa_ok( $TypeTester->datetime,'DateTime',' ... is coerced to DateTime' );
ok( !$TypeTester->datetime( undef ) );
is( $TypeTester->datetime,undef,'undef value is not coerced' );
done_testing();
#######################
> prove -v t/unit/payprop/types.t
t/unit/payprop/types.t .. Can't locate object method "add_type" via package "Moose::Meta::Class" at /Users/leejohnson/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/Moo/HandleMoose/FakeMetaClass.pm line 12.
Dubious, test returned 255 (wstat 65280, 0xff00)
No subtests run
Test Summary Report
-------------------
t/unit/payprop/types.t (Wstat: 65280 Tests: 0 Failed: 0)
Non-zero exit status: 255
Parse errors: No plan found in TAP output
Files=1, Tests=0, 0 wallclock secs ( 0.03 usr 0.01 sys + 0.39 cusr 0.07 csys = 0.50 CPU)
Result: FAIL
#######################
> pmvers Moo Type::Tiny Moose
Moo: 2.000001
Type::Tiny: 1.000005
Moose: 2.1404
> perl --version
This is perl 5, version 22, subversion 0 (v5.22.0) built for darwin-2level
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment