Commit | Line | Data |
ceef0cf1 |
1 | package Gitalist::Git::Types; |
2 | |
3 | use MooseX::Types |
5c07fcf1 |
4 | -declare => [qw/ |
5 | SHA1 |
5c07fcf1 |
6 | Dir |
ea772511 |
7 | ArrayRefOfDirs |
8 | DirOrUndef |
5c07fcf1 |
9 | /]; |
ceef0cf1 |
10 | |
5c07fcf1 |
11 | use MooseX::Types::Path::Class; |
f9baba96 |
12 | use MooseX::Types::DateTime qw/ DateTime /; |
5c07fcf1 |
13 | use MooseX::Storage::Engine (); |
ceef0cf1 |
14 | use MooseX::Types::Common::String qw/NonEmptySimpleStr/; |
ea772511 |
15 | use MooseX::Types::Moose qw/ ArrayRef Undef Str /; |
16 | use Path::Class qw/ dir /; |
ceef0cf1 |
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 | |
5c07fcf1 |
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 { |
1369c148 |
34 | $_[0]->ymd('-') . 'T' . $_[0]->hms(':') . 'Z' |
5c07fcf1 |
35 | }, |
36 | ); |
37 | |
38 | subtype Dir, |
39 | as 'MooseX::Types::Path::Class::Dir', |
40 | where { 1 }; |
41 | |
ea772511 |
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 | |
5c07fcf1 |
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 | |
ceef0cf1 |
60 | 1; |