7396b9e40144a3d89446b24d37c873a4b36a46ae
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / PerlRenderer / MangleStrings.pm
1 package DBIx::Class::PerlRenderer::MangleStrings;
2
3 use Moo;
4
5 extends 'DBIx::Class::PerlRenderer';
6
7 my %string_ops = map +($_ => 1), qw(eq ne le lt ge gt);
8
9 around _handle_op_type_binop => sub {
10   my ($orig, $self) = (shift, shift);
11   my ($op_name, $dq) = @_;
12   if ($string_ops{$op_name}) {
13     require List::Util;
14     return [
15       'do {',
16         'my ($l, $r) = (',
17           $self->_render($dq->{args}[0]),
18           ',',
19           $self->_render($dq->{args}[1]),
20         ');',
21         'my $len = List::Util::max(length($l), length($r));',
22         'my ($fl, $fr) = map sprintf("%-${len}s", lc($_)), ($l, $r);',
23         '$fl '.$op_name.' $fr',
24       '}',
25     ];
26   }
27   return $self->$orig(@_);
28 };
29
30 1;