Add the ability to provide a whitelist of repos.
[catagits/Gitalist.git] / lib / Gitalist / Git / CollectionOfRepositories / FromDirectory / WhiteList.pm
diff --git a/lib/Gitalist/Git/CollectionOfRepositories/FromDirectory/WhiteList.pm b/lib/Gitalist/Git/CollectionOfRepositories/FromDirectory/WhiteList.pm
new file mode 100644 (file)
index 0000000..8b1d79b
--- /dev/null
@@ -0,0 +1,65 @@
+use MooseX::Declare;
+
+class Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList
+    extends Gitalist::Git::CollectionOfRepositories::FromDirectory {
+    use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
+    use MooseX::Types::Path::Class qw/File Dir/;
+
+    has whitelist => (
+        isa      => File,
+        is       => 'ro',
+        required => 1,
+        coerce   => 1,
+    );
+
+    method _build_repositories {
+        return [
+            map  Gitalist::Git::Repository->new($_),
+            grep -d $_,
+            map  $self->repo_dir->subdir($_), $self->whitelist->slurp(chomp => 1)
+        ];
+    }
+}
+
+__END__
+=head1 NAME
+
+Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList - Model of a repositories listed in a file in a given directory.
+
+=head1 SYNOPSIS
+
+    my $repo = Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList->new(
+      repo_dir  => $Dir,
+      whitelist => 'projects.list',
+    );
+    my $repository_list = $repo->repositories;
+    my $first_repository = $repository_list->[0];
+    my $named_repository = $repo->get_repository('Gitalist');
+
+=head1 DESCRIPTION
+
+This class provides a list of Repositories found in the given
+directory and specified in a given whitelist file.
+
+=head1 ATTRIBUTES
+
+=head2 whitelist (C<Path::Class::File>)
+
+The file containing the available repositories. Each line specifies a
+different repository within L</repo_dir>.
+
+=head1 SEE ALSO
+
+L<Gitalist::Git::CollectionOfRepositories>,
+L<Gitalist::Git::Repository>, 
+L<Gitalist::Git::CollectionOfRepositories::FromDirectory>
+
+=head1 AUTHORS
+
+See L<Gitalist> for authors.
+
+=head1 LICENSE
+
+See L<Gitalist> for the license.
+
+=cut