File Coverage

blib/lib/TMDB/Collection.pm
Criterion Covered Total %
statement 39 41 95.1
branch 4 10 40.0
condition 1 2 50.0
subroutine 12 12 100.0
pod 0 5 0.0
total 56 70 80.0


line stmt bran cond sub pod time code
1             package TMDB::Collection;
2              
3             #######################
4             # LOAD CORE MODULES
5             #######################
6 3     3   17 use strict;
  3         5  
  3         108  
7 3     3   13 use warnings FATAL => 'all';
  3         6  
  3         173  
8 3     3   26 use Carp qw(croak carp);
  3         6  
  3         183  
9              
10             #######################
11             # LOAD CPAN MODULES
12             #######################
13 3     3   14 use Object::Tiny qw(id session);
  3         5  
  3         17  
14 3     3   628 use Params::Validate qw(validate_with :types);
  3         6  
  3         438  
15              
16             #######################
17             # LOAD DIST MODULES
18             #######################
19 3     3   16 use TMDB::Session;
  3         7  
  3         15  
20              
21             #######################
22             # VERSION
23             #######################
24             our $VERSION = '1.3.0';
25              
26             #######################
27             # PUBLIC METHODS
28             #######################
29              
30             ## ====================
31             ## Constructor
32             ## ====================
33             sub new {
34 1     1 0 13 my $class = shift;
35 1         33 my %opts = validate_with(
36             params => \@_,
37             spec => {
38             session => {
39             type => OBJECT,
40             isa => 'TMDB::Session',
41             },
42             id => {
43             type => SCALAR,
44             },
45             },
46             );
47              
48 1         12 my $self = $class->SUPER::new(%opts);
49 1         8 return $self;
50             } ## end sub new
51              
52             ## ====================
53             ## INFO
54             ## ====================
55             sub info {
56 4     4 0 17 my $self = shift;
57 4 50       99 return $self->session->talk(
58             {
59             method => 'collection/' . $self->id(),
60             params => {
61             language => $self->session->lang
62             ? $self->session->lang
63             : undef,
64             },
65             }
66             );
67             } ## end sub info
68              
69             ## ====================
70             ## VERSION
71             ## ====================
72             sub version {
73 1     1 0 286 my ($self) = @_;
74 1 50       22 my $response = $self->session->talk(
75             {
76             method => 'collection/' . $self->id(),
77             want_headers => 1,
78             }
79             ) or return;
80 1   50     7 my $version = $response->{etag} || q();
81 1         3 $version =~ s{"}{}gx;
82 1         2 return $version;
83             } ## end sub version
84              
85             ## ====================
86             ## INFO HELPERS
87             ## ====================
88              
89             # All titles
90 1     1 0 291 sub titles { return shift->_parse_parts('title'); }
91              
92             # Title IDs
93 1     1 0 307 sub ids { return shift->_parse_parts('id'); }
94              
95             #######################
96             # PRIVATE METHODS
97             #######################
98              
99              
100             sub _parse_parts {
101 3     3   275 my $self = shift;
102 3         4 my $key = shift;
103 3         8 my $info = $self->info();
104 3 50       84 my $parts = $info ? $info->{parts} : [];
105 3         4 my @stuff;
106 3         6 foreach my $part (@$parts) {
107 0 0       0 next unless $part->{$key};
108 0         0 push @stuff, $part->{$key};
109             } ## end foreach my $part (@$parts)
110 3 50       6 return @stuff if wantarray;
111 3         12 return \@stuff;
112             } ## end sub _parse_parts
113              
114             #######################
115             1;