X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FGitalist%2FModel%2FCollectionOfRepos.pm;h=4cc901ee6baeb74b26601ce19253e23b38523b93;hb=5e26dc93f7d8f6b3a9df80f69b3cc5f3f477f8be;hp=4c561738337ba425b2c45dad923d5dad55d300c9;hpb=07ee9dc18c21d8e9f378e45c7db8937a75ca64e5;p=catagits%2FGitalist.git diff --git a/lib/Gitalist/Model/CollectionOfRepos.pm b/lib/Gitalist/Model/CollectionOfRepos.pm index 4c56173..4cc901e 100644 --- a/lib/Gitalist/Model/CollectionOfRepos.pm +++ b/lib/Gitalist/Model/CollectionOfRepos.pm @@ -12,6 +12,7 @@ use namespace::autoclean; extends 'Catalyst::Model'; +with 'Catalyst::Component::ApplicationAttribute'; with 'Catalyst::Component::InstancePerContext'; my $repo_dir_t = subtype NonEmptySimpleStr, @@ -50,6 +51,16 @@ has repos => ( coerce => 1, ); +has class => ( + isa => NonEmptySimpleStr, + is => 'ro', +); + +has args => ( + isa => 'HashRef', + is => 'ro', + default => sub { {} }, +); has search_recursively => ( is => 'ro', @@ -69,8 +80,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,26 +96,41 @@ after BUILD => sub { $self->_repos_count || $self->repo_dir; }; -sub build_per_context_instance { - my ($self, $app) = @_; +sub _default_model_class { + my($self) = @_; - 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; + return 'FromDirectory::WhiteList'; } elsif ($self->_repos_count && !$self->search_recursively) { - $class = 'Gitalist::Git::CollectionOfRepositories::FromListOfDirectories'; - $args{repos} = $self->repos; + return 'FromListOfDirectories'; } 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; + return 'FromDirectoryRecursive'; } + return 'FromDirectory'; +} + +sub build_per_context_instance { + my ($self, $app) = @_; + + 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); } @@ -110,6 +138,12 @@ __PACKAGE__->meta->make_immutable; __END__ +=encoding UTF-8 + +=head1 NAME + +Gitalist::Model::CollectionOfRepos - Model::CollectionOfRepos module for Gitalist + =head1 AUTHORS See L for authors.