ParseFilter: neuer Filter "trim"
authorSven Schöling <s.schoeling@linet-services.de>
Fri, 1 Apr 2016 14:54:21 +0000 (16:54 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Fri, 1 Apr 2016 15:20:39 +0000 (17:20 +0200)
Ausserdem autotrim bei substr, head und tail Filtern

SL/Controller/Helper/ParseFilter.pm
t/controllers/helpers/parse_filter.t

index 2ff9798..c642abf 100644 (file)
@@ -8,6 +8,7 @@ our @EXPORT = qw(parse_filter);
 use DateTime;
 use SL::Helper::DateTime;
 use List::MoreUtils qw(uniq);
+use SL::Util qw(trim);
 use SL::MoreCommon qw(listify);
 use Data::Dumper;
 use Text::ParseWords;
@@ -24,9 +25,10 @@ my %filters = (
   date    => sub { DateTime->from_lxoffice($_[0]) },
   number  => sub { $::form->parse_amount(\%::myconfig, $_[0]) },
   percent => sub { $::form->parse_amount(\%::myconfig, $_[0]) / 100 },
-  head    => sub { $_[0] . '%' },
-  tail    => sub { '%' . $_[0] },
-  substr  => sub { '%' . $_[0] . '%' },
+  head    => sub { trim($_[0]) . '%' },
+  tail    => sub { '%' . trim($_[0]) },
+  substr  => sub { '%' . trim($_[0]) . '%' },
+  trim    => sub { trim($_[0]) },
 );
 
 my %methods = (
@@ -432,22 +434,22 @@ Pasres the input string with C<< Form->parse_amount >>
 
 Parses the input string with C<< Form->parse_amount / 100 >>
 
+=item trim
+
+Removes whitespace characters (to be precice, characters with the \p{WSpace}
+property from beginning and end of the value.
+
 =item head
 
-Adds "%" at the end of the string.
+Adds "%" at the end of the string and applies C<trim>.
 
 =item tail
 
-Adds "%" at the end of the string.
+Adds "%" at the end of the string and applies C<trim>.
 
 =item substr
 
-Adds "% .. %" around the search string.
-
-=item eq_ignore_empty
-
-Ignores this item if it's empty. Otherwise compares it with the
-standard SQL C<=> operator.
+Adds "% .. %" around the search string and applies C<trim>.
 
 =back
 
@@ -472,6 +474,11 @@ be completely removed from the query. Otherwise a falsish filter value
 will match for C<NULL> and C<FALSE>; trueish values will only match
 C<TRUE>.
 
+=item eq_ignore_empty
+
+Ignores this item if it's empty. Otherwise compares it with the
+standard SQL C<=> operator.
+
 =back
 
 =head1 BUGS AND CAVEATS
index 2c10d03..0d3db7f 100644 (file)
@@ -1,6 +1,6 @@
 use lib 't';
 
-use Test::More tests => 38;
+use Test::More tests => 41;
 use Test::Deep;
 use Data::Dumper;
 
@@ -420,3 +420,21 @@ test {
   with_objects => [ 'part' ],
 }, 'complex methods modifying the key';
 
+
+test {
+  'customer:substr::ilike' => ' Meyer'
+}, {
+  query => [ customer => { ilike => '%Meyer%' } ]
+}, 'auto trim 1';
+
+test {
+  'customer:head::ilike' => ' Meyer '
+}, {
+  query => [ customer => { ilike => 'Meyer%' } ]
+}, 'auto trim 2';
+
+test {
+  'customer:tail::ilike' => "\nMeyer\x{a0}"
+}, {
+  query => [ customer => { ilike => '%Meyer' } ]
+}, 'auto trim 2';