use Modern::Perl;
use Carp;
+use List::MoreUtils qw( none );
use Koha::Database;
=head3 Koha::Objects->find();
-my $object = Koha::Objects->find($id);
-my $object = Koha::Objects->find( { keypart1 => $keypart1, keypart2 => $keypart2 } );
+Similar to DBIx::Class::ResultSet->find this method accepts:
+ \%columns_values | @pk_values, { key => $unique_constraint, %attrs }?
+Strictly speaking, columns_values should only refer to columns under an
+unique constraint.
+
+my $object = Koha::Objects->find( { col1 => $val1, col2 => $val2 } );
+my $object = Koha::Objects->find( $id );
+my $object = Koha::Objects->find( $idpart1, $idpart2, $attrs ); # composite PK
=cut
sub find {
- my ( $self, $id ) = @_;
+ my ( $self, @pars ) = @_;
+
+ croak 'Cannot use "->find" in list context' if wantarray;
- return unless defined($id);
+ return if !@pars || none { defined($_) } @pars;
- my $result = $self->_resultset()->find($id);
+ my $result = $self->_resultset()->find( @pars );
return unless $result;
return $object;
}
+=head3 Koha::Objects->last;
+
+my $object = Koha::Objects->last;
+
+Returns the last object that is part of this set.
+Returns undef if there are no object to return.
+
+=cut
+
+sub last {
+ my ( $self ) = @_;
+
+ my $count = $self->_resultset->count;
+ return unless $count;
+
+ my ( $result ) = $self->_resultset->slice($count - 1, $count - 1);
+
+ my $object = $self->object_class()->_new_from_dbic( $result );
+
+ return $object;
+}
+
+
+
=head3 Koha::Objects->reset();
Koha::Objects->reset();
return [ map { $_->unblessed } $self->as_list ];
}
+=head3 Koha::Objects->get_column
+
+Return all the values of this set for a given column
+
+=cut
+
+sub get_column {
+ my ($self, $column_name) = @_;
+ return $self->_resultset->get_column( $column_name )->all;
+}
+
+=head3 Koha::Objects->TO_JSON
+
+Returns an unblessed representation of objects, suitable for JSON output.
+
+=cut
+
+sub TO_JSON {
+ my ($self) = @_;
+
+ return [ map { $_->TO_JSON } $self->as_list ];
+}
+
=head3 Koha::Objects->_wrap
wraps the DBIC object in a corresponding Koha object
sub AUTOLOAD {
my ( $self, @params ) = @_;
- my @known_methods = qw( count pager update delete result_class single );
+ my @known_methods = qw( count is_paged pager update delete result_class single slice );
my $method = our $AUTOLOAD;
$method =~ s/.*:://;
- carp "The method $method is not covered by tests" and return unless grep {/^$method$/} @known_methods;
+
+ unless ( grep { /^$method$/ } @known_methods ) {
+ my $class = ref($self) ? ref($self) : $self;
+ Koha::Exceptions::Object::MethodNotCoveredByTests->throw(
+ error => sprintf("The method %s->%s is not covered by tests!", $class, $method),
+ show_trace => 1
+ );
+ }
+
my $r = eval { $self->_resultset->$method(@params) };
if ( $@ ) {
carp "No method $method found for " . ref($self) . " " . $@;