From: Don Armstrong <don@donarmstrong.com>
Date: Sun, 30 Jun 2019 22:55:23 +0000 (-0700)
Subject: allow apply to return > 1 object per collection member
X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=cfd7a8f2d3990c8fbc8bb8012d99fdc467c46300;p=debbugs.git

allow apply to return > 1 object per collection member
---

diff --git a/Debbugs/Collection.pm b/Debbugs/Collection.pm
index 350a03f7..6e3d49d9 100644
--- a/Debbugs/Collection.pm
+++ b/Debbugs/Collection.pm
@@ -116,9 +116,15 @@ locally to each member object
 
 Returns the keys of the members of this collection joined
 
-=head2 $collection->apply({$_*2}) $collection->map({$_*2})
+=head2 $collection->apply({$_*2})
 
-Return the list of applying BLOCK to each member
+Return the list of applying BLOCK to each member; each member can return 0 or
+more results
+
+=head2 $collection->map({$_*2})
+
+Returns the list of applying BLOCK to each member; each member should return
+exactly one result
 
 =head2 $collection->sort({$a <=> $b})
 
@@ -137,12 +143,21 @@ has 'members' => (is => 'bare',
 			      count => 'count',
 			      _get_member => 'get',
                               grep => 'grep',
-                              apply => 'apply',
                               map => 'map',
                               sort => 'sort',
 			     },
 		 );
 
+sub apply {
+    my $self = shift;
+    my $block = shift;
+    my @r;
+    for ($self->members) {
+        push @r,$block->();
+    }
+    return @r;
+}
+
 sub members_ref {
     my $self = shift;
     return [$self->members];
diff --git a/Debbugs/Collection/Bug.pm b/Debbugs/Collection/Bug.pm
index 2a9bbe29..63ce8095 100644
--- a/Debbugs/Collection/Bug.pm
+++ b/Debbugs/Collection/Bug.pm
@@ -200,7 +200,7 @@ sub member_key {
 sub load_related_packages_and_versions {
     my $self = shift;
     my @related_packages_and_versions =
-        $self->map(sub {$_->related_packages_and_versions});
+        $self->apply(sub {$_->related_packages_and_versions});
     $self->package_collection->
         add_packages_and_versions(@related_packages_and_versions);
 }