File Coverage

blib/lib/App/RecordStream/Aggregator.pm
Criterion Covered Total %
statement 50 50 100.0
branch 4 4 100.0
condition n/a
subroutine 10 10 100.0
pod 0 5 0.0
total 64 69 92.7


line stmt bran cond sub pod time code
1             package App::RecordStream::Aggregator;
2              
3             our $VERSION = "4.0.24";
4              
5 27     27   111280 use strict;
  27         58  
  27         732  
6 27     27   145 use warnings;
  27         72  
  27         725  
7              
8 27     27   4307 use App::RecordStream::BaseRegistry;
  27         70  
  27         703  
9 27     27   175 use App::RecordStream::Site;
  27         62  
  27         622  
10              
11 27     27   142 use base ('App::RecordStream::BaseRegistry');
  27         66  
  27         11763  
12              
13             sub make_aggregators
14             {
15 18     18 0 53247 my $registry_class = shift;
16              
17 18         42 my %ret;
18              
19 18         64 for my $input (@_)
20             {
21 22         49 my $spec = $input;
22 22         48 my $name;
23              
24 22 100       100 if($spec =~ /^(.*)=(.*)$/)
25             {
26 3         10 $name = $1;
27 3         7 $spec = $2;
28             }
29              
30 22 100       70 if(!defined($name))
31             {
32 19         68 my @spec = split(/,/, $spec);
33 19         56 $name = join("_", map { my $n = $_; $n =~ s!/!_!; $n } @spec);
  23         52  
  23         193  
  23         107  
34             }
35              
36 22         130 $ret{$name} = $registry_class->parse_single_nameless_implementation($spec);
37             }
38              
39 18         67 return \%ret;
40             }
41              
42             sub map_initial
43             {
44 71     71 0 171 my ($aggrs) = @_;
45              
46 71         155 my %ret;
47 71         216 for my $name (keys(%$aggrs))
48             {
49 87         340 $ret{$name} = $aggrs->{$name}->initial();
50             }
51              
52 71         569 return \%ret;
53             }
54              
55             sub map_combine
56             {
57 149     149 0 346 my ($aggrs, $cookies, $record) = @_;
58              
59 149         241 my %ret;
60 149         415 for my $name (keys(%$aggrs))
61             {
62 197         658 $ret{$name} = $aggrs->{$name}->combine($cookies->{$name}, $record);
63             }
64              
65 149         950 return \%ret;
66             }
67              
68             sub map_squish
69             {
70 74     74 0 182 my ($aggrs, $cookies) = @_;
71              
72 74         293 my $return_record = App::RecordStream::Record->new();
73 74         199 for my $name (keys(%$aggrs))
74             {
75 90         190 my $aggregator = $aggrs->{$name};
76 90         313 my $value = $aggregator->squish($cookies->{$name});
77 90         169 ${$return_record->guess_key_from_spec($name)} = $value;
  90         254  
78             }
79              
80 74         419 return $return_record;
81             }
82              
83             sub typename
84             {
85 19     19 0 91 return "aggregator";
86             }
87              
88             1;