File Coverage

blib/lib/Data/Resolver/Alternatives.pm
Criterion Covered Total %
statement 65 72 90.2
branch 2 4 50.0
condition 2 2 100.0
subroutine 16 18 88.8
pod 6 6 100.0
total 91 102 89.2


line stmt bran cond sub pod time code
1             #!/usr/bin/env perl
2             package Data::Resolver::Alternatives;
3 2     2   3453 use v5.24;
  2         9  
4 2     2   14 use warnings;
  2         5  
  2         135  
5              
6 2     2   14 use Moo;
  2         5  
  2         17  
7 2     2   1326 use experimental 'signatures';
  2         5  
  2         19  
8 2     2   486 use namespace::clean;
  2         7  
  2         50  
9              
10             extends 'Data::Resolver::Base';
11              
12             has alternatives => (is => 'ro', required => 1);
13              
14 2     2   5 sub _uniq_map ($self, $cb) {
  2         4  
  2         4  
  2         5  
15 2         4 my %seen;
16 2         9 grep { !$seen{$_}++ } map { $cb->($_) } $self->alternatives->@*;
  8         106  
  4         22  
17             }
18              
19 6     6   14 sub _first ($self, $test) {
  6         12  
  6         11  
  6         13  
20 6   100     31 $test->($_) && return $_ for $self->alternatives->@*;
21 0         0 return;
22             }
23              
24 4     4 1 2510 sub get_asset ($self, $key) {
  4         9  
  4         8  
  4         8  
25 5     5   24 my $provider = $self->_first(sub { $_[0]->has_asset($key) })
26 4 50       23 or $self->not_found($key);
27 4         146 return $provider->get_asset($key);
28             }
29              
30 2     2 1 4477 sub get_sub_resolver ($self, $key) {
  2         5  
  2         5  
  2         4  
31             my @subs =
32 3         101 map { $_->get_sub_resolver($key) }
33 2         10 grep { $_->has_sub_resolver($key) }
  4         37  
34             $self->alternatives->@*;
35 2 50       66 $self->not_found($key) unless @subs;
36 2         72 return ref($self)->new(alternatives => \@subs);
37             }
38              
39 2     2 1 5196 sub has_asset ($self, $key) {
  2         6  
  2         5  
  2         4  
40 2     3   13 !!($self->_first(sub { $_[0]->has_asset($key) }));
  3         20  
41             }
42              
43 0     0 1 0 sub has_sub_resolver ($self, $key) {
  0         0  
  0         0  
  0         0  
44 0     0   0 !!($self->_first(sub { $_[0]->has_sub_resolver($key) }));
  0         0  
45             }
46              
47 1     1 1 10741 sub list_asset_keys ($self) {
  1         2  
  1         2  
48 1     2   6 $self->_uniq_map(sub ($resolver) { $resolver->list_asset_keys });
  2         11  
  2         4  
  2         3  
  2         4  
49             }
50              
51 1     1 1 929 sub list_sub_resolver_keys ($self) {
  1         3  
  1         2  
52 1     2   6 $self->_uniq_map(sub ($resolver) { $resolver->list_sub_resolver_keys });
  2         11  
  2         4  
  2         4  
  2         4  
53             }
54              
55             1;