1011de809c392f0e603e57692ea630b61c4edaca
[scpubgit/Q-Branch.git] / lib / SQL / Abstract / Formatter.pm
1 package SQL::Abstract::Formatter;
2
3 require SQL::Abstract::Parts; # it loads us too, don't cross the streams
4
5 use Moo;
6
7 has indent_by => (is => 'ro', default => '  ');
8 has max_width => (is => 'ro', default => 78);
9
10 sub _join {
11   shift;
12   SQL::Abstract::Parts::stringify(\@_);
13 }
14
15 sub format {
16   my ($self, $join, @parts) = @_;
17   my $sql = $self->_join($join, @parts);
18   return $sql unless length($sql) > $self->max_width;
19   local $self->{max_width} = $self->{max_width} - length($self->indent_by);
20   return join("\n", map ref() ? $self->format(@$_) : $_, @parts);
21 }
22
23 1;