File Coverage

blib/lib/Data/RuledCluster/Strategy/List.pm
Criterion Covered Total %
statement 36 38 94.7
branch 8 10 80.0
condition 4 9 44.4
subroutine 6 6 100.0
pod 0 1 0.0
total 54 64 84.3


line stmt bran cond sub pod time code
1             package Data::RuledCluster::Strategy::List;
2 2     2   2060 use strict;
  2         4  
  2         84  
3 2     2   12 use warnings;
  2         3  
  2         86  
4 2     2   1329 use parent 'Data::RuledCluster::Strategy';
  2         937  
  2         11  
5 2     2   89 use Carp ();
  2         4  
  2         41  
6 2     2   9 use Data::Util qw(is_hash_ref is_array_ref);
  2         2  
  2         657  
7              
8             sub resolve {
9 51     51 0 79 my ($class, $resolver, $node_or_cluster, $args) = @_;
10              
11 51         163 my @keys = $class->keys_from_args($args);
12 51         85 my $key = shift @keys;
13              
14 51 100       132 if ( not exists $args->{list_map} ) {
15 39 50 33     222 if ( not exists $args->{strategy_config} && is_hash_ref( $args->{strategy_config} ) ) {
16 0         0 Carp::croak('strategy_config is not exists or is not hash ref');
17             }
18              
19 39         46 my $strategy_config = $args->{strategy_config};
20             $args->{list_map} = +{
21             map {
22 54         60 my $node = $_;
23 54         57 map { $_ => $node } @{ $args->{strategy_config}->{$node} }
  90         276  
  54         104  
24             }
25 39         106 grep { length $_ > 0 }
  81         183  
26             keys %$strategy_config
27             };
28 39 100       105 if ( exists $strategy_config->{""} ) {
29 27   33     126 $args->{list_fallback} ||= $strategy_config->{""};
30             }
31             }
32              
33 51 50 66     171 if ( !exists $args->{list_fallback} && !exists $args->{list_map}->{$key} ) {
34 0         0 Carp::croak(sprintf("Not exists fallback, The key '%d' has not route", $key ));
35             }
36              
37 51         53 my $resolved_node;
38 51 100       98 if ( exists $args->{list_map}->{$key} ) {
39 28         60 $resolved_node = $args->{list_map}{$key};
40             }
41             else {
42 23         28 $resolved_node = $args->{list_fallback};
43 23         41 unshift( @keys, $key );
44             }
45              
46 51         209 return ( $resolved_node, @keys );
47             }
48              
49             1;
50