File Coverage

blib/lib/WebService/Aladdin/Parser.pm
Criterion Covered Total %
statement 45 67 67.1
branch 1 8 12.5
condition n/a
subroutine 9 10 90.0
pod 0 2 0.0
total 55 87 63.2


line stmt bran cond sub pod time code
1             package WebService::Aladdin::Parser;
2              
3 2     2   10 use strict;
  2         4  
  2         81  
4 2     2   11 use warnings;
  2         4  
  2         68  
5 2     2   3220 use XML::FeedPP;
  2         63644  
  2         87  
6              
7 2     2   1434 use WebService::Aladdin::Items;
  2         9  
  2         18  
8 2     2   1580 use WebService::Aladdin::Item;
  2         7  
  2         16  
9              
10 2     2   7329 use WebService::Aladdin::Item::Book;
  2         5  
  2         20  
11 2     2   1210 use WebService::Aladdin::Item::DVD;
  2         4  
  2         18  
12 2     2   1339 use WebService::Aladdin::Item::Music;
  2         5  
  2         19  
13              
14             sub parse_product {
15 0     0 0 0 my ($class, $res) = @_;
16              
17 0         0 my $data = XML::FeedPP->new($res->content);
18 0         0 $data->normalize();
19              
20 0         0 my @items = $data->get_item();
21 0         0 my $i = $items[0];
22              
23 0         0 my $item = WebService::Aladdin::Item->new;
24 0 0       0 if ($i->{'aladdin:bookinfo'}) {
    0          
    0          
25 0         0 $item = WebService::Aladdin::Item::Book->new;
26 0         0 $item->init(delete $i->{'aladdin:bookinfo'});
27             }
28             elsif ($i->{'aladdin:musicinfo'}) {
29 0         0 $item = WebService::Aladdin::Item::Music->new;
30 0         0 $item->init(delete $i->{'aladdin:musicinfo'});
31             }
32             elsif ($i->{'aladdin:dvdinfo'}) {
33 0         0 $item = WebService::Aladdin::Item::DVD->new;
34 0         0 $item->init(delete $i->{'aladdin:dvdinfo'});
35             }
36              
37 0         0 foreach my $key (keys %{ $i }) {
  0         0  
38 0         0 my $type = $key;
39 0         0 $type =~ s/(?:aladdin:|dc:|:encoded)//;
40 0         0 $type = lcfirst $type;
41 0         0 $item->$type($i->{$key});
42             }
43 0         0 $item;
44             }
45              
46             sub parse_search {
47 1     1 0 4 my ($class, $res) = @_;
48              
49 1         49 my $p = WebService::Aladdin::Items->new;
50 1         14 my @items;
51              
52 1 50       7 if ($res->is_success) {
53 1         22 my $data = XML::FeedPP->new($res->content);
54 1         5859568 for my $i ( $data->get_item() ) {
55 10         55 my $item = WebService::Aladdin::Item->new;
56 10         74 foreach my $key (keys %{ $i }) {
  10         46  
57 220         925 my $type = $key;
58 220         471 $type =~ s/^(?:aladdin|dc)://;
59 220         230 $type =~ s/:encoded//;
60 220         268 $type = lcfirst $type;
61 220         574 $item->$type($i->{$key});
62             }
63 10         73 unshift @items, $item;
64             }
65 1         7 $p->items(\@items);
66 1         89 $p->itemsPerPage($data->get('opensearch:itemsPerPage'));
67 1         55 $p->totalResults($data->get('opensearch:totalResults'));
68 1         18 $p->link($data->get('link'));
69 1         19 $p->startIndex($data->get('opensearch:startIndex'));
70             } else {
71 0         0 $p->status($res->status_line);
72 0         0 $p->items([]);
73             }
74 1         131 $p;
75             }
76              
77             1;