File Coverage

blib/lib/Data/MuForm/Common.pm
Criterion Covered Total %
statement 47 51 92.1
branch 15 20 75.0
condition 4 8 50.0
subroutine 4 5 80.0
pod 0 4 0.0
total 70 88 79.5


line stmt bran cond sub pod time code
1             package Data::MuForm::Common;
2             # ABSTRACT: common role
3 92     92   173760 use Moo::Role;
  92         142  
  92         552  
4              
5             sub munge_field_attr {
6 638     638 0 791 my $field_attr = shift;
7              
8             # allow using 'inactive => 1' in a field definition
9 638 100       1634 if ( exists $field_attr->{inactive} ) {
10 5         9 my $inactive = delete $field_attr->{inactive};
11 5 50       15 $field_attr->{active} = $inactive ? 0 : 1;
12             }
13 638 100       1664 if ( grep { $_ =~ /ra\./ } keys %$field_attr ) {
  5169         5052  
14 11         37 munge_field_attr_ra($field_attr);
15             }
16 638 100       1350 if ( my @keys = grep { $_ =~ /msg\./ } keys %$field_attr ) {
  5163         4971  
17 1         2 foreach my $key ( @keys ) {
18 1         53 my $value = delete $field_attr->{$key};
19 1         4 $key =~ s/msg\.//;
20 1         3 $field_attr->{messages}{$key} = $value;
21             }
22             }
23 638 100       1264 if ( my @keys = grep { $_ =~ /meth\./ } keys %$field_attr ) {
  5163         4568  
24 2         4 foreach my $key ( @keys ) {
25 3         6 my $value = delete $field_attr->{$key};
26 3         9 $key =~ s/meth\.//;
27 3         6 $field_attr->{methods}{$key} = $value;
28             }
29             }
30 638         1231 return $field_attr;
31             }
32              
33             my $shortcuts = {
34             ea => 'element_attr',
35             la => 'label_attr',
36             wa => 'wrapper_attr',
37             era => 'error_attr',
38             ewa => 'element_wrapper_attr',
39             };
40              
41             sub munge_field_attr_ra {
42 11     11 0 16 my $args = shift;
43              
44 11         18 my $render_args = $args->{render_args};
45 11         18 my $ra = delete $args->{ra};
46 11 50 33     46 if ( $render_args && $ra ) {
47 0         0 $render_args = merge($render_args, $ra);
48             }
49             else {
50 11   50     80 $render_args = $render_args || $ra || {};
51             }
52 11         33 my @ra_keys = grep { $_ =~ /ra\./ } keys %$args;
  111         106  
53 11         27 foreach my $key ( @ra_keys ) {
54 17         56 my @seg = split('\.', $key);
55 17         19 shift @seg;
56 17   66     53 my $new_key = $shortcuts->{$seg[0]} || $seg[0];
57 17 100       34 if ( $seg[1] ) {
58 6         22 $render_args->{$new_key}{$seg[1]} = $args->{$key};
59             }
60             else {
61 11         23 $render_args->{$new_key} = $args->{$key};
62             }
63 17         37 delete $args->{$key};
64             }
65 11         23 $args->{render_args} = $render_args;
66             }
67              
68             sub munge_render_field_attr {
69 57     57 0 72 my $args = shift;
70 57 100       268 if ( my @keys = grep { $_ =~ /^.{2,}\./ } keys %$args ) {
  17         29  
71 1         2 foreach my $key (@keys) {
72 1         4 my @seg = split('\.', $key );
73 1 50       4 if ( my $new_key = $shortcuts->{$seg[0]} ) {
74 1         2 my $value = delete $args->{$key};
75 1         4 $args->{$new_key}{$seg[1]} = $value;
76             }
77             }
78             }
79             }
80              
81             sub has_flag {
82 0     0 0   my ( $self, $flag_name ) = @_;
83 0 0         return unless $self->can($flag_name);
84 0           return $self->$flag_name;
85             }
86              
87             1;
88              
89             __END__
90              
91             =pod
92              
93             =encoding UTF-8
94              
95             =head1 NAME
96              
97             Data::MuForm::Common - common role
98              
99             =head1 VERSION
100              
101             version 0.03
102              
103             =head1 AUTHOR
104              
105             Gerda Shank
106              
107             =head1 COPYRIGHT AND LICENSE
108              
109             This software is copyright (c) 2017 by Gerda Shank.
110              
111             This is free software; you can redistribute it and/or modify it under
112             the same terms as the Perl 5 programming language system itself.
113              
114             =cut