break out base class construction
[dbsrgits/SQL-Abstract.git] / lib / SQL / Abstract.pm
index 4b9eaa1..3a2bead 100644 (file)
@@ -5,6 +5,7 @@ use List::Util ();
 use Scalar::Util ();
 use Module::Runtime qw(use_module);
 use Moo;
+use namespace::clean;
 
 our $VERSION  = '1.72';
 
@@ -102,14 +103,27 @@ sub _build_converter_class {
 }
 
 has renderer_class => (
-  is => 'rw', lazy => 1, builder => '_build_renderer_class',
+  is => 'rw', lazy => 1, clearer => 1, builder => 1,
   trigger => sub { shift->clear_renderer },
 );
 
+after clear_renderer_class => sub { shift->clear_renderer };
+
 sub _build_renderer_class {
+  my ($self) = @_;
+  my ($class, @roles) = (
+    $self->_build_base_renderer_class, $self->_build_renderer_roles
+  );
+  return $class unless @roles;
+  return use_module('Moo::Role')->create_class_with_roles($class, @roles);
+}
+
+sub _build_base_renderer_class {
   use_module('Data::Query::Renderer::SQL::Naive')
 }
 
+sub _build_renderer_roles { () }
+
 sub _converter_args {
   my ($self) = @_;
   Scalar::Util::weaken($self);