File Coverage

blib/lib/App/RecordStream/Clumper/KeyPerfect.pm
Criterion Covered Total %
statement 38 40 95.0
branch 2 2 100.0
condition n/a
subroutine 9 11 81.8
pod 0 6 0.0
total 49 59 83.0


line stmt bran cond sub pod time code
1             package App::RecordStream::Clumper::KeyPerfect;
2              
3 4     4   27 use strict;
  4         10  
  4         120  
4 4     4   24 use warnings;
  4         10  
  4         111  
5              
6 4     4   1290 use App::RecordStream::Clumper::Key;
  4         12  
  4         118  
7 4     4   1178 use App::RecordStream::DomainLanguage::Registry;
  4         11  
  4         120  
8              
9 4     4   25 use base 'App::RecordStream::Clumper::Key';
  4         7  
  4         1410  
10              
11             sub long_usage
12             {
13 0     0 0 0 return <
14             Usage: keyperfect,
15             Clump records by the value for a key
16             EOF
17             }
18              
19             sub short_usage
20             {
21 0     0 0 0 return "clump records by the value for a key";
22             }
23              
24             sub key_clumper_begin
25             {
26 20     20 0 121 return [[], {}];
27             }
28              
29             sub key_clumper_push_record
30             {
31 99     99 0 221 my $this = shift;
32 99         155 my $cookie = shift;
33 99         205 my $value = shift;
34 99         159 my $record = shift;
35 99         151 my $next = shift;
36              
37 99         818 for my $value ($this->get_values($value))
38             {
39 129         394 my $next_cookie = $cookie->[1]->{$value};
40 129 100       419 if(!defined($next_cookie))
41             {
42 49         335 push @{$cookie->[0]}, $value;
  49         202  
43 49         209 $next_cookie = $cookie->[1]->{$value} = $next->key_clumper_callback_begin_value($value);
44             }
45              
46 129         432 $next->key_clumper_callback_push_record($next_cookie, $record);
47             }
48             }
49              
50             sub get_values
51             {
52 69     69 0 102 my $this = shift;
53 69         104 my $value = shift;
54              
55 69         173 return ($value);
56             }
57              
58             sub key_clumper_end
59             {
60 20     20 0 39 my $this = shift;
61 20         37 my $cookie = shift;
62 20         33 my $next = shift;
63              
64 20         37 for my $value (@{$cookie->[0]})
  20         56  
65             {
66 49         114 my $next_cookie = $cookie->[1]->{$value};
67 49         143 $next->key_clumper_callback_end($next_cookie);
68             }
69             }
70              
71             App::RecordStream::Clumper->register_implementation('keyperfect', __PACKAGE__);
72              
73             App::RecordStream::DomainLanguage::Registry::register_vfn(__PACKAGE__, 'new_from_valuation', 'keyperfect', 'VALUATION');
74             App::RecordStream::DomainLanguage::Registry::register_vfn(__PACKAGE__, 'new_from_valuation', 'key', 'VALUATION');
75              
76             1;