]> git.donarmstrong.com Git - debbugs.git/blob - Debbugs/Collection/Package.pm
0459b1e04f31f6e50b7ca1921dacbea6d008530e
[debbugs.git] / Debbugs / Collection / Package.pm
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
4 # information.
5 # Copyright 2018 by Don Armstrong <don@donarmstrong.com>.
6
7 package Debbugs::Collection::Package;
8
9 =head1 NAME
10
11 Debbugs::Collection::Package -- Package generation factory
12
13 =head1 SYNOPSIS
14
15
16 =head1 DESCRIPTION
17
18
19
20 =cut
21
22 use Mouse;
23 use strictures 2;
24 use namespace::autoclean;
25 use Debbugs::Common qw(make_list);
26 use Debbugs::OOTypes;
27 use Debbugs::Status qw(get_bug_statuses);
28
29 extends 'Debbugs::Collection';
30
31 has '+members' => (isa => 'ArrayRef[Package]');
32
33 around BUILDARGS => sub {
34     my $orig = shift;
35     my $class = shift;
36
37     my %args;
38     if (@_==1 and ref($_[0]) eq 'HASH') {
39         %args = %{$_[0]};
40     } else {
41         %args = @_;
42     }
43     $args{members} //= [];
44     if (exists $args{packages}) {
45         if (exists $args{schema}) {
46             my $statuses = get_bug_statuses(bug => [make_list($args{bugs})],
47                                             schema => $args{schema},
48                                            );
49             while (my ($bug, $status) = each %{$statuses}) {
50                 push @{$args{members}},
51                     Debbugs::Bug->new(bug=>$bug,
52                                       status=>$status,
53                                       schema=>$args{schema},
54                                       @{$args{constructor_args}//[]},
55                                      );
56             }
57         } else {
58             for my $bug (make_list($args{bugs})) {
59                 push @{$args{members}},
60                     Debbugs::Bug->new(bug => $bug,
61                                       @{$args{constructor_args}//[]},
62                                      );
63             }
64         }
65         delete $args{bugs};
66     }
67     return $class->$orig(%args);
68 };
69
70 sub member_key {
71     return $_[1]->bug;
72 }
73
74 __PACKAGE__->meta->make_immutable;
75
76 1;
77
78 __END__
79 # Local Variables:
80 # indent-tabs-mode: nil
81 # cperl-indent-level: 4
82 # End: