Skip to content

Commit

Permalink
Add a way to remove callbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
winzou committed May 6, 2014
1 parent 15b50f5 commit 3b4e163
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,14 @@ private function addSubCallbackSection(NodeBuilder $callbacks, $type)
{
$callbacks
->arrayNode($type)
->useAttributeAsKey('name')
->prototype('array')
->children()
->scalarNode('on')->end()
->variableNode('do')->end()
->variableNode('from')->end()
->variableNode('to')->end()
->scalarNode('disabled')->defaultValue(false)->end()
->end()
->end()
->end();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ public function load(array $configs, ContainerBuilder $container)
$factoryDefinition = $container->getDefinition('finite.factory');

foreach ($config as $key => $stateMachineConfig) {
$stateMachineConfig = $this->removeDisabledCallbacks($stateMachineConfig);

$definition = clone $container->getDefinition('finite.array_loader');
$definition->addArgument($stateMachineConfig);
$definition->addTag('finite.loader');
Expand All @@ -40,4 +42,28 @@ public function load(array $configs, ContainerBuilder $container)

$container->removeDefinition('finite.array_loader');
}

/**
* Remove callback entries where index 'disabled' is set to true
*
* @param array $config
*
* @return array
*/
protected function removeDisabledCallbacks(array $config)
{
if (!isset($config['callbacks'])) {
return $config;
}

foreach (array('before', 'after') as $position) {
foreach ($config['callbacks'][$position] as $i => $callback) {
if ($callback['disabled']) {
unset($config['callbacks'][$position][$i]);
}
}
}

return $config;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,10 @@ private function getExpectedConfig()
),
'callbacks' => array(
'before' => array(
array('on' => '1_to_2', 'do' => array('@my.listener.service', 'on1To2'))
'callback1' => array('on' => '1_to_2', 'do' => array('@my.listener.service', 'on1To2'), 'disabled' => false)
),
'after' => array(
array('from' => '-state3', 'to' => array('state2', 'state3'), 'do' => array('@my.listener.service', 'on1To2'))
'callback2' => array('from' => '-state3', 'to' => array('state2', 'state3'), 'do' => array('@my.listener.service', 'on1To2'), 'disabled' => false)
)
)
);
Expand Down Expand Up @@ -118,10 +118,11 @@ private function getConfig()
),
'callbacks' => array(
'before' => array(
array('on' => '1_to_2', 'do' => array('@my.listener.service', 'on1To2'))
'callback1' => array('on' => '1_to_2', 'do' => array('@my.listener.service', 'on1To2'))
),
'after' => array(
array('from' => '-state3', 'to' => array('state2', 'state3'), 'do' => array('@my.listener.service', 'on1To2'))
'callback2' => array('from' => '-state3', 'to' => array('state2', 'state3'), 'do' => array('@my.listener.service', 'on1To2')),
'callback3' => array('disabled' => true)
)
)
)
Expand Down

0 comments on commit 3b4e163

Please sign in to comment.