File Coverage

blib/lib/HTML/TableContent/Table/Row.pm
Criterion Covered Total %
statement 45 48 93.7
branch 2 2 100.0
condition n/a
subroutine 16 17 94.1
pod 9 12 75.0
total 72 79 91.1


line stmt bran cond sub pod time code
1             package HTML::TableContent::Table::Row;
2              
3 20     20   115 use Moo;
  20         40  
  20         103  
4              
5             our $VERSION = '0.18';
6              
7 20     20   5398 use HTML::TableContent::Table::Header;
  20         42  
  20         341  
8 20     20   85 use HTML::TableContent::Table::Row::Cell;
  20         37  
  20         12101  
9              
10             extends 'HTML::TableContent::Element';
11              
12             has cells => (
13             is => 'rw',
14             lazy => 1,
15             default => sub { [] },
16             );
17              
18             has header => (
19             is => 'rw',
20             lazy => 1,
21             );
22              
23             has '+html_tag' => (
24             default => 'tr',
25             );
26              
27             around raw => sub {
28             my ( $orig, $self ) = ( shift, shift );
29              
30             my $row = $self->$orig(@_);
31              
32             my @cells = map { $_->raw } $self->all_cells;
33             $row->{cells} = \@cells;
34            
35             return $row;
36             };
37              
38             around has_nested => sub {
39             my ( $orig, $self ) = ( shift, shift );
40              
41             my $nested = $self->$orig(@_);
42              
43             foreach my $cell ( $self->all_cells ) {
44             if ( $cell->has_nested ) {
45             $nested = 1;
46             }
47             }
48              
49             return $nested;
50             };
51              
52             sub hash {
53 43     43 0 2806 my $hash = { };
54 43         110 map { $hash->{$_->header->text} = $_->text } $_[0]->all_cells;
  117         524  
55 43         119 return $hash;
56             }
57              
58             sub array {
59 47     47 0 163 my @row = map { $_->text } $_[0]->all_cells;
  129         566  
60 47         195 return @row;
61             }
62              
63             sub add_header {
64 0     0 0 0 my $header = HTML::TableContent::Table::Header->new($_[1]);
65 0         0 $_[0]->header($header);
66 0         0 return $header;
67             }
68              
69             sub add_cell {
70 5283     5283 1 84833 my $cell = HTML::TableContent::Table::Row::Cell->new($_[1]);
71 5283         32714 push @{ $_[0]->cells }, $cell;
  5283         70211  
72 5283         28131 return $cell;
73             }
74              
75 6254     6254 1 62493 sub cell_count { return scalar @{ $_[0]->cells }; }
  6254         82164  
76              
77 725     725 1 1169 sub all_cells { return @{ $_[0]->cells }; }
  725         10738  
78              
79 320     320 1 12658 sub get_cell { return $_[0]->cells->[ $_[1] ]; }
80              
81 147     147 1 27924 sub get_first_cell { return $_[0]->get_cell(0); }
82              
83 122     122 1 18590 sub get_last_cell { return $_[0]->get_cell( $_[0]->cell_count - 1 ); }
84              
85 64     64 1 595 sub clear_cell { return splice @{ $_[0]->cells }, $_[1], 1; }
  64         802  
86              
87 1     1 1 491 sub clear_first_cell { return shift @{ $_[0]->cells }; }
  1         21  
88              
89 1     1 1 485 sub clear_last_cell { return $_[0]->clear_cell( $_[0]->cell_count - 1 ); }
90              
91             sub _filter_headers {
92 130     130   281 my ( $self, $headers ) = @_;
93 130         247 my $cells = [];
94 130         327 foreach my $cell ( $self->all_cells ) {
95 356         1223 for ( @{$headers} ) {
  356         597  
96 686 100       1795 if ( $cell->header->text eq $_->text ) {
97 244         383 push @{$cells}, $cell;
  244         570  
98             }
99             }
100             }
101 130         1883 return $self->cells($cells);
102             }
103              
104             sub _render_element {
105 147     147   359 my @cells = map { $_->render } $_[0]->all_cells;
  426         1937  
106 147         562 my $cell = sprintf '%s' x @cells, @cells;
107 147         411 return $cell;
108             };
109              
110             __PACKAGE__->meta->make_immutable;
111              
112             1;
113              
114             __END__