Bugzilla – Attachment 118680 Details for
Bug 28026
Add a 'call_recursive' method to Koha::Plugins
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 28026: Add call_recursive() as a supliment for call()
Bug-28026-Add-callrecursive-as-a-supliment-for-cal.patch (text/plain), 3.95 KB, created by
Martin Renvoize (ashimema)
on 2021-03-23 16:21:41 UTC
(
hide
)
Description:
Bug 28026: Add call_recursive() as a supliment for call()
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2021-03-23 16:21:41 UTC
Size:
3.95 KB
patch
obsolete
>From 070909a8be99b5c43e1b29c6ac03f00011732f2c Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Tue, 23 Mar 2021 16:07:20 +0000 >Subject: [PATCH] Bug 28026: Add call_recursive() as a supliment for call() > >The method call() is not sufficient for all plugin hook types. It's >possible that more than one plugin will be installed that wants to >return the arguaments passed in an updated form. These transformation >plugins need to work recursively rather than independantly. > >This patch adss a `call_recursive()` method that takes the output of >the first plugin and uses it as the input for the next plugin and so >on. This allowes each plugin to see the current version of the arguament >list and modify it as necessary. > >Test plan >1/ Run the included tests - t/db_dependent/Koha/Plugins/Plugins.t > >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > Koha/Plugins.pm | 35 +++++++++++++++++++++++++++ > t/db_dependent/Koha/Plugins/Plugins.t | 32 +++++++++++++++++++++++- > 2 files changed, 66 insertions(+), 1 deletion(-) > >diff --git a/Koha/Plugins.pm b/Koha/Plugins.pm >index 36e6090415..bedd220b6f 100644 >--- a/Koha/Plugins.pm >+++ b/Koha/Plugins.pm >@@ -82,6 +82,41 @@ sub call { > return @responses; > } > >+=head2 call_recursive >+ >+Calls a plugin method for all enabled plugins, >+passing the return value from the previous plugin >+to the next one. >+ >+ @response = Koha::Plugins->call_recursive($method, @args) >+ >+=cut >+ >+sub call_recursive { >+ my ( $class, $method, @args ) = @_; >+ >+ my @responses; >+ if ( C4::Context->config('enable_plugins') ) { >+ >+ my @plugins = $class->new( { enable_plugins => 1 } )->GetPlugins( { method => $method } ); >+ @plugins = grep { $_->can($method) } @plugins; >+ >+ foreach my $plugin (@plugins) { >+ my @response = eval { $plugin->$method(@args) }; >+ >+ if ($@) { >+ warn sprintf( "Plugin error (%s): %s", $plugin->get_metadata->{name}, $@ ); >+ next; >+ } else { >+ @args = @response; >+ } >+ } >+ >+ } >+ >+ return @args; >+} >+ > =head2 GetPlugins > > This will return a list of all available plugins, optionally limited by >diff --git a/t/db_dependent/Koha/Plugins/Plugins.t b/t/db_dependent/Koha/Plugins/Plugins.t >index f49bd252fc..2480d99a41 100755 >--- a/t/db_dependent/Koha/Plugins/Plugins.t >+++ b/t/db_dependent/Koha/Plugins/Plugins.t >@@ -25,7 +25,7 @@ use File::Temp qw( tempdir tempfile ); > use FindBin qw($Bin); > use Module::Load::Conditional qw(can_load); > use Test::MockModule; >-use Test::More tests => 53; >+use Test::More tests => 54; > > use C4::Context; > use Koha::Database; >@@ -78,6 +78,36 @@ subtest 'call() tests' => sub { > $schema->storage->txn_rollback; > }; > >+subtest 'call_recursive() tests' => sub { >+ plan tests => 6; >+ >+ $schema->storage->txn_begin; >+ # Temporarily remove any installed plugins data >+ Koha::Plugins::Methods->delete; >+ >+ t::lib::Mocks::mock_config('enable_plugins', 1); >+ my $plugins = Koha::Plugins->new({ enable_plugins => 1 }); >+ my @plugins = $plugins->InstallPlugins; >+ foreach my $plugin (@plugins) { >+ $plugin->enable(); >+ } >+ >+ my (@responses) = Koha::Plugins->call_recursive('item_barcode_transform', 1); >+ is( scalar @responses, 1, "Got back one element" ); >+ is( $responses[0], 4, "Got expected response" ); >+ >+ (@responses) = Koha::Plugins->call_recursive('item_barcode_transform', 'abcd'); >+ is( scalar @responses, 1, "Got back one element" ); >+ is( $responses[0], 'abcd', "Got expected response" ); >+ >+ t::lib::Mocks::mock_config('enable_plugins', 0); >+ (@responses) = Koha::Plugins->call_recursive('item_barcode_transform', 1); >+ is( scalar @responses, 1, "Got back one element" ); >+ is( $responses[0], 1, "call_recursive should return the original arguments if plugins are disabled" ); >+ >+ $schema->storage->txn_rollback; >+}; >+ > subtest 'GetPlugins() tests' => sub { > > plan tests => 2; >-- >2.20.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 28026
:
118679
|
118680
|
122443
|
122527
|
123788
|
123789
|
123829
|
124311