Drop MooseX::Types::ISO8601 dependency.
[catagits/Gitalist.git] / lib / Gitalist / Git / Types.pm
1 package Gitalist::Git::Types;
2
3 use MooseX::Types
4      -declare => [qw/
5          SHA1
6          Dir
7          ArrayRefOfDirs
8          DirOrUndef
9      /];
10
11 use MooseX::Types::Path::Class;
12 use MooseX::Types::DateTime qw/ DateTime /;
13 use MooseX::Storage::Engine ();
14 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
15 use MooseX::Types::Moose qw/ ArrayRef Undef Str /;
16 use Path::Class qw/ dir /;
17
18 subtype SHA1,
19     as NonEmptySimpleStr,
20     where { $_ =~ qr/^[0-9a-fA-F]{40}$/ },
21     message { q/Str doesn't look like a SHA1./ };
22
23 coerce SHA1,
24     from NonEmptySimpleStr,
25     via { 1 };
26
27 MooseX::Storage::Engine->add_custom_type_handler(
28     DateTime,
29         expand   => sub {
30             my $val = shift;
31             Carp::confess("Not implemented");
32         },
33         collapse => sub {
34             $_[0]->ymd('-') . 'T' . $_[0]->hms(':') . 'Z' 
35         },
36 );
37
38 subtype Dir,
39     as 'MooseX::Types::Path::Class::Dir',
40     where { 1 };
41
42 subtype ArrayRefOfDirs, as ArrayRef[Dir], where { scalar(@$_) >= 1 }, message { "Cannot find repository dir" };
43 coerce ArrayRefOfDirs, from NonEmptySimpleStr, via { [ dir($_)->resolve ] };
44 coerce ArrayRefOfDirs, from ArrayRef[NonEmptySimpleStr], via { [ map { dir($_)->resolve } @$_ ] };
45
46 subtype DirOrUndef, as Dir | Undef;
47 coerce DirOrUndef, from Str, via { if ($_) { dir($_) } else { undef }};
48
49 MooseX::Storage::Engine->add_custom_type_handler(
50     Dir,
51         expand   => sub {
52             my $val = shift;
53             Carp::confess("Not implemented");
54         },
55         collapse => sub {
56             shift() . '';
57         },
58 );
59
60 1;