package Gitalist::Git::Types;
use MooseX::Types
-declare => [qw/
Dir
ArrayRefOfDirs
DirOrUndef
/];
use MooseX::Types::Path::Class;
use MooseX::Types::DateTime qw/ DateTime /;
use MooseX::Storage::Engine ();
use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
use MooseX::Types::Moose qw/ ArrayRef Undef Str /;
use Path::Class qw/ dir /;
MooseX::Storage::Engine->add_custom_type_handler(
DateTime,
expand => sub {
my $val = shift;
Carp::confess("Not implemented");
},
collapse => sub {
$_[0]->ymd('-') . 'T' . $_[0]->hms(':') . 'Z'
},
);
subtype Dir,
as 'MooseX::Types::Path::Class::Dir',
where { 1 };
subtype ArrayRefOfDirs, as ArrayRef[Dir], where { scalar(@$_) >= 1 }, message { "Cannot find repository dir" };
coerce ArrayRefOfDirs, from NonEmptySimpleStr, via { [ dir($_)->resolve ] };
coerce ArrayRefOfDirs, from ArrayRef[NonEmptySimpleStr], via { [ map { dir($_)->resolve } @$_ ] };
subtype DirOrUndef, as Dir | Undef;
coerce DirOrUndef, from Str, via { if ($_) { dir($_) } else { undef }};
MooseX::Storage::Engine->add_custom_type_handler(
Dir,
expand => sub {
my $val = shift;
Carp::confess("Not implemented");
},
collapse => sub {
shift() . '';
},
);
1;