File Coverage

blib/lib/Acme/2zicon.pm
Criterion Covered Total %
statement 29 45 64.4
branch 2 12 16.6
condition n/a
subroutine 8 11 72.7
pod 4 4 100.0
total 43 72 59.7


line stmt bran cond sub pod time code
1             package Acme::2zicon;
2 3     3   158223 use 5.008001;
  3         10  
3 3     3   17 use strict;
  3         5  
  3         97  
4 3     3   28 use warnings;
  3         5  
  3         173  
5              
6 3     3   18 use Carp qw(croak);
  3         5  
  3         240  
7 3     3   2023 use DateTime;
  3         297482  
  3         1551  
8              
9             our $VERSION = "0.5";
10              
11             my @members = qw(
12             KinoshitaHiyori
13             MatobaKarin
14             NagataMinari
15             NakamuraAkari
16             NemotoNagi
17             NishiNanami
18             OkumuraNonoka
19             ShigematsuYuka
20             SuyamaEmiri
21             TsurumiMoe
22             );
23              
24             sub new {
25 2     2 1 25 my $class = shift;
26 2         10 my $self = bless {members => []}, $class;
27              
28 2         11 $self->_initialize;
29              
30 2         8 return $self;
31             }
32              
33             sub members {
34 2     2 1 10 my ($self, $type, @members) = @_;
35 2 50       7 @members = @{$self->{members}} unless @members;
  2         8  
36              
37 2 50       36 return @members unless $type;
38             }
39              
40             sub sort {
41 0     0 1 0 my ($self, $type, $order, @members) = @_;
42 0 0       0 @members = $self->members unless @members;
43              
44             # order by desc if $order is true
45 0 0       0 if ($order) {
46 0         0 return sort {$b->$type <=> $a->$type} @members;
  0         0  
47             }
48             else {
49 0         0 return sort {$a->$type <=> $b->$type} @members;
  0         0  
50             }
51             }
52              
53             sub select {
54 0     0 1 0 my ($self, $type, $number, $operator, @members) = @_;
55              
56             $self->_die('invalid operator was passed in')
57 0 0       0 unless grep {$operator eq $_} qw(== >= <= > <);
  0         0  
58              
59 0 0       0 @members = $self->members unless @members;
60 0         0 my $compare = eval "(sub { \$number $operator \$_[0] })";
61              
62 0         0 return grep { $compare->($_->$type) } @members;
  0         0  
63             }
64              
65             sub _initialize {
66 2     2   5 my $self = shift;
67              
68 2         7 for my $member (@members) {
69 20         41 my $module_name = 'Acme::2zicon::'.$member;
70              
71 20         1349 eval qq|require $module_name;|;
72 20         57 push @{$self->{members}}, $module_name->new;
  20         166  
73             }
74              
75 2         4 return 1;
76             }
77              
78             sub _die {
79 0     0     my ($self, $message) = @_;
80 0           Carp::croak($message);
81             }
82              
83             1;
84             __END__