And support a list of directories in the Catalyst model as config
[catagits/Gitalist.git] / lib / Gitalist / Model / GitRepos.pm
index f988d8c..4b9ed85 100644 (file)
@@ -2,6 +2,8 @@ package Gitalist::Model::GitRepos;
 
 use Moose;
 use Gitalist::Git::Repo;
+use Gitalist::Git::CollectionOfProjects::FromListOfDirectories;
+use MooseX::Types::Moose qw/Maybe ArrayRef/;
 use MooseX::Types::Common::String qw/NonEmptySimpleStr/;
 use Moose::Util::TypeConstraints;
 use namespace::autoclean;
@@ -22,11 +24,21 @@ has config_repo_dir => (
 );
 
 has repo_dir => (
-    isa => $repo_dir_t,
+    isa => Maybe[$repo_dir_t],
     is => 'ro',
     lazy_build => 1
 );
 
+has repos => (
+    isa => ArrayRef[$repo_dir_t],
+    is => 'ro',
+    default => sub { [] },
+    traits => ['Array'],
+    handles => {
+        _repos_count => 'count',
+    },
+);
+
 sub _build_repo_dir {
     my $self = shift;
     $ENV{GITALIST_REPO_DIR} ?
@@ -38,14 +50,19 @@ sub _build_repo_dir {
 
 after BUILD => sub {
     my $self = shift;
-    $self->repo_dir; # Explode loudly at app startup time if there is no repos
-                     # dir, rather than on first hit
+    # Explode loudly at app startup time if there is no list of
+    # projects or repos dir, rather than on first hit
+    $self->_repos_count || $self->repo_dir;
 };
 
 sub build_per_context_instance {
     my ($self, $app) = @_;
-
-    Gitalist::Git::Repo->new(repo_dir => $self->repo_dir);
+    if ($self->_repos_count) {
+        Gitalist::Git::CollectionOfProjects::FromListOfDirectories->new(repos => $self->repos);
+    }
+    else {
+        Gitalist::Git::Repo->new(repo_dir => $self->repo_dir);
+    }
 }
 
 __PACKAGE__->meta->make_immutable;