X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FGitalist%2FModel%2FCollectionOfRepos.pm;h=1e709c4f9f4bf28510f78afee9e05622ba08eb02;hb=e33993c9be8b249ecb9f1570bb9057d4c28b3db8;hp=45c9e356c1e8d329a730ef2fedcaf128bde15863;hpb=afbb1a52b828221eba9a1c0c74dfa850992e3399;p=catagits%2FGitalist.git diff --git a/lib/Gitalist/Model/CollectionOfRepos.pm b/lib/Gitalist/Model/CollectionOfRepos.pm index 45c9e35..1e709c4 100644 --- a/lib/Gitalist/Model/CollectionOfRepos.pm +++ b/lib/Gitalist/Model/CollectionOfRepos.pm @@ -3,6 +3,7 @@ package Gitalist::Model::CollectionOfRepos; use Moose; use Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive; use Gitalist::Git::CollectionOfRepositories::FromListOfDirectories; +use Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList; use MooseX::Types::Moose qw/Maybe ArrayRef/; use MooseX::Types::Common::String qw/NonEmptySimpleStr/; use Moose::Util::TypeConstraints; @@ -49,6 +50,33 @@ has repos => ( coerce => 1, ); +has class => ( + isa => NonEmptySimpleStr, + is => 'ro', +); + +has args => ( + isa => 'HashRef', + is => 'ro', + default => sub { {} }, +); + +has search_recursively => ( + is => 'ro', + isa => 'Bool', + default => 0, +); + +has export_ok => ( + is => 'ro', + isa => 'Str', +); + +has whitelist => ( + is => 'ro', + isa => 'Str', +); + sub _build_repo_dir { my $self = shift; $ENV{GITALIST_REPO_DIR} ? @@ -65,20 +93,54 @@ after BUILD => sub { $self->_repos_count || $self->repo_dir; }; +sub _default_model_class { + my($self) = @_; + + if($self->whitelist && -f $self->whitelist) { + return 'FromDirectory::WhiteList'; + } elsif ($self->_repos_count && !$self->search_recursively) { + return 'FromListOfDirectories'; + } elsif($self->search_recursively) { + return 'FromDirectoryRecursive'; + } + + return 'FromDirectory'; +} + sub build_per_context_instance { my ($self, $app) = @_; - if ($self->_repos_count) { - Gitalist::Git::CollectionOfRepositories::FromListOfDirectories->new(repos => $self->repos); - } - else { - Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive->new(repo_dir => $self->repo_dir); - } + + my %args = ( + export_ok => $self->export_ok || '', + %{ $self->args } + ); + + my $class = $self->class; + Class::MOP::load_class($class) if $class; + + my $default = $self->_default_model_class; + + $args{whitelist} = $self->whitelist if $default eq 'FromDirectory::WhiteList'; + $args{repos} = $self->repos if $default eq 'FromListOfDirectories'; + $args{repo_dir} = $self->repo_dir if $default =~ /\b(?:WhiteList|FromDirectory(?:Recursive)?)$/; + + $class ||= "Gitalist::Git::CollectionOfRepositories::$default"; + + $app->log->debug("Using class '$class'"); + + return $class->new(%args); } __PACKAGE__->meta->make_immutable; __END__ +=encoding UTF-8 + +=head1 NAME + +Gitalist::Model::CollectionOfRepos - Model::CollectionOfRepos module for Gitalist + =head1 AUTHORS See L for authors.