coerce => 1,
);
+has class => (
+ isa => NonEmptySimpleStr,
+ is => 'ro',
+);
+
+has args => (
+ isa => 'HashRef',
+ is => 'ro',
+ default => sub { {} },
+);
has search_recursively => (
is => 'ro',
$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;
- } else {
- $class = 'Gitalist::Git::CollectionOfRepositories::FromDirectoryRecursive';
- $args{repo_dir} = $self->repo_dir;
+ return 'FromListOfDirectories';
+ } elsif($self->search_recursively) {
+ 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);
}
__END__
+=encoding UTF-8
+
+=head1 NAME
+
+Gitalist::Model::CollectionOfRepos - Model::CollectionOfRepos module for Gitalist
+
=head1 AUTHORS
See L<Gitalist> for authors.