X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated%2FPool.pm;h=f8a1c6658550ccb32c3db858cd87401c010c4862;hb=80666849eafc546f4a3865933211d64dc232677a;hp=9980b4d212c947b3f9e1a1412a49b2a14dc66995;hpb=751a68cca30c1f4f5043e692d57c9fc454686350;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated/Pool.pm b/lib/DBIx/Class/Storage/DBI/Replicated/Pool.pm index 9980b4d..f8a1c66 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated/Pool.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated/Pool.pm @@ -1,15 +1,14 @@ package DBIx::Class::Storage::DBI::Replicated::Pool; -use Moose; +use Moo; use DBIx::Class::Storage::DBI::Replicated::Replicant; use List::Util 'sum'; use Scalar::Util 'reftype'; use DBI (); -use MooseX::Types::Moose qw/Num Int ClassName HashRef/; -use DBIx::Class::Storage::DBI::Replicated::Types 'DBICStorageDBI'; +use DBIx::Class::_Types qw(HashRef Number Integer LoadableClass DBICStorageDBI); use Try::Tiny; -use namespace::clean -except => 'meta'; +use namespace::clean; =head1 NAME @@ -43,10 +42,9 @@ return a number of seconds that the replicating database is lagging. has 'maximum_lag' => ( is=>'rw', - isa=>Num, - required=>1, + isa=>Number, lazy=>1, - default=>0, + default=>sub { 0 }, ); =head2 last_validated @@ -59,11 +57,11 @@ built-in. has 'last_validated' => ( is=>'rw', - isa=>Int, + isa=>Integer, reader=>'last_validated', writer=>'_last_validated', lazy=>1, - default=>0, + default=>sub { 0 }, ); =head2 replicant_type ($classname) @@ -76,7 +74,7 @@ just leave this alone. has 'replicant_type' => ( is=>'ro', - isa=>ClassName, + isa=>LoadableClass, required=>1, default=>'DBIx::Class::Storage::DBI', handles=>{ @@ -125,34 +123,28 @@ Removes the replicant under $key from the pool has 'replicants' => ( is=>'rw', - traits => ['Hash'], - isa=>HashRef['Object'], + isa=>HashRef, default=>sub {{}}, - handles => { - 'set_replicant' => 'set', - 'get_replicant' => 'get', - 'has_replicants' => 'is_empty', - 'num_replicants' => 'count', - 'delete_replicant' => 'delete', - 'all_replicant_storages' => 'values', - }, ); -around has_replicants => sub { - my ($orig, $self) = @_; - return !$self->$orig; -}; +sub set_replicant { $_[0]->replicants->{$_[1]} = $_[2] } +sub get_replicant { $_[0]->replicants->{$_[1]} } +sub has_replicants { !!keys %{$_[0]->replicants} } +sub num_replicants { 0+keys %{$_[0]->replicants} } +sub delete_replicant { delete $_[0]->replicants->{$_[1]} } +sub all_replicant_storages { values %{$_[0]->replicants} } has next_unknown_replicant_id => ( is => 'rw', - traits => ['Counter'], - isa => Int, + isa => Integer, default => 1, - handles => { - 'inc_unknown_replicant_id' => 'inc', - }, ); +sub inc_unknown_replicant_id { + my ($self) = @_; + $self->next_unknown_replicant_id($self->next_unknown_replicant_id + 1); +} + =head2 master Reference to the master Storage. @@ -252,9 +244,7 @@ sub connect_replicant { $replicant->_determine_driver }); - Moose::Meta::Class->initialize(ref $replicant); - - DBIx::Class::Storage::DBI::Replicated::Replicant->meta->apply($replicant); + Moo::Role->apply_roles_to_object($replicant, 'DBIx::Class::Storage::DBI::Replicated::Replicant'); # link back to master $replicant->master($self->master); @@ -423,6 +413,4 @@ L. =cut -__PACKAGE__->meta->make_immutable; - 1;