File Coverage

blib/lib/JPList/Controls/Filter.pm
Criterion Covered Total %
statement 33 71 46.4
branch 8 22 36.3
condition 6 27 22.2
subroutine 4 7 57.1
pod 6 6 100.0
total 57 133 42.8


line stmt bran cond sub pod time code
1             # ========================================================================== #
2             # lib/JPList/Controls/Filter.pm - JPList Filter controls
3             # Copyright (C) 2017 Exceleron Software, LLC
4             # ========================================================================== #
5              
6             package JPList::Controls::Filter;
7              
8 2     2   2104 use Moose::Role;
  2         13475  
  2         10  
9              
10             # ========================================================================== #
11              
12             =head1 NAME
13              
14             JPList::Controls::Filter - JPList Filter controls
15              
16             =head1 VERSION
17              
18             Version 0.05
19              
20             =cut
21              
22             our $VERSION = '0.05';
23              
24             =head1 SYNOPSIS
25              
26             with 'JPList::Controls::Filter'
27              
28             =head1 DESCRIPTION
29              
30             The Filter module allows you get the values filter controls
31              
32             =head2 METHODS
33              
34             =over 4
35              
36             =cut
37              
38             # ========================================================================== #
39              
40             =item C<textbox>
41              
42             Params : filter_vals
43              
44             {
45             'type' => 'textbox',
46             'action' => 'filter',
47             'inStorage' => $VAR1->[0]{'inStorage'},
48             'data' => {
49             'filterType' => 'TextFilter',
50             'mode' => 'contains',
51             'value' => '',
52             'ignore' => '[~!@#$%^&*()+=`\'"/\\_]+',
53             'path' => '.UserName'
54             },
55             'isAnimateToTop' => $VAR1->[0]{'isAnimateToTop'},
56             'initialIndex' => 1,
57             'inDeepLinking' => $VAR1->[0]{'inStorage'},
58             'name' => 'username-filter',
59             'inAnimation' => $VAR1->[0]{'inStorage'}
60             }
61              
62             Returns: Returns the column and value for filter textbox
63              
64             Desc : Returns the column and value for filter textbox
65              
66             =cut
67              
68             sub textbox
69             {
70 19     19 1 62 my ($self, $filter_vals) = @_;
71              
72 19         48 my $data = $filter_vals->{'data'};
73 19         37 my $result;
74              
75 19 100 33     230 if (exists($data->{'path'}) && exists($data->{'value'}) && $data->{'value'}) {
      66        
76              
77 1         6 $result->{'column'} = $data->{'path'};
78 1         8 $result->{'column'} =~ s/\.//;
79 1         5 $result->{'value'} = $data->{'value'};
80 1 50       5 if ($data->{'mode'} ne "integer") {
81 1         5 $result->{'type'} = 'like';
82             }
83             }
84              
85 19         75 return $result;
86             }
87              
88             # ========================================================================== #
89              
90             =item C<filterdropdown>
91              
92             Params : filter_vals
93              
94             {
95             'type' => 'filter-drop-down',
96             'data' => {
97             'filterType' => 'ColumnName',
98             'path' => 'default'
99             },
100             'action' => 'filter',
101             'isAnimateToTop' => $VAR1->[0]{'isAnimateToTop'},
102             'initialIndex' => 5,
103             'inDeepLinking' => $VAR1->[0]{'inDeepLinking'},
104             'inAnimation' => $VAR1->[0]{'inDeepLinking'},
105             'inStorage' => $VAR1->[0]{'inDeepLinking'},
106             'name' => 'category-dropdown-filter'
107             }
108              
109             Returns: Returns the column and value for filter dropdown
110              
111             Desc : Returns the column and value for filter dropdown
112              
113             =cut
114              
115             sub filterdropdown
116             {
117 7     7 1 89 my ($self, $filter_vals) = @_;
118              
119 7         26 my $data = $filter_vals->{'data'};
120 7         19 my $result;
121              
122 7 100 66     59 if (exists($data->{'path'}) && ($data->{'path'} ne 'default')) {
123 2         9 my $column = $filter_vals->{'name'};
124              
125 2         8 $result->{'column'} = $column;
126 2         8 $result->{'value'} = $data->{'path'};
127 2         13 $result->{'value'} =~ s/\.//;
128 2         35 $result->{'value'} =~ s/\.$column//;
129              
130             }
131              
132 7         29 return $result;
133             }
134              
135             # ========================================================================== #
136              
137             =item C<filterselect>
138              
139             Params : filter_vals
140              
141             {
142             'isAnimateToTop' => $VAR1->[0]{'isAnimateToTop'},
143             'data' => {
144             'path' => '.Electric',
145             'filterType' => 'path'
146             },
147             'inDeepLinking' => $VAR1->[0]{'inDeepLinking'},
148             'action' => 'filter',
149             'name' => 'ServiceType',
150             'type' => 'filter-select',
151             'inStorage' => $VAR1->[0]{'inDeepLinking'},
152             'inAnimation' => $VAR1->[0]{'inDeepLinking'}
153             }
154              
155             Returns: Returns the column and value for filter select
156              
157             Desc : Returns the column and value for filter select
158              
159             =cut
160              
161             sub filterselect
162             {
163 0     0 1 0 my ($self, $filter_vals) = @_;
164              
165 0         0 my $data = $filter_vals->{'data'};
166 0         0 my $result;
167              
168 0 0 0     0 if (exists($data->{'path'}) && ($data->{'path'} ne 'default')) {
169 0         0 my $column = $filter_vals->{'name'};
170              
171 0         0 $result->{'column'} = $column;
172 0         0 $result->{'value'} = $data->{'path'};
173 0         0 $result->{'value'} =~ s/\.$column//;
174              
175             }
176              
177 0         0 return $result;
178             }
179              
180             # ========================================================================== #
181              
182             =item C<filterdaterange>
183              
184             Params : filter_vals
185              
186             {
187             'data' => {
188             'path' => '.FromDate',
189             'next_day' => 14,
190             'prev_year' => 2017,
191             'next_month' => 5,
192             'next_year' => 2017,
193             'format' => '{month}/{day}/{year}',
194             'filterType' => 'dateRange',
195             'prev_month' => 5,
196             'prev_day' => 6
197             },
198             'inDeepLinking' => $VAR1->[0]{'inAnimation'},
199             'action' => 'filter',
200             'inStorage' => $VAR1->[0]{'inAnimation'},
201             'name' => 'FromDate',
202             'type' => 'date-picker-range-filter',
203             'isAnimateToTop' => $VAR1->[0]{'isAnimateToTop'},
204             'inAnimation' => $VAR1->[0]{'inAnimation'}
205             }
206              
207             Returns: Returns the column and value for filter daterange
208              
209             Desc : Returns the column and value for filter daterange
210              
211             =cut
212              
213             sub filterdaterange
214             {
215 0     0 1 0 my ($self, $filter_vals) = @_;
216              
217 0         0 my $result;
218              
219 0 0 0     0 if (exists($filter_vals->{'data'}) && $filter_vals->{'data'}{'prev_year'} && $filter_vals->{'data'}{'next_year'}) {
      0        
220 0         0 my $data = $filter_vals->{'data'};
221 0         0 my ($from_date, $to_date);
222              
223             $from_date =
224             $data->{'prev_year'} . "-"
225             . sprintf("%02d", ($data->{'prev_month'} + 1)) . "-"
226 0         0 . sprintf("%02d", $data->{'prev_day'});
227             $to_date =
228             $data->{'next_year'} . "-"
229             . sprintf("%02d", ($data->{'next_month'} + 1)) . "-"
230 0         0 . sprintf("%02d", $data->{'next_day'});
231              
232 0 0 0     0 if ($from_date =~ /\d{4}-\d{2}-\d{2}/ && $to_date =~ /\d{4}-\d{2}-\d{2}/) {
233 0         0 $result->{'column'} = $filter_vals->{'name'};
234 0         0 $result->{'from_date'} = $from_date;
235 0         0 $result->{'to_date'} = $to_date;
236 0         0 $result->{'type'} = 'between';
237             }
238             }
239              
240 0         0 return $result;
241             }
242              
243             # ========================================================================== #
244              
245             =item C<filterdatepicker>
246              
247             Params : filter_vals
248              
249             {
250             'inDeepLinking' => $VAR1->[0]{'inAnimation'},
251             'inAnimation' => $VAR1->[0]{'inAnimation'},
252             'isAnimateToTop' => $VAR1->[0]{'isAnimateToTop'},
253             'action' => 'filter',
254             'inStorage' => $VAR1->[0]{'inAnimation'},
255             'type' => 'date-picker-filter',
256             'data' => {
257             'year' => 2017,
258             'format' => '{month}/{day}/{year}',
259             'filterType' => 'date',
260             'day' => 10,
261             'path' => '.ReadDate',
262             'month' => 6
263             },
264             'name' => 'ReadDate'
265             }
266              
267             Returns: Returns the column and value for filter daterange
268              
269             Desc : Returns the column and value for filter daterange
270              
271             =cut
272              
273             sub filterdatepicker
274             {
275 0     0 1 0 my ($self, $filter_vals) = @_;
276              
277 0         0 my $result;
278              
279 0 0 0     0 if (exists($filter_vals->{'data'}) && $filter_vals->{'data'}{'year'}) {
280 0         0 my $data = $filter_vals->{'data'};
281 0         0 my ($date);
282              
283 0         0 $date = $data->{'year'} . "-" . sprintf("%02d", ($data->{'month'} + 1)) . "-" . sprintf("%02d", $data->{'day'});
284              
285 0 0       0 if ($date =~ /\d{4}-\d{2}-\d{2}/) {
286 0         0 $result->{'column'} = $filter_vals->{'name'};
287 0         0 $result->{'value'} = $date;
288             }
289             }
290              
291 0         0 return $result;
292             }
293              
294             # ========================================================================== #
295              
296             =item C<checkboxgroup>
297              
298             Params : filter_vals
299              
300             {
301             'name' => 'SourceType',
302             'action' => 'filter',
303             'inStorage' => $VAR1->[0]{'inStorage'},
304             'isAnimateToTop' => $VAR1->[0]{'isAnimateToTop'},
305             'type' => 'checkbox-group-filter',
306             'inAnimation' => $VAR1->[0]{'inStorage'},
307             'data' => {
308             'pathGroup' => [
309             '.Schedule',
310             '.Estimate'
311             ],
312             'filterType' => 'pathGroup'
313             },
314             'inDeepLinking' => $VAR1->[0]{'inStorage'}
315             }
316              
317             Returns: Returns the column and value for filter checkbox group
318              
319             Desc : Returns the column and value for filter checkbox group
320              
321             =cut
322              
323             sub checkboxgroup
324             {
325 14     14 1 46 my ($self, $filter_vals) = @_;
326              
327 14         29 my $result;
328              
329 14 50       53 if (exists($filter_vals->{'data'})) {
330 14         38 my $data = $filter_vals->{'data'};
331              
332 14 50 33     148 if (exists($data->{'pathGroup'}) && ref($data->{'pathGroup'}) eq 'ARRAY') {
333              
334 14         41 my $column = $filter_vals->{'name'};
335 14         33 my $values = $data->{'pathGroup'};
336 14         50 my @real_values = map { my $s = $_; $s =~ s/\.$column//g; $s } @$values;
  0         0  
  0         0  
  0         0  
337              
338 14 50       53 if (scalar @real_values) {
339 0         0 $result->{'column'} = $column;
340 0         0 $result->{'values'} = \@real_values;
341 0         0 $result->{'type'} = 'in';
342             }
343              
344             }
345             }
346              
347 14         51 return $result;
348             }
349              
350             # ========================================================================== #
351              
352             1;
353              
354             __END__
355              
356             =back
357            
358             =head1 AUTHORS
359              
360             Sheeju Alex, <sheeju@exceleron.com>
361              
362             =head1 BUGS
363              
364             https://github.com/sheeju/JPList/issues
365              
366             =head1 SUPPORT
367              
368             You can find documentation for this module with the perldoc command.
369              
370             perldoc JPList
371              
372              
373             You can also look for information at:
374              
375             =over 4
376              
377             =item * RT: CPAN's request tracker (report bugs here)
378              
379             L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=JPList>
380              
381             =item * AnnoCPAN: Annotated CPAN documentation
382              
383             L<http://annocpan.org/dist/JPList>
384              
385             =item * CPAN Ratings
386              
387             L<http://cpanratings.perl.org/d/JPList>
388              
389             =item * Search CPAN
390              
391             L<http://search.cpan.org/dist/JPList/>
392              
393             =back
394              
395             =head1 ACKNOWLEDGEMENTS
396              
397             Development time supported by Exceleron L<www.exceleron.com|http://www.exceleron.com>.
398              
399             =head1 LICENSE AND COPYRIGHT
400              
401             Copyright (C) 2017 Exceleron Software, LLC
402              
403             This program is free software; you can redistribute it and/or modify it
404             under the terms of the the Artistic License (2.0). You may obtain a
405             copy of the full license at:
406              
407             L<http://www.perlfoundation.org/artistic_license_2_0>
408              
409             Any use, modification, and distribution of the Standard or Modified
410             Versions is governed by this Artistic License. By using, modifying or
411             distributing the Package, you accept this license. Do not use, modify,
412             or distribute the Package, if you do not accept this license.
413              
414             If your Modified Version has been derived from a Modified Version made
415             by someone other than you, you are nevertheless required to ensure that
416             your Modified Version complies with the requirements of this license.
417              
418             This license does not grant you the right to use any trademark, service
419             mark, tradename, or logo of the Copyright Holder.
420              
421             This license includes the non-exclusive, worldwide, free-of-charge
422             patent license to make, have made, use, offer to sell, sell, import and
423             otherwise transfer the Package with respect to any patent claims
424             licensable by the Copyright Holder that are necessarily infringed by the
425             Package. If you institute patent litigation (including a cross-claim or
426             counterclaim) against any party alleging that the Package constitutes
427             direct or contributory patent infringement, then this Artistic License
428             to you shall terminate on the date that such litigation is filed.
429              
430             Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER
431             AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
432             THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
433             PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY
434             YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR
435             CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR
436             CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE,
437             EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
438              
439             =cut
440              
441             # vim: ts=4
442             # vim600: fdm=marker fdl=0 fdc=3