From b032776c8be077881511d3c3be1c81c36af3ef60 Mon Sep 17 00:00:00 2001 From: KrisJordan Date: Mon, 4 May 2009 17:48:29 -0400 Subject: [PATCH] Broken development commit. Introducing proper content negotiation facilities. --- .../recess/framework/DefaultPolicy.class.php | 6 +-- .../recess/http/ContentNegotiation.class.php | 43 +++++++++++++++++++ recess/recess/http/Environment.class.php | 4 +- recess/recess/http/MimeType.class.php | 35 +++++++++++++++ recess/recess/http/Request.class.php | 2 + .../recess/http/ContentNegotiationTest.php | 22 ++++++++++ recess/test/recess/http/RecessHttpTests.php | 16 +++++++ 7 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 recess/recess/http/ContentNegotiation.class.php create mode 100644 recess/recess/http/MimeType.class.php create mode 100644 recess/test/recess/http/ContentNegotiationTest.php create mode 100644 recess/test/recess/http/RecessHttpTests.php diff --git a/recess/recess/framework/DefaultPolicy.class.php b/recess/recess/framework/DefaultPolicy.class.php index bf28231..6964d11 100644 --- a/recess/recess/framework/DefaultPolicy.class.php +++ b/recess/recess/framework/DefaultPolicy.class.php @@ -24,11 +24,7 @@ public function preprocess(Request &$request) { if($request->format != Formats::XHTML) { $this->reparameterizeForFormat($request); } - -// if($request->method == Methods::OPTIONS) { -// $response = new -// } - + return $request; } diff --git a/recess/recess/http/ContentNegotiation.class.php b/recess/recess/http/ContentNegotiation.class.php new file mode 100644 index 0000000..14a3db4 --- /dev/null +++ b/recess/recess/http/ContentNegotiation.class.php @@ -0,0 +1,43 @@ +headers = $httpHeaders; + } + + public function nextFormat() { + return 'html'; + } + + public function resetFormats() { + + } + + public function nextLanguage() { + return 'en'; + } + + public function resetLanguages() { + + } + + public function nextEncoding() { + return 'gzip'; + } + + public function resetEncodings() { + + } + + public function nextCharset() { + return 'utf-8'; + } + + public function resetCharset() { + + } + +} +?> \ No newline at end of file diff --git a/recess/recess/http/Environment.class.php b/recess/recess/http/Environment.class.php index 16461cd..3ef835f 100644 --- a/recess/recess/http/Environment.class.php +++ b/recess/recess/http/Environment.class.php @@ -20,7 +20,7 @@ public static function getRawRequest() { $request->method = $_SERVER['REQUEST_METHOD']; $request->format = Formats::XHTML; - + $request->setResource(self::stripQueryString($_SERVER['REQUEST_URI'])); $request->get = $_GET; @@ -42,6 +42,8 @@ public static function getRawRequest() { $request->headers = self::getHttpRequestHeaders(); + $request->accepts = new Accepts($request->headers); + $request->username = @$_SERVER['PHP_AUTH_USER']; $request->password = @$_SERVER['PHP_AUTH_PW']; diff --git a/recess/recess/http/MimeType.class.php b/recess/recess/http/MimeType.class.php new file mode 100644 index 0000000..c8d286e --- /dev/null +++ b/recess/recess/http/MimeType.class.php @@ -0,0 +1,35 @@ + \ No newline at end of file diff --git a/recess/recess/http/Request.class.php b/recess/recess/http/Request.class.php index 8eff0bb..9a063c8 100644 --- a/recess/recess/http/Request.class.php +++ b/recess/recess/http/Request.class.php @@ -10,6 +10,8 @@ */ class Request { + public $accepts; + public $format; public $headers; public $resource; diff --git a/recess/test/recess/http/ContentNegotiationTest.php b/recess/test/recess/http/ContentNegotiationTest.php new file mode 100644 index 0000000..abec910 --- /dev/null +++ b/recess/test/recess/http/ContentNegotiationTest.php @@ -0,0 +1,22 @@ + 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'ACCEPT_LANGUAGE' => 'en-us,en;q=0.5', + 'ACCEPT_ENCODING' => 'gzip,deflate', + 'ACCEPT_CHARSET' => 'ISO-8859-1,utf-8;q=0.7,*;q=0.7') + ); + + $this->assertEquals('things', Inflector::toPlural('thing')); + $this->assertEquals('persons', Inflector::toPlural('person')); + $this->assertEquals('oxs', Inflector::toPlural('ox')); + } + +} + +?> \ No newline at end of file diff --git a/recess/test/recess/http/RecessHttpTests.php b/recess/test/recess/http/RecessHttpTests.php new file mode 100644 index 0000000..d17d7cd --- /dev/null +++ b/recess/test/recess/http/RecessHttpTests.php @@ -0,0 +1,16 @@ +addTestSuite('ContentNegotiationTest'); + + return $suite; + } +} +?> \ No newline at end of file