From: Rafael Kitover Date: Wed, 17 Jun 2009 02:26:47 +0000 (+0000) Subject: cleanup types, add more attributes to replicated trait X-Git-Tag: v0.26~9 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Model-DBIC-Schema.git;a=commitdiff_plain;h=7314403accaf92512542e7ec3181282b60af3316 cleanup types, add more attributes to replicated trait --- diff --git a/lib/Catalyst/Model/DBIC/Schema.pm b/lib/Catalyst/Model/DBIC/Schema.pm index ad99846..e4d8e91 100644 --- a/lib/Catalyst/Model/DBIC/Schema.pm +++ b/lib/Catalyst/Model/DBIC/Schema.pm @@ -14,7 +14,7 @@ use DBIx::Class (); use Moose::Autobox; use Catalyst::Model::DBIC::Schema::Types - qw/ConnectInfo SchemaClass CursorClass/; + qw/ConnectInfo LoadedClass/; use MooseX::Types::Moose qw/ArrayRef Str ClassName Undef/; @@ -435,7 +435,7 @@ has schema => (is => 'rw', isa => 'DBIx::Class::Schema'); has schema_class => ( is => 'ro', - isa => SchemaClass, + isa => LoadedClass, coerce => 1, required => 1 ); @@ -453,7 +453,7 @@ has model_name => ( has _default_cursor_class => ( is => 'ro', - isa => CursorClass, + isa => LoadedClass, default => 'DBIx::Class::Storage::DBI::Cursor', coerce => 1 ); diff --git a/lib/Catalyst/Model/DBIC/Schema/Types.pm b/lib/Catalyst/Model/DBIC/Schema/Types.pm index 4833616..88467d8 100644 --- a/lib/Catalyst/Model/DBIC/Schema/Types.pm +++ b/lib/Catalyst/Model/DBIC/Schema/Types.pm @@ -2,8 +2,7 @@ package # hide from PAUSE Catalyst::Model::DBIC::Schema::Types; use MooseX::Types -declare => [qw/ - ConnectInfo ConnectInfos Replicants SchemaClass CursorClass - CreateOption + ConnectInfo ConnectInfos Replicants LoadedClass CreateOption /]; use Carp::Clan '^Catalyst::Model::DBIC::Schema'; @@ -15,17 +14,10 @@ use namespace::clean -except => 'meta'; class_type 'DBIx::Class::Schema'; -subtype SchemaClass, +subtype LoadedClass, as ClassName; -coerce SchemaClass, - from Str, - via { Class::MOP::load_class($_); $_ }; - -subtype CursorClass, - as ClassName; - -coerce CursorClass, +coerce LoadedClass, from Str, via { Class::MOP::load_class($_); $_ }; diff --git a/lib/Catalyst/TraitFor/Model/DBIC/Schema/Caching.pm b/lib/Catalyst/TraitFor/Model/DBIC/Schema/Caching.pm index 1bd0acd..1387c39 100644 --- a/lib/Catalyst/TraitFor/Model/DBIC/Schema/Caching.pm +++ b/lib/Catalyst/TraitFor/Model/DBIC/Schema/Caching.pm @@ -3,8 +3,7 @@ package Catalyst::TraitFor::Model::DBIC::Schema::Caching; use namespace::autoclean; use Moose::Role; use Carp::Clan '^Catalyst::Model::DBIC::Schema'; -use Catalyst::Model::DBIC::Schema::Types 'CursorClass'; -use MooseX::Types::Moose qw/Int Str/; +use MooseX::Types::Moose 'Int'; =head1 NAME diff --git a/lib/Catalyst/TraitFor/Model/DBIC/Schema/Replicated.pm b/lib/Catalyst/TraitFor/Model/DBIC/Schema/Replicated.pm index e6540b6..213674c 100644 --- a/lib/Catalyst/TraitFor/Model/DBIC/Schema/Replicated.pm +++ b/lib/Catalyst/TraitFor/Model/DBIC/Schema/Replicated.pm @@ -5,7 +5,8 @@ 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 LoadedClass/; +use MooseX::Types::Moose qw/Str HashRef/; =head1 NAME @@ -16,7 +17,7 @@ L __PACKAGE__->config({ traits => ['Replicated'] - connect_info => + connect_info => ['dbi:mysql:master', 'user', 'pass'], replicants => [ ['dbi:mysql:slave1', 'user', 'pass'], @@ -48,12 +49,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, or +as their own parameters. If set via separate parameters, they will override the +settings in C. + +=head2 pool_type + +See L. + +=head2 pool_args + +See L. + +=head2 balancer_type + +See L. + +=head2 balancer_args + +See L. + =cut has replicants => ( is => 'ro', isa => ConnectInfos, coerce => 1, required => 1 ); +has pool_type => (is => 'ro', isa => LoadedClass); +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; @@ -69,16 +95,26 @@ after setup => sub { $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;