File Coverage

blib/lib/Catmandu/Fix/expand.pm
Criterion Covered Total %
statement 24 24 100.0
branch 2 2 100.0
condition n/a
subroutine 6 6 100.0
pod 0 1 0.0
total 32 33 96.9


line stmt bran cond sub pod time code
1              
2             use Catmandu::Sane;
3 2     2   84689  
  2         6  
  2         16  
4             our $VERSION = '1.2018';
5              
6             use Moo;
7 2     2   13 use namespace::clean;
  2         4  
  2         12  
8 2     2   693 use Catmandu::Expander ();
  2         3  
  2         12  
9 2     2   974 use Catmandu::Fix::Has;
  2         5  
  2         34  
10 2     2   320  
  2         6  
  2         14  
11             with 'Catmandu::Fix::Inlineable';
12              
13             has sep => (fix_opt => 1, default => sub {undef});
14              
15             my ($self, $data) = @_;
16              
17 4     4 0 23 if (defined(my $char = $self->sep)) {
18             my $new_ref = {};
19 4 100       43 for my $key (keys %$data) {
20 1         2 my $val = $data->{$key};
21 1         4 $key =~ s{$char}{\.}g;
22 2         4 $new_ref->{$key} = $val;
23 2         14 }
24 2         5  
25             $data = $new_ref;
26             }
27 1         2  
28             Catmandu::Expander->expand_hash($data);
29             }
30 4         28  
31             1;
32              
33              
34             =pod
35              
36             =head1 NAME
37              
38             Catmandu::Fix::expand - convert a flat hash into nested data using the TT2 dot convention
39              
40             =head1 SYNOPSIS
41              
42             # collapse the data into a flat hash
43             collapse()
44              
45             # expand again to the nested original
46             expand()
47              
48             # optionally provide a path separator
49             collapse(sep: '/')
50             expand(sep: '/')
51              
52             =head1 SEE ALSO
53              
54             L<Catmandu::Fix>
55              
56             =cut