File Coverage

blib/lib/Data/ResultSet.pm
Criterion Covered Total %
statement 71 77 92.2
branch 5 6 83.3
condition n/a
subroutine 18 19 94.7
pod 10 10 100.0
total 104 112 92.8


line stmt bran cond sub pod time code
1             package Data::ResultSet;
2 2     2   66002 use warnings;
  2         5  
  2         64  
3 2     2   12 use strict;
  2         4  
  2         1737  
4              
5             our $VERSION = '1.001';
6              
7             sub new
8             {
9 1     1 1 7 my ($class) = @_;
10 1         4 return bless [], $class;
11             }
12              
13             sub make_wrappers
14             {
15 0     0 1 0 my ($class, @methods ) = @_;
16              
17 0         0 $class->make_wrappers_for_all(@methods);
18 0         0 $class->make_wrappers_for_has(@methods);
19 0         0 $class->make_wrappers_for_get(@methods);
20 0         0 $class->make_wrappers_for_get_not(@methods);
21              
22 0         0 return;
23             }
24              
25             sub make_wrappers_for_get
26             {
27 1     1 1 9 my ($class, @methods) = @_;
28              
29             my $generator = sub {
30 1     1   2 my ($methodname) = @_;
31             return sub {
32 3     3   7 return grep { $_->$methodname() } @{$_[0]};
  6         170  
  3         10  
33 1         3 };
34 1         5 };
35              
36 1         4 return $class->_generate_methods( 'get', $generator, @methods );
37             }
38              
39             sub make_wrappers_for_get_not
40             {
41 1     1 1 564 my ($class, @methods) = @_;
42              
43             my $generator = sub {
44 1     1   2 my ($methodname) = @_;
45             return sub {
46 3         2608 return grep { ! $_->$methodname() } @{$_[0]};
  6         168  
  3         11  
47 1         4 };
48 1         5 };
49              
50 1         4 return $class->_generate_methods( 'get_not', $generator, @methods );
51             }
52              
53             sub make_wrappers_for_has
54             {
55 1     4 1 10 my ($class, @methods) = @_;
56              
57             my $generator = sub {
58 1     1   2 my ($methodname) = @_;
59             return sub {
60 3         25 for( @{$_[0]} ) {
  3         11  
61 5 100       111 if( $_->$methodname() ) {
62 2         102 return 1;
63             }
64             }
65 1         51 return 0;
66 1         5 };
67 1         4 };
68              
69 1         3 return $class->_generate_methods( 'has', $generator, @methods );
70             }
71              
72             sub make_wrappers_for_all
73             {
74 1     4 1 21 my ($class, @methods) = @_;
75              
76             my $generator = sub {
77 1     1   2 my ($methodname) = @_;
78             return sub {
79 3         9 for( @{$_[0]} ) {
  3         11  
80 4 100       89 if( ! $_->$methodname() ) {
81 2         103 return 0;
82             }
83             }
84 1         81 return 1;
85 1         5 };
86 1         6 };
87              
88 1         9 return $class->_generate_methods( 'all', $generator, @methods );
89             }
90              
91             sub _generate_methods
92             {
93 4     7   8 my ($class, $prefix, $generator, @methods) = @_;
94              
95 2     2   15 no strict 'refs'; ## no critic (ProhibitNoStrict)
  2         8  
  2         684  
96 4         7 foreach my $name (@methods) {
97 4         5 my $wrappername = $name;
98 4         13 $wrappername =~ s/is_//;
99 4         10 $wrappername = "${class}::${prefix}_${wrappername}";
100 4 50       4 if( ! defined &{$wrappername} ) {
  4         23  
101 4         9 *{$wrappername} = $generator->($name);
  4         20  
102              
103             }
104             }
105              
106 4         12 return;
107             }
108              
109             sub add
110             {
111 5     5 1 1083 my ($self, $obj) = @_;
112 5         8 push @{$self}, $obj;
  5         10  
113 5         14 return $self;
114             }
115              
116             sub clear
117             {
118 1     1 1 1040 my ($self) = @_;
119 1         2 @{$self} = ();
  1         4  
120 1         4 return 1;
121             }
122              
123             sub count
124             {
125 4     4 1 2451 my ($self) = @_;
126 4         5 return scalar @{$self};
  4         18  
127             }
128              
129             sub contents
130             {
131 3     3 1 43 my ($self) = @_;
132 3         4 return @{$self};
  3         18  
133             }
134              
135             1;
136             __END__