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.23";
4              
5 27     27   44140 use strict;
  27         57  
  27         907  
6 27     27   122 use warnings;
  27         64  
  27         592  
7              
8 27     27   5254 use App::RecordStream::BaseRegistry;
  27         68  
  27         624  
9 27     27   167 use App::RecordStream::Site;
  27         65  
  27         593  
10              
11 27     27   138 use base ('App::RecordStream::BaseRegistry');
  27         60  
  27         10497  
12              
13             sub make_aggregators
14             {
15 18     18 0 48169 my $registry_class = shift;
16              
17 18         41 my %ret;
18              
19 18         51 for my $input (@_)
20             {
21 22         53 my $spec = $input;
22 22         37 my $name;
23              
24 22 100       92 if($spec =~ /^(.*)=(.*)$/)
25             {
26 3         8 $name = $1;
27 3         6 $spec = $2;
28             }
29              
30 22 100       67 if(!defined($name))
31             {
32 19         80 my @spec = split(/,/, $spec);
33 19         53 $name = join("_", map { my $n = $_; $n =~ s!/!_!; $n } @spec);
  23         40  
  23         55  
  23         81  
34             }
35              
36 22         123 $ret{$name} = $registry_class->parse_single_nameless_implementation($spec);
37             }
38              
39 18         59 return \%ret;
40             }
41              
42             sub map_initial
43             {
44 71     71 0 134 my ($aggrs) = @_;
45              
46 71         115 my %ret;
47 71         168 for my $name (keys(%$aggrs))
48             {
49 87         302 $ret{$name} = $aggrs->{$name}->initial();
50             }
51              
52 71         655 return \%ret;
53             }
54              
55             sub map_combine
56             {
57 149     149 0 295 my ($aggrs, $cookies, $record) = @_;
58              
59 149         239 my %ret;
60 149         310 for my $name (keys(%$aggrs))
61             {
62 197         576 $ret{$name} = $aggrs->{$name}->combine($cookies->{$name}, $record);
63             }
64              
65 149         408 return \%ret;
66             }
67              
68             sub map_squish
69             {
70 74     74 0 154 my ($aggrs, $cookies) = @_;
71              
72 74         234 my $return_record = App::RecordStream::Record->new();
73 74         165 for my $name (keys(%$aggrs))
74             {
75 90         157 my $aggregator = $aggrs->{$name};
76 90         300 my $value = $aggregator->squish($cookies->{$name});
77 90         144 ${$return_record->guess_key_from_spec($name)} = $value;
  90         224  
78             }
79              
80 74         351 return $return_record;
81             }
82              
83             sub typename
84             {
85 19     19 0 51 return "aggregator";
86             }
87              
88             1;