File Coverage

blib/lib/CPAN/Changes/Group.pm
Criterion Covered Total %
statement 37 42 88.1
branch 3 6 50.0
condition 0 4 0.0
subroutine 10 11 90.9
pod 5 5 100.0
total 55 68 80.8


line stmt bran cond sub pod time code
1             package CPAN::Changes::Group;
2 17     17   100959 use strict;
  17         37  
  17         726  
3 17     17   85 use warnings;
  17         62  
  17         1889  
4              
5             our $VERSION = '0.500005';
6             $VERSION =~ tr/_//d;
7              
8 17     17   564 use Sub::Quote qw(qsub);
  17         6012  
  17         1349  
9 17     17   572 use CPAN::Changes::Entry;
  17         44  
  17         728  
10              
11 17     17   189 use Moo;
  17         36  
  17         129  
12              
13             has _entry => (
14             is => 'rw',
15             handles => {
16             is_empty => 'has_entries',
17             add_changes => 'add_entry',
18             },
19             lazy => 1,
20             default => qsub q{ CPAN::Changes::Entry->new(text => '') },
21             predicate => 1,
22             );
23              
24             sub name {
25 1     1 1 994 my $self = shift;
26 1         23 my $entry = $self->_entry;
27 1 50       15 return $entry->can('text') ? $entry->text : '';
28             }
29              
30             sub _maybe_entry {
31 2     2   5 my $self = shift;
32 2 50       13 if ($self->can('changes') == \&changes) {
33 2         50 return $self->_entry;
34             }
35             else {
36 0         0 return CPAN::Changes::Entry->new(
37             text => $self->name,
38             entries => $self->changes,
39             );
40             }
41             }
42              
43             around BUILDARGS => sub {
44             my ($orig, $self, @args) = @_;
45             my $args = $self->$orig(@args);
46             if (!$args->{_entry}) {
47             $args->{_entry} = CPAN::Changes::Entry->new({
48             text => $args->{name} || '',
49             entries => $args->{changes} || [],
50             });
51             }
52             $args;
53             };
54              
55             sub changes {
56 35     35 1 560 my ($self) = @_;
57 35 50       152 return []
58             unless $self->_has_entry;
59 35         67 [ map { $_->text } @{ $self->_entry->entries } ];
  36         1576  
  35         783  
60             }
61              
62             sub set_changes {
63 1     1 1 27 my ($self, @changes) = @_;
64 1         5 $self->clear_changes;
65 1         47 my $entry = $self->_entry;
66 1         8 for my $change (@changes) {
67 2         7 $entry->add_entry($change);
68             }
69 1         4 return;
70             }
71              
72             sub clear_changes {
73 1     1 1 2 my ($self) = @_;
74 1         26 my $entry = $self->_entry;
75 1         9 @{$entry->entries} = ();
  1         24  
76 1         9 $self->changes;
77             }
78              
79             sub serialize {
80 0     0 1   my ($self, %args) = @_;
81 0   0       $args{indents} ||= [' ', ' '];
82 0   0       $args{styles} ||= ['[]', '-'];
83 0           $self->_maybe_entry->serialize(%args);
84             }
85              
86             1;
87             __END__