Make the tests pass again
[catagits/Gitalist.git] / lib / Gitalist / Git / Types.pm
index 3b5d103..ad934f6 100644 (file)
@@ -3,15 +3,18 @@ package Gitalist::Git::Types;
 use MooseX::Types
      -declare => [qw/
          SHA1
-         DateTime
          Dir
+         ArrayRefOfDirs
+         DirOrUndef
      /];
 
 use MooseX::Types::Path::Class;
 use MooseX::Types::ISO8601 qw/ISO8601DateTimeStr/;
-use MooseX::Types::DateTime ();
+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 /;
 
 subtype SHA1,
     as NonEmptySimpleStr,
@@ -22,10 +25,6 @@ coerce SHA1,
     from NonEmptySimpleStr,
     via { 1 };
 
-subtype DateTime,
-    as 'MooseX::Types::DateTime::DateTime',
-    where { 1 };
-
 MooseX::Storage::Engine->add_custom_type_handler(
     DateTime,
         expand   => sub {
@@ -41,6 +40,13 @@ 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 {