File Coverage

blib/lib/DBIx/DBHResolver/Strategy/List.pm
Criterion Covered Total %
statement 36 41 87.8
branch 7 10 70.0
condition 4 9 44.4
subroutine 6 7 85.7
pod 2 2 100.0
total 55 69 79.7


line stmt bran cond sub pod time code
1             package DBIx::DBHResolver::Strategy::List;
2              
3 7     7   37 use strict;
  7         12  
  7         220  
4 7     7   53 use warnings;
  7         14  
  7         178  
5 7     7   31 use parent qw(DBIx::DBHResolver::Strategy);
  7         12  
  7         35  
6 7     7   377 use Carp;
  7         13  
  7         439  
7 7     7   38 use Data::Util qw(is_hash_ref is_array_ref);
  7         14  
  7         3057  
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) =
14             $class->resolve( $resolver, $node_or_cluster, $args );
15              
16 0         0 return $resolver->connect_info( $resolved_node, \@keys );
17             }
18              
19             sub resolve {
20 307     307 1 786 my ( $class, $resolver, $node_or_cluster, $args ) = @_;
21              
22 307         1585 my @keys = $class->keys_from_args($args);
23 307         531 my $key = shift @keys;
24            
25 307 50       913 unless ( exists $args->{list_map} ) {
26 307 50 33     2131 unless ( exists $args->{strategy_config}
27             && is_hash_ref( $args->{strategy_config} ) )
28             {
29 0         0 croak 'strategy_config is not exists or is not hash ref';
30             }
31 307         469 my $strategy_config = $args->{strategy_config};
32 822         992 $args->{list_map} = +{
33             map {
34 929         2003 my $node = $_;
35 822         824 map { $_ => $node } @{ $args->{strategy_config}{$node} }
  1784         5580  
  822         1664  
36             }
37 307         786 grep { length $_ > 0 }
38             keys %$strategy_config
39             };
40              
41 307 100       1278 if ( exists $strategy_config->{""} ) {
42 107   33     512 $args->{list_fallback} ||= $strategy_config->{""};
43             }
44             }
45              
46 307 50 66     7402 if ( !exists $args->{list_fallback} && !exists $args->{list_map}{$key} ) {
47 0         0 croak sprintf( q|Not exists fallback, The key '%d' has not route|, $key );
48             }
49              
50 307         357 my $resolved_node;
51              
52 307 100       869 if ( exists $args->{list_map}{$key} ) {
53 254         493 $resolved_node = $args->{list_map}{$key};
54             }
55             else {
56 53         66 $resolved_node = $args->{list_fallback};
57 53         88 unshift( @keys, $key );
58             }
59              
60 307         1325 return ( $resolved_node, @keys );
61             }
62              
63             1;
64              
65             __END__