File Coverage

blib/lib/Data/Page/Navigation.pm
Criterion Covered Total %
statement 31 31 100.0
branch 12 12 100.0
condition 1 2 50.0
subroutine 6 6 100.0
pod 0 3 0.0
total 50 54 92.5


line stmt bran cond sub pod time code
1             package Data::Page::Navigation;
2 2     2   1561 use strict;
  2         4  
  2         72  
3 2     2   10 use warnings;
  2         2  
  2         52  
4 2     2   1927 use Data::Page;
  2         14673  
  2         20  
5              
6             our $VERSION = '0.06';
7              
8             package
9             Data::Page;
10              
11             __PACKAGE__->mk_accessors(qw/pages_per_navigation/);
12              
13             sub pages_in_navigation {
14 15     15 0 1915 my $self = shift;
15              
16 15         46 my $last_page = $self->last_page;
17 15   50     429 my $pages_per_navigation = shift || $self->pages_per_navigation || 10;
18 15 100       141 return wantarray ? ($self->first_page..$last_page) : [($self->first_page..$last_page)]
    100          
19             if $pages_per_navigation >= $last_page;
20              
21 13         33 my $prev = $self->current_page - 1;
22 13         538 my $next = $self->current_page + 1;
23 13         523 my @ret = ($self->current_page);
24 13         561 my $i=0;
25 13         65 while(@ret < $pages_per_navigation){
26 116 100       209 if($i%2){
27 53 100       120 unshift(@ret,$prev) if $self->first_page <= $prev;
28 53         234 --$prev;
29             }else{
30 63 100       183 push(@ret,$next) if $last_page >= $next;
31 63         72 $next++;
32             }
33 116         256 $i++;
34             }
35 13 100       89 return wantarray ? @ret : \@ret;
36             }
37              
38             sub first_navigation_page {
39 4     4 0 7 my $self = shift;
40 4         13 my @pages = $self->pages_in_navigation;
41 4         27 shift @pages;
42             }
43              
44             sub last_navigation_page {
45 4     4 0 9 my $self = shift;
46 4         10 my @pages = $self->pages_in_navigation;
47 4         19 pop @pages;
48             }
49              
50              
51             1;
52             __END__