File Coverage

blib/lib/Data/RuledCluster/Strategy/Key.pm
Criterion Covered Total %
statement 19 20 95.0
branch 1 2 50.0
condition n/a
subroutine 5 5 100.0
pod 0 1 0.0
total 25 28 89.2


line stmt bran cond sub pod time code
1             package Data::RuledCluster::Strategy::Key;
2 3     3   1678 use strict;
  3         6  
  3         74  
3 3     3   15 use warnings;
  3         5  
  3         73  
4 3     3   669 use parent 'Data::RuledCluster::Strategy';
  3         487  
  3         10  
5 3     3   150 use Data::Util qw(is_number neat);
  3         6  
  3         429  
6              
7             sub resolve {
8 20     20 0 70 my ( $class, $resolver, $node_or_cluster, $args ) = @_;
9              
10 20         54 my @keys = $class->keys_from_args($args);
11 20         38 my $key = shift @keys;
12              
13 20 50       72 unless ( is_number($key) ) {
14 0         0 Carp::croak(
15             sprintf('args has not key field or no number value (key: %s)', neat($key))
16             );
17             }
18              
19 20         58 my @nodes = $resolver->clusters($node_or_cluster);
20 20         48 my $resolved_node = $nodes[ $key % scalar @nodes ];
21              
22 20         66 return ($resolved_node, @keys);
23             }
24              
25             1;
26