File Coverage

blib/lib/Net/Async/WebSearch/Result.pm
Criterion Covered Total %
statement 28 36 77.7
branch 8 28 28.5
condition 5 11 45.4
subroutine 12 18 66.6
pod 14 15 93.3
total 67 108 62.0


line stmt bran cond sub pod time code
1             package Net::Async::WebSearch::Result;
2             our $VERSION = '0.002';
3             # ABSTRACT: Single web search result record
4 6     6   35 use strict;
  6         24  
  6         202  
5 6     6   22 use warnings;
  6         9  
  6         238  
6 6     6   20 use URI ();
  6         7  
  6         2992  
7              
8             sub new {
9 88     88 0 273 my ( $class, %args ) = @_;
10             my $self = {
11             url => $args{url},
12             title => $args{title},
13             snippet => $args{snippet},
14             provider => $args{provider},
15             rank => $args{rank},
16             score => $args{score},
17             published_at => $args{published_at},
18             language => $args{language},
19             nsfw => $args{nsfw},
20             domain => $args{domain},
21             fetched => $args{fetched},
22             raw => $args{raw},
23             extra => $args{extra} || {},
24 88   100     543 };
25 88         172 bless $self, $class;
26             # Auto-derive domain from URL if not supplied.
27 88 50 33     241 if ( !defined $self->{domain} && defined $self->{url} ) {
28 88         94 my $u = eval { URI->new( $self->{url} ) };
  88         267  
29 88 50 33     26423 if ( $u && $u->can('host') ) {
30 88         683 my $h = eval { $u->host };
  88         145  
31 88 50 33     1969 $self->{domain} = $h if defined $h && length $h;
32             }
33             }
34 88         293 return $self;
35             }
36              
37 112     112 1 3078 sub url { $_[0]->{url} }
38 1     1 1 6597 sub title { $_[0]->{title} }
39 80     80 1 257 sub snippet { $_[0]->{snippet} }
40 91     91 1 443 sub provider { $_[0]->{provider} }
41 140 50   140 1 362 sub rank { @_ > 1 ? ($_[0]->{rank} = $_[1]) : $_[0]->{rank} }
42 64 100   64 1 441 sub score { @_ > 1 ? ($_[0]->{score} = $_[1]) : $_[0]->{score} }
43 0     0 1 0 sub published_at { $_[0]->{published_at} }
44 0     0 1 0 sub language { $_[0]->{language} }
45 0     0 1 0 sub nsfw { $_[0]->{nsfw} }
46 0     0 1 0 sub domain { $_[0]->{domain} }
47 52 100   52 1 3004 sub fetched { @_ > 1 ? ($_[0]->{fetched} = $_[1]) : $_[0]->{fetched} }
48 0     0 1 0 sub raw { $_[0]->{raw} }
49 67     67 1 131 sub extra { $_[0]->{extra} }
50              
51             sub to_hash {
52 0     0 1   my ( $self ) = @_;
53             return {
54             url => $self->{url},
55             title => $self->{title},
56             snippet => $self->{snippet},
57             provider => $self->{provider},
58             rank => $self->{rank},
59             score => $self->{score},
60             ( defined $self->{published_at} ? ( published_at => $self->{published_at} ) : () ),
61             ( defined $self->{language} ? ( language => $self->{language} ) : () ),
62             ( defined $self->{nsfw} ? ( nsfw => $self->{nsfw} ? 1 : 0 ) : () ),
63             ( defined $self->{domain} ? ( domain => $self->{domain} ) : () ),
64             ( defined $self->{fetched} ? ( fetched => $self->{fetched} ) : () ),
65 0 0         ( %{ $self->{extra} || {} } ? ( extra => $self->{extra} ) : () ),
  0 0          
    0          
    0          
    0          
    0          
    0          
    0          
66             };
67             }
68              
69             1;
70              
71             __END__