From cf6a576308fc444483184fb324ed5a72db92e9b0 Mon Sep 17 00:00:00 2001 From: dantleech Date: Wed, 14 Aug 2013 10:55:50 +0100 Subject: [PATCH] Enable an actual closure to be passed to CliHelper apply-closures This enables commands extending nodes:update to take advantage of this feature without passing strings. --- .../Util/Console/Helper/PhpcrCliHelper.php | 20 +++++++++++++------ .../Command/NodesUpdateCommandTest.php | 7 +++++-- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/PHPCR/Util/Console/Helper/PhpcrCliHelper.php b/src/PHPCR/Util/Console/Helper/PhpcrCliHelper.php index 4e9ff06..4fb00f1 100644 --- a/src/PHPCR/Util/Console/Helper/PhpcrCliHelper.php +++ b/src/PHPCR/Util/Console/Helper/PhpcrCliHelper.php @@ -116,12 +116,20 @@ public function processNode(OutputInterface $output, $node, $options) $node->removeMixin($removeMixin); } - foreach ($options['applyClosures'] as $closureString) { - $closure = create_function('$session, $node', $closureString); - $output->writeln(sprintf( - ' > Applying closure: %s', - strlen($closureString) > 75 ? substr($closureString, 0, 72).'...' : $closureString - )); + foreach ($options['applyClosures'] as $closure) { + if ($closure instanceof \Closure) { + $output->writeln( + ' > Applying closure' + ); + } else { + $closureString = $closure; + $closure = create_function('$session, $node', $closure); + $output->writeln(sprintf( + ' > Applying closure: %s', + strlen($closureString) > 75 ? substr($closureString, 0, 72).'...' : $closureString + )); + } + $closure($this->session, $node); } diff --git a/tests/PHPCR/Tests/Util/Console/Command/NodesUpdateCommandTest.php b/tests/PHPCR/Tests/Util/Console/Command/NodesUpdateCommandTest.php index dffc26a..30f8b68 100644 --- a/tests/PHPCR/Tests/Util/Console/Command/NodesUpdateCommandTest.php +++ b/tests/PHPCR/Tests/Util/Console/Command/NodesUpdateCommandTest.php @@ -143,13 +143,16 @@ public function testApplyClosure() '--query' => "SELECT foo FROM bar", '--no-interaction' => true, '--apply-closure' => array( - '$session->getNodeByIdentifier("/foo"); $node->setProperty("foo", "bar");' + '$session->getNodeByIdentifier("/foo"); $node->setProperty("foo", "bar");', + function ($session, $node) { + $node->setProperty('foo', 'bar'); + } ), ); $this->setupQueryManager(array('query' => 'SELECT foo FROM bar')); - $this->node1->expects($this->once()) + $this->node1->expects($this->exactly(2)) ->method('setProperty') ->with('foo', 'bar');