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);
29 extends 'Debbugs::Collection';
31 has '+members' => (isa => 'ArrayRef[Bug]');
32 has 'package_collection' => (is => 'rw',
33 isa => 'Debbugs::Collection::Package',
34 default => sub {Debbugs::Collection::Package->new()}
37 around BUILDARGS => sub {
42 if (@_==1 and ref($_[0]) eq 'HASH') {
47 $args{members} //= [];
48 if (exists $args{bugs}) {
49 push @{$args{members}},
50 _member_constructor(bugs => $args{bugs},
51 hash_slice(%args,qw(schema constructor_args)),
55 return $class->$orig(%args);
58 sub _member_constructor {
59 # handle being called $self->_member_constructor;
65 if (exists $args{schema}) {
66 my $statuses = get_bug_statuses(bug => [make_list($args{bugs})],
67 schema => $args{schema},
69 while (my ($bug, $status) = each %{$statuses}) {
71 Debbugs::Bug->new(bug=>$bug,
73 schema=>$args{schema},
74 @{$args{constructor_args}//[]},
78 for my $bug (make_list($args{bugs})) {
80 Debbugs::Bug->new(bug => $bug,
81 @{$args{constructor_args}//[]},
88 around add_by_key => sub {
92 _member_constructor(bugs => [@_],
93 $self->has_schema?(schema => $self->schema):(),
94 constructor_args => $self->constructor_args,
96 return $self->$orig(@members);
103 __PACKAGE__->meta->make_immutable;
109 # indent-tabs-mode: nil
110 # cperl-indent-level: 4