File Coverage

blib/lib/Catmandu/Fix/flatten.pm
Criterion Covered Total %
statement 25 25 100.0
branch 2 2 100.0
condition n/a
subroutine 8 8 100.0
pod n/a
total 35 35 100.0


line stmt bran cond sub pod time code
1             package Catmandu::Fix::flatten;
2              
3 1     1   103924 use Catmandu::Sane;
  1         3  
  1         7  
4              
5             our $VERSION = '1.2020';
6              
7 1     1   8 use Moo;
  1         2  
  1         5  
8 1     1   790 use Catmandu::Util::Path qw(as_path);
  1         3  
  1         56  
9 1     1   7 use Catmandu::Util qw(is_array_ref);
  1         2  
  1         42  
10 1     1   6 use namespace::clean;
  1         2  
  1         3  
11 1     1   832 use Catmandu::Fix::Has;
  1         3  
  1         6  
12              
13             has path => (fix_arg => 1);
14              
15             with 'Catmandu::Fix::Builder';
16              
17             sub _build_fixer {
18 1     1   13 my ($self) = @_;
19             as_path($self->path)->updater(
20             if_array_ref => sub {
21 1     1   3 my $data = $_[0];
22 10 100       26 $data = [map {is_array_ref($_) ? @$_ : $_} @$data]
23 1         3 while grep {is_array_ref($_)} @$data;
  17         42  
24 1         21 $data;
25             }
26 1         18 );
27             }
28              
29             1;
30              
31             __END__
32              
33             =pod
34              
35             =head1 NAME
36              
37             Catmandu::Fix::flatten - flatten a nested array field
38              
39             =head1 SYNOPSIS
40              
41             # {deep => [1, [2, 3], 4, [5, [6, 7]]]}
42             flatten(deep)
43             # {deep => [1, 2, 3, 4, 5, 6, 7]}
44              
45             =head1 SEE ALSO
46              
47             L<Catmandu::Fix>
48              
49             =cut