Merge pull request #7643 from owncloud/chainable_response

Chainable Response in AppFramework
This commit is contained in:
Thomas Müller 2014-04-08 22:42:43 +02:00
commit 73ac3d0fcd
6 changed files with 62 additions and 0 deletions

View File

@ -66,9 +66,12 @@ class JSONResponse extends Response {
* Sets values in the data json array * Sets values in the data json array
* @param array|object $data an array or object which will be transformed * @param array|object $data an array or object which will be transformed
* to JSON * to JSON
* @return JSONResponse Reference to this object
*/ */
public function setData($data){ public function setData($data){
$this->data = $data; $this->data = $data;
return $this;
} }

View File

@ -80,6 +80,7 @@ class Response {
$this->addHeader('Cache-Control', 'no-cache, must-revalidate'); $this->addHeader('Cache-Control', 'no-cache, must-revalidate');
} }
return $this;
} }
@ -88,6 +89,7 @@ class Response {
* function * function
* @param string $name The name of the HTTP header * @param string $name The name of the HTTP header
* @param string $value The value, null will delete it * @param string $value The value, null will delete it
* @return Response Reference to this object
*/ */
public function addHeader($name, $value) { public function addHeader($name, $value) {
if(is_null($value)) { if(is_null($value)) {
@ -95,6 +97,8 @@ class Response {
} else { } else {
$this->headers[$name] = $value; $this->headers[$name] = $value;
} }
return $this;
} }
@ -130,9 +134,12 @@ class Response {
/** /**
* Set response status * Set response status
* @param int $status a HTTP status code, see also the STATUS constants * @param int $status a HTTP status code, see also the STATUS constants
* @return Response Reference to this object
*/ */
public function setStatus($status) { public function setStatus($status) {
$this->status = $status; $this->status = $status;
return $this;
} }
@ -165,18 +172,24 @@ class Response {
/** /**
* Set the ETag * Set the ETag
* @param string $ETag * @param string $ETag
* @return Response Reference to this object
*/ */
public function setETag($ETag) { public function setETag($ETag) {
$this->ETag = $ETag; $this->ETag = $ETag;
return $this;
} }
/** /**
* Set "last modified" date * Set "last modified" date
* @param \DateTime $lastModified * @param \DateTime $lastModified
* @return Response Reference to this object
*/ */
public function setLastModified($lastModified) { public function setLastModified($lastModified) {
$this->lastModified = $lastModified; $this->lastModified = $lastModified;
return $this;
} }

View File

@ -74,9 +74,12 @@ class TemplateResponse extends Response {
* Sets template parameters * Sets template parameters
* @param array $params an array with key => value structure which sets template * @param array $params an array with key => value structure which sets template
* variables * variables
* @return TemplateResponse Reference to this object
*/ */
public function setParams(array $params){ public function setParams(array $params){
$this->params = $params; $this->params = $params;
return $this;
} }
@ -104,9 +107,12 @@ class TemplateResponse extends Response {
* settings header and footer, user renders the normal * settings header and footer, user renders the normal
* normal page including footer and header and blank * normal page including footer and header and blank
* just renders the plain template * just renders the plain template
* @return TemplateResponse Reference to this object
*/ */
public function renderAs($renderAs){ public function renderAs($renderAs){
$this->renderAs = $renderAs; $this->renderAs = $renderAs;
return $this;
} }

View File

@ -28,6 +28,7 @@ namespace OC\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http;
//require_once(__DIR__ . "/../classloader.php"); //require_once(__DIR__ . "/../classloader.php");
@ -95,4 +96,13 @@ class JSONResponseTest extends \PHPUnit_Framework_TestCase {
$this->assertEquals($code, $response->getStatus()); $this->assertEquals($code, $response->getStatus());
} }
public function testChainability() {
$params = array('hi', 'yo');
$this->json->setData($params)
->setStatus(Http::STATUS_NOT_FOUND);
$this->assertEquals(Http::STATUS_NOT_FOUND, $this->json->getStatus());
$this->assertEquals(array('hi', 'yo'), $this->json->getData());
}
} }

View File

@ -117,5 +117,25 @@ class ResponseTest extends \PHPUnit_Framework_TestCase {
$this->assertEquals('Thu, 01 Jan 1970 00:00:01 +0000', $headers['Last-Modified']); $this->assertEquals('Thu, 01 Jan 1970 00:00:01 +0000', $headers['Last-Modified']);
} }
public function testChainability() {
$lastModified = new \DateTime(null, new \DateTimeZone('GMT'));
$lastModified->setTimestamp(1);
$this->childResponse->setEtag('hi')
->setStatus(Http::STATUS_NOT_FOUND)
->setLastModified($lastModified)
->cacheFor(33)
->addHeader('hello', 'world');
$headers = $this->childResponse->getHeaders();
$this->assertEquals('world', $headers['hello']);
$this->assertEquals(Http::STATUS_NOT_FOUND, $this->childResponse->getStatus());
$this->assertEquals('hi', $this->childResponse->getEtag());
$this->assertEquals('Thu, 01 Jan 1970 00:00:01 +0000', $headers['Last-Modified']);
$this->assertEquals('max-age=33, must-revalidate',
$headers['Cache-Control']);
}
} }

View File

@ -25,6 +25,7 @@
namespace OC\AppFramework\Http; namespace OC\AppFramework\Http;
use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Http\TemplateResponse;
use OCP\AppFramework\Http;
class TemplateResponseTest extends \PHPUnit_Framework_TestCase { class TemplateResponseTest extends \PHPUnit_Framework_TestCase {
@ -98,4 +99,13 @@ class TemplateResponseTest extends \PHPUnit_Framework_TestCase {
$this->assertEquals($render, $this->tpl->getRenderAs()); $this->assertEquals($render, $this->tpl->getRenderAs());
} }
public function testChainability() {
$params = array('hi' => 'yo');
$this->tpl->setParams($params)
->setStatus(Http::STATUS_NOT_FOUND);
$this->assertEquals(Http::STATUS_NOT_FOUND, $this->tpl->getStatus());
$this->assertEquals(array('hi' => 'yo'), $this->tpl->getParams());
}
} }