Skip to content

Commit

Permalink
allow serialize in json and xml alias
Browse files Browse the repository at this point in the history
  • Loading branch information
jippi committed Jul 6, 2013
1 parent fd2c096 commit cbb4f7d
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 4 deletions.
19 changes: 19 additions & 0 deletions lib/Cake/Test/Case/View/JsonViewTest.php
Expand Up @@ -67,6 +67,25 @@ public function testRenderWithoutViewMultiple() {
$this->assertSame('application/json', $Response->type());
}

/**
* Test render with an array in _serialize and alias
*
* @return void
*/
public function testRenderWithoutViewMultipleAndAlias() {
$Request = new CakeRequest();
$Response = new CakeResponse();
$Controller = new Controller($Request, $Response);
$data = array('original_name' => 'my epic name', 'user' => 'fake', 'list' => array('item1', 'item2'));
$Controller->set($data);
$Controller->set('_serialize', array('new_name' => 'original_name', 'user'));
$View = new JsonView($Controller);
$output = $View->render(false);

$this->assertSame(json_encode(array('new_name' => $data['original_name'], 'user' => $data['user'])), $output);
$this->assertSame('application/json', $Response->type());
}

/**
* testJsonpResponse method
*
Expand Down
29 changes: 29 additions & 0 deletions lib/Cake/Test/Case/View/XmlViewTest.php
Expand Up @@ -103,6 +103,35 @@ public function testRenderWithoutViewMultiple() {
$this->assertSame(Xml::build($expected)->asXML(), $output);
}

/**
* Test render with an array in _serialize and alias
*
* @return void
*/
public function testRenderWithoutViewMultipleAndAlias() {
$Request = new CakeRequest();
$Response = new CakeResponse();
$Controller = new Controller($Request, $Response);
$data = array('original_name' => 'my epic name', 'user' => 'fake', 'list' => array('item1', 'item2'));
$Controller->set($data);
$Controller->set('_serialize', array('new_name' => 'original_name', 'user'));
$View = new XmlView($Controller);
$this->assertSame('application/xml', $Response->type());
$output = $View->render(false);
$expected = array(
'response' => array('new_name' => $data['original_name'], 'user' => $data['user'])
);
$this->assertSame(Xml::build($expected)->asXML(), $output);

$Controller->set('_rootNode', 'custom_name');
$View = new XmlView($Controller);
$output = $View->render(false);
$expected = array(
'custom_name' => array('new_name' => $data['original_name'], 'user' => $data['user'])
);
$this->assertSame(Xml::build($expected)->asXML(), $output);
}

/**
* testRenderWithView method
*
Expand Down
7 changes: 5 additions & 2 deletions lib/Cake/View/JsonView.php
Expand Up @@ -119,8 +119,11 @@ public function render($view = null, $layout = null) {
protected function _serialize($serialize) {
if (is_array($serialize)) {
$data = array();
foreach ($serialize as $key) {
$data[$key] = $this->viewVars[$key];
foreach ($serialize as $alias => $key) {
if (is_numeric($alias)) {
$alias = $key;
}
$data[$alias] = $this->viewVars[$key];
}
} else {
$data = isset($this->viewVars[$serialize]) ? $this->viewVars[$serialize] : null;
Expand Down
7 changes: 5 additions & 2 deletions lib/Cake/View/XmlView.php
Expand Up @@ -104,8 +104,11 @@ protected function _serialize($serialize) {

if (is_array($serialize)) {
$data = array($rootNode => array());
foreach ($serialize as $key) {
$data[$rootNode][$key] = $this->viewVars[$key];
foreach ($serialize as $alias => $key) {
if (is_numeric($alias)) {
$alias = $key;
}
$data[$rootNode][$alias] = $this->viewVars[$key];
}
} else {
$data = isset($this->viewVars[$serialize]) ? $this->viewVars[$serialize] : null;
Expand Down

0 comments on commit cbb4f7d

Please sign in to comment.