Port ::Replicated from Moose to Moo+Type::Tiny
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Replicated / Pool.pm
index 1a8347d..6d55835 100644 (file)
@@ -1,12 +1,11 @@
 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 Carp::Clan qw/^DBIx::Class/;
-use MooseX::Types::Moose qw/Num Int ClassName HashRef/;
+use Types::Standard qw/Num Int ClassName HashRef Object/;
 use DBIx::Class::Storage::DBI::Replicated::Types 'DBICStorageDBI';
 use Try::Tiny;
 
@@ -24,7 +23,7 @@ shouldn't need to create instances of this class.
 =head1 DESCRIPTION
 
 In a replicated storage type, there is at least one replicant to handle the
-read-only traffic.  The Pool class manages this replicant, or list of 
+read-only traffic.  The Pool class manages this replicant, or list of
 replicants, and gives some methods for querying information about their status.
 
 =head1 ATTRIBUTES
@@ -45,7 +44,6 @@ return a number of seconds that the replicating database is lagging.
 has 'maximum_lag' => (
   is=>'rw',
   isa=>Num,
-  required=>1,
   lazy=>1,
   default=>0,
 );
@@ -82,7 +80,7 @@ has 'replicant_type' => (
   default=>'DBIx::Class::Storage::DBI',
   handles=>{
     'create_replicant' => 'new',
-  },  
+  },
 );
 
 =head2 replicants
@@ -126,34 +124,28 @@ Removes the replicant under $key from the pool
 
 has 'replicants' => (
   is=>'rw',
-  traits => ['Hash'],
-  isa=>HashRef['Object'],
+  isa=>HashRef[Object],
   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,
   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.
@@ -220,7 +212,7 @@ sub connect_replicants {
     }
 
     $replicant->id($key);
-    $self->set_replicant($key => $replicant);  
+    $self->set_replicant($key => $replicant);
 
     push @newly_created, $replicant;
   }
@@ -253,9 +245,10 @@ 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);
@@ -396,9 +389,9 @@ sub validate_replicants {
             if($lag_behind_master <= $self->maximum_lag) {
               $replicant->active(1);
             } else {
-              $replicant->active(0);  
+              $replicant->active(0);
             }
-          }    
+          }
         } else {
           $replicant->active(0);
         }
@@ -407,20 +400,21 @@ sub validate_replicants {
       $replicant->active(0);
     }
   }
-  ## Mark that we completed this validation.  
-  $self->_last_validated(time);  
+  ## Mark that we completed this validation.
+  $self->_last_validated(time);
 }
 
-=head1 AUTHOR
+=head1 FURTHER QUESTIONS?
 
-John Napiorkowski <john.napiorkowski@takkle.com>
+Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
 
-=head1 LICENSE
+=head1 COPYRIGHT AND LICENSE
 
-You may distribute this code under the same terms as Perl itself.
+This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
+by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
+redistribute it and/or modify it under the same terms as the
+L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
 
 =cut
 
-__PACKAGE__->meta->make_immutable;
-
 1;