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 93     93   180173 use Moo::Role;
  93         154  
  93         516  
4              
5             sub munge_field_attr {
6 643     643 0 745 my $field_attr = shift;
7              
8             # allow using 'inactive => 1' in a field definition
9 643 100       1652 if ( exists $field_attr->{inactive} ) {
10 5         8 my $inactive = delete $field_attr->{inactive};
11 5 50       15 $field_attr->{active} = $inactive ? 0 : 1;
12             }
13 643 100       1722 if ( grep { $_ =~ /ra\./ } keys %$field_attr ) {
  5210         5186  
14 11         54 munge_field_attr_ra($field_attr);
15             }
16 643 100       1434 if ( my @keys = grep { $_ =~ /msg\./ } keys %$field_attr ) {
  5204         5030  
17 1         67 foreach my $key ( @keys ) {
18 1         3 my $value = delete $field_attr->{$key};
19 1         3 $key =~ s/msg\.//;
20 1         4 $field_attr->{messages}{$key} = $value;
21             }
22             }
23 643 100       1300 if ( my @keys = grep { $_ =~ /meth\./ } keys %$field_attr ) {
  5204         4720  
24 2         5 foreach my $key ( @keys ) {
25 3         5 my $value = delete $field_attr->{$key};
26 3         7 $key =~ s/meth\.//;
27 3         7 $field_attr->{methods}{$key} = $value;
28             }
29             }
30 643         1415 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 14 my $args = shift;
43              
44 11         20 my $render_args = $args->{render_args};
45 11         18 my $ra = delete $args->{ra};
46 11 50 33     47 if ( $render_args && $ra ) {
47 0         0 $render_args = merge($render_args, $ra);
48             }
49             else {
50 11   50     99 $render_args = $render_args || $ra || {};
51             }
52 11         33 my @ra_keys = grep { $_ =~ /ra\./ } keys %$args;
  111         117  
53 11         32 foreach my $key ( @ra_keys ) {
54 17         54 my @seg = split('\.', $key);
55 17         21 shift @seg;
56 17   66     65 my $new_key = $shortcuts->{$seg[0]} || $seg[0];
57 17 100       38 if ( $seg[1] ) {
58 6         22 $render_args->{$new_key}{$seg[1]} = $args->{$key};
59             }
60             else {
61 11         26 $render_args->{$new_key} = $args->{$key};
62             }
63 17         33 delete $args->{$key};
64             }
65 11         24 $args->{render_args} = $render_args;
66             }
67              
68             sub munge_render_field_attr {
69 61     61 0 74 my $args = shift;
70 61 100       287 if ( my @keys = grep { $_ =~ /^.{2,}\./ } keys %$args ) {
  17         34  
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         3 my $value = delete $args->{$key};
75 1         5 $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.04
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