File Coverage

blib/lib/Net/Async/WebSearch/Provider.pm
Criterion Covered Total %
statement 32 37 86.4
branch 12 16 75.0
condition 5 7 71.4
subroutine 11 13 84.6
pod 8 9 88.8
total 68 82 82.9


line stmt bran cond sub pod time code
1             package Net::Async::WebSearch::Provider;
2             our $VERSION = '0.002';
3             # ABSTRACT: Base class for Net::Async::WebSearch providers
4 6     6   31 use strict;
  6         10  
  6         171  
5 6     6   20 use warnings;
  6         9  
  6         317  
6 6     6   25 use Carp qw( croak );
  6         7  
  6         2458  
7              
8             sub new {
9 33     33 0 689778 my ( $class, %args ) = @_;
10 33         90 my $self = bless { %args }, $class;
11 33 50       196 $self->{enabled} = 1 unless defined $self->{enabled};
12 33   100     122 $self->{tags} ||= [];
13 33         84 $self->_init;
14 30         78 return $self;
15             }
16              
17       14     sub _init {}
18              
19             sub default_name {
20 13     13 1 14 my ( $self ) = @_;
21 13         15 my $pkg = ref $self;
22 13         49 $pkg =~ s/.*:://;
23 13         28 return lc $pkg;
24             }
25              
26             sub name {
27 273     273 1 755 my ( $self ) = @_;
28 273 100 66     963 @_ > 1 ? ($self->{name} = $_[1]) : ($self->{name} // $self->default_name);
29             }
30              
31 66 100   66 1 3522 sub enabled { @_ > 1 ? ($_[0]->{enabled} = $_[1]) : $_[0]->{enabled} }
32              
33             sub tags {
34 0     0 1 0 my ( $self ) = @_;
35 0 0       0 return @{ $self->{tags} || [] };
  0         0  
36             }
37              
38             sub has_tag {
39 47     47 1 55 my ( $self, $tag ) = @_;
40 47 50       51 return scalar grep { $_ eq $tag } @{ $self->{tags} || [] };
  43         97  
  47         90  
41             }
42              
43             sub matches {
44 72     72 1 133 my ( $self, $sel ) = @_;
45 72 100       104 return 1 if $sel eq $self->name;
46 51 100       105 return 1 if $sel eq $self->default_name;
47 47 100       140 return 1 if $self->has_tag($sel);
48 36         77 return 0;
49             }
50              
51             sub user_agent_string {
52 17   50 17 1 56 'Net-Async-WebSearch/' . ($Net::Async::WebSearch::VERSION // 'dev');
53             }
54              
55             # Subclasses MUST implement.
56             # Signature: $self->search($http, $query, \%opts)
57             # Returns: Future of arrayref of Net::Async::WebSearch::Result
58             sub search {
59 0     0 1   my ( $self ) = @_;
60 0           croak ref($self).": must implement search()";
61             }
62              
63             1;
64              
65             __END__