File Coverage

blib/lib/DBIx/DBHResolver/Strategy/Key.pm
Criterion Covered Total %
statement 22 26 84.6
branch 1 2 50.0
condition n/a
subroutine 6 7 85.7
pod 2 2 100.0
total 31 37 83.7


line stmt bran cond sub pod time code
1             package DBIx::DBHResolver::Strategy::Key;
2              
3 7     7   41 use strict;
  7         19  
  7         414  
4 7     7   40 use warnings;
  7         13  
  7         187  
5 7     7   66 use parent qw(DBIx::DBHResolver::Strategy);
  7         14  
  7         60  
6 7     7   262 use Carp;
  7         13  
  7         370  
7 7     7   39 use Data::Util qw(is_array_ref is_number neat);
  7         12  
  7         1912  
8              
9             our $VERSION = '0.01';
10              
11             sub connect_info {
12 0     0 1 0 my ( $class, $resolver, $node_or_cluster, $args ) = @_;
13 0         0 my ($resolved_node, @keys) = $class->resolve( $resolver, $node_or_cluster, $args );
14 0         0 return $resolver->connect_info( $resolved_node, \@keys );
15             }
16              
17             sub resolve {
18 548     548 1 943 my ( $class, $resolver, $node_or_cluster, $args ) = @_;
19              
20 548         2469 my @keys = $class->keys_from_args($args);
21 548         909 my $key = shift @keys;
22            
23 548 50       1883 unless ( is_number($key) ) {
24 0         0 croak sprintf( 'args has not key field or no number value (key: %s)',
25             neat($key) );
26             }
27              
28 548         2434 my @nodes = $resolver->clusters($node_or_cluster);
29 548         1106 my $resolved_node = $nodes[ $key % scalar @nodes ];
30              
31 548         1929 return ($resolved_node, @keys);
32             }
33              
34             1;
35              
36             __END__