File Coverage

blib/lib/Data/RuledCluster/Strategy.pm
Criterion Covered Total %
statement 26 27 96.3
branch 4 4 100.0
condition 2 2 100.0
subroutine 6 7 85.7
pod 0 3 0.0
total 38 43 88.3


line stmt bran cond sub pod time code
1             package Data::RuledCluster::Strategy;
2 6     6   23709 use strict;
  6         13  
  6         202  
3 6     6   27 use warnings;
  6         9  
  6         260  
4 6     6   27 use Carp;
  6         18  
  6         618  
5 6     6   33 use Data::Util qw(is_array_ref);
  6         9  
  6         2214  
6              
7 0     0 0 0 sub resolve { Carp::croak('Not implement') }
8              
9             sub resolve_node_keys {
10 22     22 0 62 my ($class, $resolver, $cluster_or_node, $args, $options) = @_;
11              
12 22         31 my %node_keys;
13 22         60 for my $key ($class->keys_from_args($args)) {
14 46         170 my %args = %$args;
15 46         95 $args{key} = $key;
16              
17 46         156 my ($resolved, @keys) = $class->resolve($resolver, $cluster_or_node, \%args, $options);
18              
19 46   100     274 my $node_keys = $node_keys{ $resolved } ||= [];
20 46 100       143 if ($resolver->is_cluster($resolved)) {
21 16         127 push @$node_keys, {
22             root => $key,
23             next => \@keys,
24             };
25             }
26             else {
27 30         130 push @$node_keys, $key;
28             }
29             }
30              
31 22         155 return %node_keys;
32             }
33              
34             sub keys_from_args {
35 101     101 0 125 my ( $class, $args ) = @_;
36 101 100       484 return is_array_ref( $args->{key} ) ? @{ $args->{key} } : ( $args->{key} );
  29         111  
37             }
38              
39             1;
40