From 2e8eff199aeb03c5a4a1e8de517197070bb209d8 Mon Sep 17 00:00:00 2001
From: Don Armstrong <don@donarmstrong.com>
Date: Fri, 8 Jun 2018 13:31:07 -0700
Subject: [PATCH] use BUILD to handle correspondent argument; add CARP_TRACE

---
 Debbugs/Collection/Correspondent.pm | 48 +++++++++--------------------
 Debbugs/Correspondent.pm            |  8 +++++
 2 files changed, 22 insertions(+), 34 deletions(-)

diff --git a/Debbugs/Collection/Correspondent.pm b/Debbugs/Collection/Correspondent.pm
index 76a386f5..43ac8c09 100644
--- a/Debbugs/Collection/Correspondent.pm
+++ b/Debbugs/Collection/Correspondent.pm
@@ -32,45 +32,26 @@ extends 'Debbugs::Collection';
 
 has '+members' => (isa => 'ArrayRef[Debbugs::Correspondent]');
 
-around BUILDARGS => sub {
-    my $orig = shift;
-    my $class = shift;
-
-    my %args;
-    if (@_==1 and ref($_[0]) eq 'HASH') {
-        %args = %{$_[0]};
-    } else {
-        %args = @_;
-    }
-    $args{members} //= [];
-    if (exists $args{correspondent}) {
-        push @{$args{members}},
-            _member_constructor(correspondent => $args{correspondent},
-                                hash_slice(%args,qw(schema constructor_args)),
-                               );
-        delete $args{bugs};
+sub BUILD {
+    my $self = shift;
+    my $args = shift;
+    if (exists $args->{correspondent}) {
+        $self->
+            add($self->_member_constructor(correspondent =>
+                                           $args->{correspondent}));
     }
-    return $class->$orig(%args);
-};
+}
+
 
 sub _member_constructor {
     # handle being called $self->_member_constructor;
-    my $self;
-    if ((@_ % 2) == 1) {
-        $self = shift;
-    }
+    my $self = shift;
     my %args = @_;
     my @return;
-    my $schema;
-    if (exists $args{schema}) {
-        $schema = $args{schema};
-    } elsif (defined $self and $self->has_schema) {
-        $schema = $self->schema;
-    }
     for my $corr (make_list($args{correspondent})) {
 	push @return,
 	    Debbugs::Correspondent->new(name => $corr,
-					defined $schema?(schema => $schema):(),
+					$self->schema_argument,
 				       );
     }
     return @return;
@@ -80,10 +61,9 @@ around add_by_key => sub {
     my $orig = shift;
     my $self = shift;
     my @members =
-        _member_constructor(correspondent => [@_],
-                            $self->has_schema?(schema => $self->schema):(),
-                            constructor_args => $self->constructor_args,
-                           );
+        $self->_member_constructor(correspondent => [@_],
+				   $self->schema_argument,
+				  );
     return $self->$orig(@members);
 };
 
diff --git a/Debbugs/Correspondent.pm b/Debbugs/Correspondent.pm
index bb075047..00443479 100644
--- a/Debbugs/Correspondent.pm
+++ b/Debbugs/Correspondent.pm
@@ -80,6 +80,14 @@ sub submitter_url {
     return $config{web_domain}.'/submitter:'.$self->email;
 }
 
+sub CARP_TRACE {
+    my $self = shift;
+    return 'Debbugs::Correspondent={name='.$self->name.'}';
+}
+
+
+__PACKAGE__->meta->make_immutable;
+
 no Mouse;
 1;
 
-- 
2.39.5