File Coverage

blib/lib/WWW/Search/Coveralia/Result/Album.pm
Criterion Covered Total %
statement 57 57 100.0
branch 12 16 75.0
condition 4 4 100.0
subroutine 13 13 100.0
pod 7 7 100.0
total 93 97 95.8


line stmt bran cond sub pod time code
1             package WWW::Search::Coveralia::Result::Album;
2              
3 1     1   12 use 5.014000;
  1         3  
  1         28  
4 1     1   3 use strict;
  1         1  
  1         22  
5 1     1   3 use warnings;
  1         1  
  1         19  
6 1     1   3 use parent qw/WWW::SearchResult/;
  1         1  
  1         4  
7              
8             our $VERSION = '0.001';
9              
10 1     1   1468 use HTML::TreeBuilder;
  1         1  
  1         12  
11 1     1   430 use PerlX::Maybe;
  1         1490  
  1         465  
12              
13 3     3 1 1713 sub artist { shift->_elem(artist => @_) }
14 3     3 1 15 sub year { shift->_elem(year => @_) }
15              
16             sub new{
17 2     2 1 4 my ($class, $obj, $url, $title, $artist, $year, $covers) = @_;
18 2         14 my $self = $class->SUPER::new;
19 2         26 $self->{obj} = $obj;
20 2 50       5 $self->{covers} = $covers if $covers;
21              
22 2         8 $self->title($title);
23 2         23 $self->artist($artist);
24 2         15 $self->year($year);
25 2         13 $self->add_url($url);
26 2         20 $self
27             }
28              
29             sub parse_page{
30 1     1 1 2 my ($self) = @_;
31 1         9 my $tree = HTML::TreeBuilder->new_from_url($self->url);
32 1         248318 my $cover_list = $tree->look_down(class => 'lista_normal');
33 1   100     738 my @covers = grep { ($_->find('img')->attr('class') // '') ne 'sprites_enviax' } $cover_list->find('a');
  5         281  
34 1         25 $self->{covers} = {map {lc $_->as_text => $self->{obj}->absurl('', $_->attr('href'))} @covers};
  4         684  
35 1         192 my @songs = $tree->look_down(id => 'pagina_disco_lista')->find('tr');
36 9         23 $self->{songs} = [map {
37 1         1357 my ($nr, $title, @extra) = $_->find('td');
38 9         680 my %ret = (id => $nr->as_text, name => $title->as_text);
39 9         263 for (@extra) {
40 27 100 100     437 next if ($_->attr('class') // '') eq 'letrano';
41 21 100       204 $ret{lyrics} = $self->{obj}->absurl('', $_->find('a')->attr('href')) if $_->as_text =~ /letra/i;
42 21 100       2207 $ret{video} = $self->{obj}->absurl('', $_->find('a')->attr('href')) if $_->as_text =~ /video/i;
43 21 100       2183 $ret{tab} = $self->{obj}->absurl('', $_->find('a')->attr('href')) if $_->as_text =~ /acorde/i;
44             }
45 9         1130 \%ret
46             } @songs]
47             }
48              
49             sub covers{
50 1     1 1 7 my ($self) = @_;
51 1 50       3 $self->parse_page unless $self->{covers};
52 1         2 %{$self->{covers}}
  1         8  
53             }
54              
55             sub cover{
56 1     1 1 940 my ($self, $cover) = @_;
57 1 50       5 $self->parse_page unless $self->{covers};
58 1         6 $self->{covers}{$cover}
59             }
60              
61             sub songs{
62 1     1 1 401 my ($self) = @_;
63 1 50       6 $self->parse_page unless $self->{songs};
64 1         2 @{$self->{songs}}
  1         7  
65             }
66              
67             1;
68             __END__