Skip to content

Commit

Permalink
Changing how mergeVars are handled, so the difference of app/current …
Browse files Browse the repository at this point in the history
…is used as a base.

Also fixing issues where passing settings to helpers in AppController could result in them not being correctly merged.
Thanks to hashmich for the partial patch.
Fixes #1183
  • Loading branch information
markstory committed Nov 21, 2010
1 parent e0a8ffe commit 6d9b000
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 7 deletions.
8 changes: 4 additions & 4 deletions cake/libs/controller/controller.php
Expand Up @@ -430,15 +430,15 @@ function __mergeVars() {

foreach ($merge as $var) {
if (!empty($appVars[$var]) && is_array($this->{$var})) {
if ($var === 'components') {
if ($var !== 'uses') {
$normal = Set::normalize($this->{$var});
$app = Set::normalize($appVars[$var]);
if ($app !== $normal) {
$this->{$var} = Set::merge($app, $normal);
}
} else {
$this->{$var} = Set::merge(
$this->{$var}, array_diff($appVars[$var], $this->{$var})
array_diff($appVars[$var], $this->{$var}), $this->{$var}
);
}
}
Expand All @@ -456,15 +456,15 @@ function __mergeVars() {

foreach ($merge as $var) {
if (isset($appVars[$var]) && !empty($appVars[$var]) && is_array($this->{$var})) {
if ($var === 'components') {
if ($var !== 'uses') {
$normal = Set::normalize($this->{$var});
$app = Set::normalize($appVars[$var]);
if ($app !== $normal) {
$this->{$var} = Set::merge($app, $normal);
}
} else {
$this->{$var} = Set::merge(
$this->{$var}, array_diff($appVars[$var], $this->{$var})
array_diff($appVars[$var], $this->{$var}), $this->{$var}
);
}
}
Expand Down
2 changes: 1 addition & 1 deletion cake/tests/cases/libs/controller/controller.test.php
Expand Up @@ -1149,7 +1149,7 @@ function testMergeVars() {
? array_merge($appVars['uses'], $testVars['uses'])
: $testVars['uses'];

$this->assertEqual(count(array_diff($TestController->helpers, $helpers)), 0);
$this->assertEqual(count(array_diff_assoc(Set::normalize($TestController->helpers), Set::normalize($helpers))), 0);
$this->assertEqual(count(array_diff($TestController->uses, $uses)), 0);
$this->assertEqual(count(array_diff_assoc(Set::normalize($TestController->components), Set::normalize($components))), 0);

Expand Down
23 changes: 21 additions & 2 deletions cake/tests/cases/libs/controller/controller_merge_vars.test.php
Expand Up @@ -185,6 +185,25 @@ function testHelperSettingMergingNoDuplication() {
$this->assertEqual($Controller->helpers, $expected, 'Duplication of settings occured. %s');
}

/**
* Test that helpers declared in appcontroller come before those in the subclass
* orderwise
*
* @return void
*/
function testHelperOrderPrecedence() {
$Controller =& new MergeVariablesController();
$Controller->helpers = array('Custom', 'Foo' => array('something'));
$Controller->constructClasses();

$expected = array(
'MergeVar' => array('format' => 'html', 'terse'),
'Custom' => null,
'Foo' => array('something')
);
$this->assertIdentical($Controller->helpers, $expected, 'Order is incorrect. %s');
}

/**
* test merging of vars with plugin
*
Expand All @@ -204,8 +223,8 @@ function testMergeVarsWithPlugin() {
$this->assertEqual($Controller->components, $expected, 'Components are unexpected %s');

$expected = array(
'Javascript',
'MergeVar' => array('format' => 'html', 'terse')
'MergeVar' => array('format' => 'html', 'terse'),
'Javascript' => null
);
$this->assertEqual($Controller->helpers, $expected, 'Helpers are unexpected %s');

Expand Down

0 comments on commit 6d9b000

Please sign in to comment.