Stop using deprecated Class::MOP::load_module
[catagits/Catalyst-Model-DBIC-Schema.git] / lib / Catalyst / TraitFor / Model / DBIC / Schema / Replicated.pm
index e6540b6..a978d1d 100644 (file)
@@ -2,10 +2,12 @@ package Catalyst::TraitFor::Model::DBIC::Schema::Replicated;
 
 use namespace::autoclean;
 use Moose::Role;
-use Moose::Autobox;
 use Carp::Clan '^Catalyst::Model::DBIC::Schema';
 
-use Catalyst::Model::DBIC::Schema::Types 'ConnectInfos';
+use Catalyst::Model::DBIC::Schema::Types qw/ConnectInfos LoadableClass/;
+use MooseX::Types::Moose qw/Str HashRef/;
+
+use Module::Runtime qw/use_module/;
 
 =head1 NAME
 
@@ -16,7 +18,7 @@ L<Catalyst::Model::DBIC::Schema>
 
     __PACKAGE__->config({
         traits => ['Replicated']
-        connect_info => 
+        connect_info =>
             ['dbi:mysql:master', 'user', 'pass'],
         replicants => [
             ['dbi:mysql:slave1', 'user', 'pass'],
@@ -48,12 +50,37 @@ you do from replicants. Set to C<0> to turn off reads from master.
 
 Array of connect_info settings for every replicant.
 
+The following can be set via L<Catalyst::Model::DBIC::Schema/connect_info>, or
+as their own parameters. If set via separate parameters, they will override the
+settings in C<connect_info>.
+
+=head2 pool_type
+
+See L<DBIx::Class::Storage::DBI::Replicated/pool_type>.
+
+=head2 pool_args
+
+See L<DBIx::Class::Storage::DBI::Replicated/pool_args>.
+
+=head2 balancer_type
+
+See L<DBIx::Class::Storage::DBI::Replicated/balancer_type>.
+
+=head2 balancer_args
+
+See L<DBIx::Class::Storage::DBI::Replicated/balancer_args>.
+
 =cut
 
 has replicants => (
     is => 'ro', isa => ConnectInfos, coerce => 1, required => 1
 );
 
+has pool_type => (is => 'ro', isa => LoadableClass);
+has pool_args => (is => 'ro', isa => HashRef);
+has balancer_type => (is => 'ro', isa => Str);
+has balancer_args => (is => 'ro', isa => HashRef);
+
 after setup => sub {
     my $self = shift;
 
@@ -63,40 +90,57 @@ after setup => sub {
             "DBIx::Class::Storage$storage_type"
             : $storage_type;
 
+        use_module($class);
+
         croak "This storage_type cannot be used with replication"
             unless $class->isa('DBIx::Class::Storage::DBI::Replicated');
     } else {
         $self->storage_type('::DBI::Replicated');
     }
 
-    $self->connect_info->{balancer_type} ||= '::Random'
-        unless $self->connect_info->{balancer_type};
+    my $connect_info = $self->connect_info;
 
-    unless ($self->connect_info->{balancer_args} &&
-            exists $self->connect_info->{balancer_args}{master_read_weight}) {
-        $self->connect_info->{balancer_args}{master_read_weight} = 1;
-    }
+    $connect_info->{pool_type} = $self->pool_type
+        if $self->pool_type;
+
+    $connect_info->{pool_args} = $self->pool_args
+        if $self->pool_args;
+
+    $connect_info->{balancer_type} = $self->balancer_type ||
+        $connect_info->{balancer_type} || '::Random';
+
+    $connect_info->{balancer_args} = $self->balancer_args ||
+        $connect_info->{balancer_args} || {};
+
+    $connect_info->{balancer_args}{master_read_weight} = 1
+        unless exists $connect_info->{balancer_args}{master_read_weight};
 };
 
 sub BUILD {}
+
 after BUILD => sub {
     my $self = shift;
 
-    $self->storage->connect_replicants(map [ $_ ], $self->replicants->flatten);
+    $self->storage->connect_replicants(map [ $_ ], @{ $self->replicants });
 };
 
 =head1 SEE ALSO
 
 L<Catalyst::Model::DBIC::Schema>, L<DBIx::Class>,
 L<DBIx::Class::Storage::DBI::Replicated>,
-L<Cache::FastMmap>, L<DBIx::Class::Cursor::Cached>
+L<Catalyst::TraitFor::Model::DBIC::Schema::Caching>
 
 =head1 AUTHOR
 
-Rafael Kitover, C<rkitover at cpan.org>
+See L<Catalyst::Model::DBIC::Schema/AUTHOR> and
+L<Catalyst::Model::DBIC::Schema/CONTRIBUTORS>.
 
 =head1 COPYRIGHT
 
+See L<Catalyst::Model::DBIC::Schema/COPYRIGHT>.
+
+=head1 LICENSE
+
 This program is free software, you can redistribute it and/or modify it
 under the same terms as Perl itself.