File Coverage

blib/lib/Search/Tools/ArgNormalizer.pm
Criterion Covered Total %
statement 29 36 80.5
branch 6 10 60.0
condition 1 3 33.3
subroutine 6 6 100.0
pod 2 2 100.0
total 44 57 77.1


line stmt bran cond sub pod time code
1             package Search::Tools::ArgNormalizer;
2 22     22   9014 use Moo::Role;
  22         30  
  22         131  
3 22     22   4794 use Carp;
  22         233  
  22         1204  
4 22     22   84 use Scalar::Util qw( blessed );
  22         24  
  22         778  
5 22     22   67 use Data::Dump qw( dump );
  22         22  
  22         5795  
6              
7             our $VERSION = '1.004';
8              
9             sub BUILDARGS {
10 53     53 1 55125 my $self = shift;
11 53         230 my %args = @_;
12 53         118 my $q = delete $args{query};
13 53         96 my $debug = delete $args{debug};
14 53 50       159 if ( !defined $q ) {
15 0         0 confess "query required";
16             }
17 53 100 33     420 if ( !ref($q) ) {
    50          
    50          
18 25         3588 require Search::Tools::QueryParser;
19             $args{query} = Search::Tools::QueryParser->new(
20             debug => $debug,
21 9         161 map { $_ => delete $args{$_} }
22 25         155 grep { $self->queryparser_can($_) } keys %args
  91         185  
23             )->parse($q);
24             }
25             elsif ( ref($q) eq 'ARRAY' ) {
26 0         0 carp "query ARRAY ref deprecated as of version 0.24";
27 0         0 require Search::Tools::QueryParser;
28             $args{query} = Search::Tools::QueryParser->new(
29             debug => $debug,
30 0         0 map { $_ => delete $args{$_} }
31 0         0 grep { $self->queryparser_can($_) } keys %args
  0         0  
32             )->parse( join( ' ', @$q ) );
33             }
34             elsif ( blessed($q) and $q->isa('Search::Tools::Query') ) {
35 28         49 $args{query} = $q;
36             }
37             else {
38 0         0 confess
39             "query param required to be a scalar string or Search::Tools::Query object";
40             }
41 53         931 $args{debug} = $debug; # restore so it can be passed on
42             #dump \%args;
43 53         853 return \%args;
44             }
45              
46             sub queryparser_can {
47 91     91 1 91 my $self = shift;
48 91 50       158 my $attr = shift or confess "attr required";
49 91         414 my $can = Search::Tools::QueryParser->can($attr);
50              
51             #warn
52             # sprintf( "QueryParser->can(%s)==%s\n", $attr, ( $can || '[undef]' ) );
53              
54 91         326 return $can;
55             }
56              
57             1;
58              
59             __END__