1 # This module is part of debbugs, and
2 # is released under the terms of the GPL version 2, or any later
3 # version (at your option). See the file README and COPYING for more
5 # Copyright 2018 by Don Armstrong <don@donarmstrong.com>.
7 package Debbugs::Collection::Bug;
11 Debbugs::Collection::Bug -- Bug generation factory
24 use namespace::autoclean;
25 use Debbugs::Common qw(make_list hash_slice);
27 use Debbugs::Status qw(get_bug_statuses);
28 use Debbugs::Collection::Package;
29 use Debbugs::Collection::Correspondent;
33 extends 'Debbugs::Collection';
35 has '+members' => (isa => 'ArrayRef[Bug]');
36 has 'package_collection' =>
38 isa => 'Debbugs::Collection::Package',
39 builder => '_build_package_collection',
43 sub _build_package_collection {
45 return Debbugs::Collection::Package->new($self->has_schema?(schema => $self->schema):());
48 has 'correspondent_collection' =>
50 isa => 'Debbugs::Collection::Correspondent',
51 builder => '_build_correspondent_collection',
55 sub _build_correspondent_collection {
57 return Debbugs::Collection::Correspondent->new($self->has_schema?(schema => $self->schema):());
62 isa => 'ArrayRef[Debbugs::User]',
65 handles => {'add_user' => 'push'},
71 if (exists $args->{bugs}) {
73 $self->_member_constructor(bugs => $args->{bugs}
78 sub _member_constructor {
79 # handle being called $self->_member_constructor;
84 $schema = $self->schema if $self->has_schema;
86 if (defined $schema) {
87 my $statuses = get_bug_statuses(bug => [make_list($args{bugs})],
90 while (my ($bug, $status) = each %{$statuses}) {
92 Debbugs::Bug->new(bug => $bug,
96 $self->package_collection->universe,
99 correspondent_collection =>
100 $self->correspondent_collection->universe,
101 @{$args{constructor_args}//[]},
105 for my $bug (make_list($args{bugs})) {
107 Debbugs::Bug->new(bug => $bug,
108 package_collection =>
109 $self->package_collection->universe,
112 correspondent_collection =>
113 $self->correspondent_collection->universe,
114 @{$args{constructor_args}//[]},
121 around add_by_key => sub {
125 $self->_member_constructor(bugs => [@_],
127 return $self->$orig(@members);
134 sub load_related_packages_and_versions {
136 my @related_packages_and_versions =
137 $self->map(sub {$_->related_packages_and_versions});
138 $self->package_collection->
139 add_packages_and_versions(@related_packages_and_versions);
142 __PACKAGE__->meta->make_immutable;
148 # indent-tabs-mode: nil
149 # cperl-indent-level: 4