]> git.donarmstrong.com Git - debbugs.git/blob - Debbugs/Collection/Correspondent.pm
switch to compatibility level 12
[debbugs.git] / Debbugs / Collection / Correspondent.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::Correspondent;
8
9 =head1 NAME
10
11 Debbugs::Collection::Correspondent -- Bug 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 hash_slice);
26 use Debbugs::OOTypes;
27 use Debbugs::Status qw(get_bug_statuses);
28
29 use Debbugs::Correspondent;
30
31 extends 'Debbugs::Collection';
32
33 has '+members' => (isa => 'ArrayRef[Debbugs::Correspondent]');
34
35 sub BUILD {
36     my $self = shift;
37     my $args = shift;
38     if (exists $args->{correspondent}) {
39         $self->
40             add($self->_member_constructor(correspondent =>
41                                            $args->{correspondent}));
42     }
43 }
44
45
46 sub _member_constructor {
47     # handle being called $self->_member_constructor;
48     my $self = shift;
49     my %args = @_;
50     my @return;
51     for my $corr (make_list($args{correspondent})) {
52         push @return,
53             Debbugs::Correspondent->new(name => $corr,
54                                         $self->schema_argument,
55                                        );
56     }
57     return @return;
58 }
59
60 around add_by_key => sub {
61     my $orig = shift;
62     my $self = shift;
63     my @members =
64         $self->_member_constructor(correspondent => [@_],
65                                    $self->schema_argument,
66                                   );
67     return $self->$orig(@members);
68 };
69
70 sub member_key {
71     return $_[1]->name;
72 }
73
74
75 __PACKAGE__->meta->make_immutable;
76
77 1;
78
79 __END__
80 # Local Variables:
81 # indent-tabs-mode: nil
82 # cperl-indent-level: 4
83 # End: