Bug 13019: [QA Follow-up] Rename new_from_dbic and few typos
[koha.git] / Koha / Objects.pm
1 package Koha::Objects;
2
3 # Copyright ByWater Solutions 2014
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 3 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
20 use Modern::Perl;
21
22 use Carp;
23
24 use Koha::Database;
25
26 our $type;
27
28 =head1 NAME
29
30 Koha::Objects - Koha Object set base class
31
32 =head1 SYNOPSIS
33
34     use Koha::Objects;
35     my @objects = Koha::Objects->search({ borrowernumber => $borrowernumber});
36
37 =head1 DESCRIPTION
38
39 This class must be subclassed.
40
41 =head1 API
42
43 =head2 Class Methods
44
45 =cut
46
47 =head3 Koha::Objects->new();
48
49 my $object = Koha::Objects->new();
50
51 =cut
52
53 sub new {
54     my ($class) = @_;
55     my $self = {};
56
57     bless( $self, $class );
58 }
59
60 =head3 Koha::Objects->_new_from_dbic();
61
62 my $object = Koha::Objects->_new_from_dbic( $resultset );
63
64 =cut
65
66 sub _new_from_dbic {
67     my ( $class, $resultset ) = @_;
68     my $self = { _resultset => $resultset };
69
70     bless( $self, $class );
71 }
72
73 =head3 Koha::Objects->find();
74
75 my $object = Koha::Objects->find($id);
76 my $object = Koha::Objects->find( { keypart1 => $keypart1, keypart2 => $keypart2 } );
77
78 =cut
79
80 sub find {
81     my ( $self, $id ) = @_;
82
83     my $result = $self->_resultset()->find($id);
84
85     my $object = $self->object_class()->_new_from_dbic( $result );
86
87     return $object;
88 }
89
90 =head3 Koha::Objects->search();
91
92 my @objects = Koha::Objects->search($params);
93
94 =cut
95
96 sub search {
97     my ( $self, $params ) = @_;
98
99     if (wantarray) {
100         my @dbic_rows = $self->_resultset()->search($params);
101
102         return $self->_wrap(@dbic_rows);
103
104     }
105     else {
106         my $class = ref($self) ? ref($self) : $self;
107         my $rs = $self->_resultset()->search($params);
108
109         return $class->_new_from_dbic($rs);
110     }
111 }
112
113 =head3 Koha::Objects->count();
114
115 my @objects = Koha::Objects->count($params);
116
117 =cut
118
119 sub count {
120     my ( $self, $params ) = @_;
121
122     return $self->_resultset()->count($params);
123 }
124
125 =head3 Koha::Objects->next();
126
127 my $object = Koha::Objects->next();
128
129 Returns the next object that is part of this set.
130 Returns undef if there are no more objects to return.
131
132 =cut
133
134 sub next {
135     my ( $self ) = @_;
136
137     my $result = $self->_resultset()->next();
138     return unless $result;
139
140     my $object = $self->object_class()->_new_from_dbic( $result );
141
142     return $object;
143 }
144
145 =head3 Koha::Objects->reset();
146
147 Koha::Objects->reset();
148
149 resets iteration so the next call to next() will start agein
150 with the first object in a set.
151
152 =cut
153
154 sub reset {
155     my ( $self ) = @_;
156
157     $self->_resultset()->reset();
158
159     return $self;
160 }
161
162 =head3 Koha::Objects->as_list();
163
164 Koha::Objects->as_list();
165
166 Returns an arrayref of the objects in this set.
167
168 =cut
169
170 sub as_list {
171     my ( $self ) = @_;
172
173     my @dbic_rows = $self->_resultset()->all();
174
175     my @objects = $self->_wrap(@dbic_rows);
176
177     return wantarray ? @objects : \@objects;
178 }
179
180 =head3 Koha::Objects->_wrap
181
182 wraps the DBIC object in a corresponding Koha object
183
184 =cut
185
186 sub _wrap {
187     my ( $self, @dbic_rows ) = @_;
188
189     my @objects = map { $self->object_class()->_new_from_dbic( $_ ) } @dbic_rows;
190
191     return @objects;
192 }
193
194 =head3 Koha::Objects->_resultset
195
196 Returns the internal resultset or creates it if undefined
197
198 =cut
199
200 sub _resultset {
201     my ($self) = @_;
202
203     if ( ref($self) ) {
204         $self->{_resultset} ||=
205           Koha::Database->new()->schema()->resultset( $self->type() );
206
207         return $self->{_resultset};
208     }
209     else {
210         return Koha::Database->new()->schema()->resultset( $self->type() );
211     }
212 }
213
214 =head3 type
215
216 The type method must be set for all child classes.
217 The value returned by it should be the DBIC resultset name.
218 For example, for holds, type should return 'Reserve'.
219
220 =cut
221
222 sub type { }
223
224 =head3 object_class
225
226 This method must be set for all child classes.
227 The value returned by it should be the name of the Koha
228 object class that is returned by this class.
229 For example, for holds, object_class should return 'Koha::Hold'.
230
231 =cut
232
233 sub object_class { }
234
235 sub DESTROY { }
236
237 =head1 AUTHOR
238
239 Kyle M Hall <kyle@bywatersolutions.com>
240
241 =cut
242
243 1;