Bug 26555: Add ->messages and ->add_message to Koha::Object
This patch adds a way to make Koha::Object-derived classes to carry messages around. This targets non-fatal errors, or around action flags for the caller, to avoid complex exception handling on the controllers when it is not expected to be fatal. To test: 1. Apply this patchset 2. Run: $ kshell k$ prove t/db_dependent/Koha/Object.t => SUCCESS: Tests pass! 3. Sign off :-D Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
parent
aa69ef6972
commit
d576f887c1
2 changed files with 65 additions and 1 deletions
|
@ -28,6 +28,7 @@ use Try::Tiny;
|
|||
use Koha::Database;
|
||||
use Koha::Exceptions::Object;
|
||||
use Koha::DateUtils;
|
||||
use Koha::Object::Message;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
|
@ -77,6 +78,8 @@ sub new {
|
|||
$schema->resultset( $class->_type() )->new($attributes);
|
||||
}
|
||||
|
||||
$self->{_messages} = [];
|
||||
|
||||
croak("No _type found! Koha::Object must be subclassed!")
|
||||
unless $class->_type();
|
||||
|
||||
|
@ -332,6 +335,46 @@ sub get_from_storage {
|
|||
return $object_class->_new_from_dbic($stored_object);
|
||||
}
|
||||
|
||||
=head3 $object->messages
|
||||
|
||||
my @messages = @{ $object->messages };
|
||||
|
||||
Returns the (probably non-fatal) messages that were recorded on the object.
|
||||
|
||||
=cut
|
||||
|
||||
sub messages {
|
||||
my ( $self ) = @_;
|
||||
return $self->{_messages};
|
||||
}
|
||||
|
||||
=head3 $object->add_message
|
||||
|
||||
try {
|
||||
<some action that might fail>
|
||||
}
|
||||
catch {
|
||||
if ( <fatal condition> ) {
|
||||
Koha::Exception->throw...
|
||||
}
|
||||
|
||||
# This is a non fatal error, notify the caller
|
||||
$self->add_message({ message => $error, type => 'error' });
|
||||
}
|
||||
return $self;
|
||||
|
||||
Adds a message.
|
||||
|
||||
=cut
|
||||
|
||||
sub add_message {
|
||||
my ( $self, $params ) = @_;
|
||||
|
||||
push @{ $self->{_messages} }, Koha::Object::Message->new($params);
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
=head3 $object->TO_JSON
|
||||
|
||||
Returns an unblessed representation of the object, suitable for JSON output.
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
use Modern::Perl;
|
||||
|
||||
use Test::More tests => 20;
|
||||
use Test::More tests => 21;
|
||||
use Test::Exception;
|
||||
use Test::Warn;
|
||||
use DateTime;
|
||||
|
@ -867,3 +867,24 @@ subtest 'set_or_blank' => sub {
|
|||
|
||||
$schema->storage->txn_rollback;
|
||||
};
|
||||
|
||||
subtest 'messages() and add_message() tests' => sub {
|
||||
|
||||
plan tests => 6;
|
||||
|
||||
my $patron = Koha::Patron->new;
|
||||
|
||||
my @messages = @{ $patron->messages };
|
||||
is( scalar @messages, 0, 'No messages' );
|
||||
|
||||
$patron->add_message({ message => "message_1" });
|
||||
$patron->add_message({ message => "message_2" });
|
||||
|
||||
@messages = @{ $patron->messages };
|
||||
|
||||
is( scalar @messages, 2, 'Messages are returned' );
|
||||
is( ref($messages[0]), 'Koha::Object::Message', 'Right type returned' );
|
||||
is( ref($messages[1]), 'Koha::Object::Message', 'Right type returned' );
|
||||
is( $messages[0]->message, 'message_1', 'Right message recorded' );
|
||||
is( $messages[1]->message, 'message_2', 'Right message recorded' );
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue