File Coverage

blib/lib/SyForm/FieldRole/Process.pm
Criterion Covered Total %
statement 53 59 89.8
branch 17 24 70.8
condition 4 6 66.6
subroutine 21 22 95.4
pod 0 17 0.0
total 95 128 74.2


line stmt bran cond sub pod time code
1             package SyForm::FieldRole::Process;
2             BEGIN {
3 6     6   4084 $SyForm::FieldRole::Process::AUTHORITY = 'cpan:GETTY';
4             }
5             # ABSTRACT: Role for processed fields
6             $SyForm::FieldRole::Process::VERSION = '0.103';
7 6     6   43 use Moo::Role;
  6         12  
  6         39  
8 6     6   2736 use Module::Runtime qw( use_module );
  6         14  
  6         46  
9              
10             with qw(
11             SyForm::FieldRole::Default
12             SyForm::FieldRole::Verify
13             SyForm::FieldRole::HTML
14             SyForm::FieldRole::Bootstrap
15             );
16              
17             sub has_value_by_args {
18 38     38 0 78 my ( $self, %args ) = @_;
19 38 100       422 return exists($args{$self->name}) ? 1 : 0;
20             }
21              
22             sub values_args_by_process_args {
23 38     38 0 86 my ( $self, %args ) = @_;
24 38         101 my @roles = $self->values_roles_by_process_args(%args);
25             return (
26 38 100       752 $self->has_value_by_args(%args)
    50          
27             ? ( $self->name, $self->get_value_by_process_args(%args) ) : (),
28             scalar @roles
29             ? ( roles => [ @roles ] ) : (),
30             );
31             }
32              
33             sub values_roles_by_process_args {
34 38     38 0 72 my ( $self, %args ) = @_;
35 38         88 return;
36             }
37              
38             sub get_value_by_process_args {
39 13     13 0 36 my ( $self, %args ) = @_;
40 13         873 return $self->get_value_by_process_arg($args{$self->name});
41             }
42              
43             sub get_value_by_process_arg {
44 13     13 0 33 my ( $self, $arg ) = @_;
45 13         79 return $arg;
46             }
47              
48             has viewfield_roles => (
49             is => 'lazy',
50             );
51              
52             sub _build_viewfield_roles {
53 9     9   85 my ( $self ) = @_;
54 9         28 return [];
55             }
56              
57             has viewfield_class => (
58             is => 'lazy',
59             );
60              
61             sub _build_viewfield_class {
62 9     9   83 my ( $self ) = @_;
63 9         31 return use_module('SyForm::ViewField');
64             }
65              
66             sub viewfields_for_view {
67 13     13 0 33 my ( $self, $view ) = @_;
68 13         17 my @viewfield_roles = @{$self->viewfield_roles};
  13         244  
69 13         64 my %viewfield_args = $self->viewfield_args_by_view($view);
70 13 50       42 if (defined $viewfield_args{roles}) {
71 0         0 push @viewfield_roles, @{delete $viewfield_args{roles}};
  0         0  
72             }
73 13         47 return $self->create_viewfield_for_view($view,%viewfield_args);
74             }
75              
76             sub create_viewfield_for_view {
77 13     13 0 38 my ( $self, $view, %args ) = @_;
78 13 50       35 my @traits = defined $args{roles} ? @{delete $args{roles}} : ();
  0         0  
79 13         244 my $viewfield_class = $self->viewfield_class;
80 13         274 for my $trait (@traits) {
81 0 0       0 $viewfield_class = $viewfield_class->with_traits($trait)
82             unless $viewfield_class->does($trait);
83             }
84 13         249 return $viewfield_class->new({
85             syform => $self->syform,
86             field => $self,
87             view => $view,
88             %args,
89             });
90             }
91              
92             sub viewfield_fields_list_by_view {
93 0     0 0 0 my ( $self, $view ) = @_;
94 0         0 return $self->name, { $self->viewfield_args_by_view($view) };
95             }
96              
97             sub viewfield_args_by_view {
98 13     13 0 23 my ( $self, $view ) = @_;
99             return
100 13 100 66     259 label => $self->label,
    100 66        
101             name => $self->name,
102             $view->has_results && $view->results->values->has_value($self->name)
103             ? ( value => $view->results->values->get_value($self->name) ) : (),
104             $view->has_results && $view->results->has_result($self->name)
105             ? ( result => $view->results->get_result($self->name) ) : ();
106             }
107              
108             sub has_result_by_values {
109 38     38 0 60 my ( $self, $values ) = @_;
110 38 100       105 return $values->has_value($self->name) ? 1 : 0;
111             }
112              
113             sub results_args_by_values {
114 38     38 0 66 my ( $self, $values ) = @_;
115 38         76 my @roles = $self->results_roles_by_values($values);
116             return (
117 38 100       72 $self->has_result_by_values($values)
    50          
118             ? ( $self->name, $self->get_result_by_values($values) ) : (),
119             scalar @roles
120             ? ( roles => [ @roles ] ) : (),
121             );
122             }
123              
124             sub results_roles_by_values {
125 38     38 0 58 my ( $self, $values ) = @_;
126 38         71 return;
127             }
128              
129             sub get_result_by_values {
130 20     20 0 40 my ( $self, $values ) = @_;
131 20         55 return $self->get_result_by_value($values->get_value($self->name));
132             }
133              
134             sub get_result_by_value {
135 20     20 0 39 my ( $self, $value ) = @_;
136 20         75 return $value;
137             }
138              
139             sub view_args_by_results {
140 29     29 0 58 my ( $self, $results ) = @_;
141 29         71 my @roles = $self->view_roles_by_results($results);
142             return (
143             scalar @roles
144 29 50       69 ? ( roles => [ @roles ] ) : (),
145             $self->custom_view_args_by_results,
146             );
147             }
148              
149             sub custom_view_args_by_results {
150 29     29 0 55 my ( $self, $results ) = @_;
151 29         58 return;
152             }
153              
154             sub view_roles_by_results {
155 29     29 0 43 my ( $self, $results ) = @_;
156 29         59 return;
157             }
158              
159             1;
160              
161             __END__
162              
163             =pod
164              
165             =head1 NAME
166              
167             SyForm::FieldRole::Process - Role for processed fields
168              
169             =head1 VERSION
170              
171             version 0.103
172              
173             =head1 AUTHOR
174              
175             Torsten Raudssus <torsten@raudss.us>
176              
177             =head1 COPYRIGHT AND LICENSE
178              
179             This software is copyright (c) 2014 by Torsten Raudssus.
180              
181             This is free software; you can redistribute it and/or modify it under
182             the same terms as the Perl 5 programming language system itself.
183              
184             =cut