X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FGitalist%2FModel%2FCollectionOfRepos.pm;h=6588937b98d651592d8be7443dcd110a90a233b3;hb=eef1fb14f8acced2937e0f7f75fca40f51154036;hp=128d0baa1d95225315957710e98eba27eeed927d;hpb=2298d93ff984748b0c15d19bad6fdebb1d81c4f1;p=catagits%2FGitalist.git diff --git a/lib/Gitalist/Model/CollectionOfRepos.pm b/lib/Gitalist/Model/CollectionOfRepos.pm index 128d0ba..6588937 100644 --- a/lib/Gitalist/Model/CollectionOfRepos.pm +++ b/lib/Gitalist/Model/CollectionOfRepos.pm @@ -1,17 +1,16 @@ 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 MooseX::Types::LoadableClass qw/ LoadableClass /; use Moose::Util::TypeConstraints; use Moose::Autobox; use namespace::autoclean; extends 'Catalyst::Model'; +with 'Catalyst::Component::ApplicationAttribute'; with 'Catalyst::Component::InstancePerContext'; my $repo_dir_t = subtype NonEmptySimpleStr, @@ -50,6 +49,32 @@ has repos => ( coerce => 1, ); +has class => ( + isa => LoadableClass, + is => 'ro', + is => 'lazy', + builder => '_build_class', +); + +sub _build_class { + my($self) = @_; + + if($self->whitelist && -f $self->whitelist) { + return 'Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList'; + } elsif ($self->_repos_count && !$self->search_recursively) { + return 'Gitalist::Git::CollectionOfRepositories::FromListOfDirectories'; + } elsif($self->search_recursively) { + return 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive'; + } + + return 'Gitalist::Git::CollectionOfRepositories::FromDirectory'; +} + +has args => ( + isa => 'HashRef', + is => 'ro', + default => sub { {} }, +); has search_recursively => ( is => 'ro', @@ -69,8 +94,10 @@ has whitelist => ( sub _build_repo_dir { my $self = shift; - $ENV{GITALIST_REPO_DIR} ? - $ENV{GITALIST_REPO_DIR} + my $repo_dir = $self->_application->run_options->{repo_dir}; + + $repo_dir ? + $repo_dir : $self->has_config_repo_dir ? $self->config_repo_dir : ''; @@ -83,25 +110,21 @@ after BUILD => sub { $self->_repos_count || $self->repo_dir; }; + sub build_per_context_instance { my ($self, $app) = @_; - my %args = (export_ok => $self->export_ok || ''); - my $class; - if($self->whitelist && -f $self->whitelist) { - $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectory::WhiteList'; - $args{repo_dir} = $self->repo_dir; - $args{whitelist} = $self->whitelist; - } elsif ($self->_repos_count && !$self->search_recursively) { - $class = 'Gitalist::Git::CollectionOfRepositories::FromListOfDirectories'; - $args{repos} = $self->repos; - } elsif($self->search_recursively) { - $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive'; - $args{repo_dir} = $self->repo_dir; - } else { - $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectory'; - $args{repo_dir} = $self->repo_dir; - } + my %args = ( + export_ok => $self->export_ok || '', + $self->_has_whitelist ? (whitelist => $self->whistlist) : (), + $self->_has_repos ? (repos => $self->repos) : () + $self->_has_repo_dir ? (repo_dir => $self->repo_dir) : () + %{ $self->args } + ); + + my $class = $self->class; + + $app->log->debug("Using class '$class'"); return $class->new(%args); } @@ -116,6 +139,24 @@ __END__ Gitalist::Model::CollectionOfRepos - Model::CollectionOfRepos module for Gitalist +=head1 DESCRIPTION + +This Model is a factory for an object implementing the L +interface. + +The simple options passed on the command line (like C<--repos_dir>), a class will by picked by default +L. + +This can be overridden from config by explicitly passing in a class name and args for that class +in config: + + + class MyClassName + + ... + + + =head1 AUTHORS See L for authors.