a1a54c6679cedf9ff4d17492d91e92a03a933e6a
[catagits/Gitalist.git] / lib / Gitalist / Git / CollectionOfRepositories / FromListOfDirectories.pm
1 use MooseX::Declare;
2
3 class Gitalist::Git::CollectionOfRepositories::FromListOfDirectories with Gitalist::Git::CollectionOfRepositories {
4     use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
5     use MooseX::Types::Moose qw/ ArrayRef HashRef /;
6     use MooseX::Types::Path::Class qw/Dir/;
7     use File::Basename qw/basename/;
8     use Path::Class qw/dir/;
9     use Moose::Autobox;
10
11     has repos => (
12         isa => ArrayRef[NonEmptySimpleStr],
13         is => 'ro',
14         required => 1,
15     );
16     has _repos_by_name => (
17         isa => HashRef[Dir],
18         is => 'ro',
19         lazy_build => 1,
20         traits => ['Hash'],
21         handles => {
22             _get_path_for_repository_name => 'get',
23         },
24     );
25
26     method _build__repos_by_name {
27         +{ map { basename($_) => dir($_) } $self->repos->flatten };
28     }
29
30     ## Builders
31     method _build_repositories {
32         [ map { $self->get_repository(basename($_)) } $self->repos->flatten ];
33     }
34 }                               # end class
35
36 1;
37
38 =head1 NAME
39
40 Gitalist::Git::CollectionOfRepositories::FromListOfDirectories - Model of a collection of git repositories
41
42 =head1 SYNOPSIS
43
44     my $collection = Gitalist::Git::CollectionOfRepositories::FromListOfDirectories->new( repos => [qw/
45         /path/to/repos1
46         /path/to/repos2
47     /] );
48     my $repository_list = $collection->repositories;
49     my $first_repository = $repository_list->[0];
50     my $named_repository = $repo->get_repository('Gitalist');
51
52 =head1 DESCRIPTION
53
54 This class provides an abstraction for a list of Repository directories.
55
56 =head1 ATTRIBUTES
57
58 =head2 repos (C<< ArrayRef[NonEmptySimpleStr] >>)
59
60 A list of git repository directories
61
62 =head1 SEE ALSO
63
64 L<Gitalist::Git::CollectionOfRepositories>, L<Gitalist::Git::Repository>
65
66 =head1 AUTHORS
67
68 See L<Gitalist> for authors.
69
70 =head1 LICENSE
71
72 See L<Gitalist> for the license.
73
74 =cut