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::Correspondent;
11 Debbugs::Collection::Correspondent -- 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 use Debbugs::Correspondent;
31 extends 'Debbugs::Collection';
33 has '+members' => (isa => 'ArrayRef[Debbugs::Correspondent]');
35 around BUILDARGS => sub {
40 if (@_==1 and ref($_[0]) eq 'HASH') {
45 $args{members} //= [];
46 if (exists $args{correspondent}) {
47 push @{$args{members}},
48 _member_constructor(correspondent => $args{correspondent},
49 hash_slice(%args,qw(schema constructor_args)),
53 return $class->$orig(%args);
56 sub _member_constructor {
57 # handle being called $self->_member_constructor;
65 if (exists $args{schema}) {
66 $schema = $args{schema};
67 } elsif (defined $self and $self->has_schema) {
68 $schema = $self->schema;
70 for my $corr (make_list($args{correspondent})) {
72 Debbugs::Correspondent->new(name => $corr,
73 defined $schema?(schema => $schema):(),
79 around add_by_key => sub {
83 _member_constructor(correspondent => [@_],
84 $self->has_schema?(schema => $self->schema):(),
85 constructor_args => $self->constructor_args,
87 return $self->$orig(@members);
95 __PACKAGE__->meta->make_immutable;
101 # indent-tabs-mode: nil
102 # cperl-indent-level: 4