File Coverage

blib/lib/Bootylicious/ArticlePager.pm
Criterion Covered Total %
statement 42 43 97.6
branch 13 14 92.8
condition n/a
subroutine 9 9 100.0
pod 0 5 0.0
total 64 71 90.1


line stmt bran cond sub pod time code
1             package Bootylicious::ArticlePager;
2              
3 5     5   499 use strict;
  5         6  
  5         107  
4 5     5   14 use warnings;
  5         6  
  5         96  
5              
6 5     5   10 use base 'Mojo::Base';
  5         12  
  5         317  
7              
8 5     5   319 use Bootylicious::Timestamp;
  5         5  
  5         24  
9              
10             __PACKAGE__->attr('timestamp');
11             __PACKAGE__->attr(limit => 10);
12             __PACKAGE__->attr('iterator');
13              
14             sub prev {
15 6     6 0 8 my $self = shift;
16              
17 6         14 my $i = $self->iterator;
18              
19 6         26 my $first = $self->articles->first;
20              
21 6         15 $i->rewind;
22 6         16 while (my $article = $i->next) {
23 8 100       24 if ($article->created->epoch == $first->created->epoch) {
24 5         25 return $i->prev($self->limit)->last;
25             }
26             }
27              
28 1         2 return;
29             }
30              
31             sub prev_timestamp {
32 5     5 0 3221 my $self = shift;
33              
34 5         15 my $prev = $self->prev;
35 5 50       39 return '' unless $prev;
36              
37 0         0 return $prev->created->timestamp;
38             }
39              
40             sub next {
41 6     6 0 404 my $self = shift;
42              
43 6         14 my $i = $self->iterator;
44              
45 6         25 my $last = $self->articles->last;
46              
47 6         14 $i->rewind;
48 6         19 while (my $article = $i->next) {
49 12 100       25 last if $article->created->epoch == $last->created->epoch;
50             }
51              
52 6         29 return $i->next;
53             }
54              
55             sub next_timestamp {
56 5     5 0 218 my $self = shift;
57              
58 5         12 my $next = $self->next;
59 5 100       24 return '' unless $next;
60              
61 1         3 return $next->created->timestamp;
62             }
63              
64             sub articles {
65 31     31 0 728 my $self = shift;
66              
67 31 100       123 return $self->{articles} if $self->{articles};
68              
69 10         31 my $i = $self->iterator;
70              
71 10 100       47 if ($self->timestamp) {
72 1         5 while (my $article = $i->next) {
73             last
74 4 100       7 if $article->created->epoch
75             <= Bootylicious::Timestamp->new(timestamp => $self->timestamp)->epoch;
76             }
77             }
78              
79 10         60 $i->prev;
80              
81 10         25 return $self->{articles} = $i->next($self->limit);
82             }
83              
84             1;