summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/gallery/helpers/gallery_rest.php28
-rw-r--r--modules/gallery/tests/Gallery_Rest_Helper_Test.php46
-rw-r--r--modules/rest/helpers/rest.php12
-rw-r--r--modules/tag/helpers/tag_rest.php15
-rw-r--r--modules/tag/helpers/tags_rest.php6
5 files changed, 50 insertions, 57 deletions
diff --git a/modules/gallery/helpers/gallery_rest.php b/modules/gallery/helpers/gallery_rest.php
index 827da122..5fd73a2e 100644
--- a/modules/gallery/helpers/gallery_rest.php
+++ b/modules/gallery/helpers/gallery_rest.php
@@ -17,25 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
-
-// @todo Add logging
-
-// Validation questions
-//
-// We need to be able to properly validate anything we want to enter here. But all of our
-// validation currently happens at the controller / form level, and we're not using the same
-// controllers or forms.
-//
-// Possible solutions:
-// 1) Move validation into the model and use it both here and in the regular controllers. But
-// if we do that, how do we translate validation failures into a user-consumable output which
-// we need so that we can return proper error responses to form submissions?
-//
-// 2) Create some kind of validation helper that can validate every field. Wait, isn't this
-// just like #1 except in a helper instead of in the model?
-
class gallery_rest_Core {
-
/**
* For items that are collections, you can specify the following additional query parameters to
* query the collection. You can specify them in any combination.
@@ -90,7 +72,7 @@ class gallery_rest_Core {
$members = array();
foreach ($orm->find_all() as $child) {
- $members[] = url::abs_site("rest/gallery/" . $child->relative_url());
+ $members[] = rest::url("gallery", $child);
}
return array("resource" => $item->as_array(), "members" => $members);
@@ -114,7 +96,7 @@ class gallery_rest_Core {
}
$item->save();
- return array("url" => url::abs_site("/rest/gallery/" . $item->relative_url()));
+ return array("url" => rest::url("gallery", $item));
}
static function post($request) {
@@ -150,7 +132,7 @@ class gallery_rest_Core {
throw new Rest_Exception("Invalid type: $params->type", 400);
}
- return array("url" => url::abs_site("/rest/gallery/" . $item->relative_url()));
+ return array("url" => rest::url("gallery", $item));
}
static function delete($request) {
@@ -163,4 +145,8 @@ class gallery_rest_Core {
static function resolve($path) {
return url::get_item_from_uri($path);
}
+
+ static function url($item) {
+ return url::abs_site("rest/gallery/" . $item->relative_url());
+ }
}
diff --git a/modules/gallery/tests/Gallery_Rest_Helper_Test.php b/modules/gallery/tests/Gallery_Rest_Helper_Test.php
index 35fd0daf..dcd9a9db 100644
--- a/modules/gallery/tests/Gallery_Rest_Helper_Test.php
+++ b/modules/gallery/tests/Gallery_Rest_Helper_Test.php
@@ -28,7 +28,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
public function resolve_test() {
$album = test::random_album();
- $resolved = rest::resolve(rest::url("gallery", $album->relative_url()));
+ $resolved = rest::resolve(rest::url("gallery", $album));
$this->assert_equal($album->id, $resolved->id);
}
@@ -40,32 +40,32 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$album1->reload();
// No scope is the same as "direct"
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params = new stdClass();
$this->assert_equal_array(
array("resource" => $album1->as_array(),
"members" => array(
- rest::url("gallery", $photo1->relative_url()),
- rest::url("gallery", $album2->relative_url()))),
+ rest::url("gallery", $photo1),
+ rest::url("gallery", $album2))),
gallery_rest::get($request));
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params->scope = "direct";
$this->assert_equal_array(
array("resource" => $album1->as_array(),
"members" => array(
- rest::url("gallery", $photo1->relative_url()),
- rest::url("gallery", $album2->relative_url()))),
+ rest::url("gallery", $photo1),
+ rest::url("gallery", $album2))),
gallery_rest::get($request));
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params->scope = "all";
$this->assert_equal_array(
array("resource" => $album1->as_array(),
"members" => array(
- rest::url("gallery", $photo1->relative_url()),
- rest::url("gallery", $album2->relative_url()),
- rest::url("gallery", $photo2->relative_url()))),
+ rest::url("gallery", $photo1),
+ rest::url("gallery", $album2),
+ rest::url("gallery", $photo2))),
gallery_rest::get($request));
}
@@ -77,12 +77,12 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$photo2->save();
$album1->reload();
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params->name = "foo";
$this->assert_equal_array(
array("resource" => $album1->as_array(),
"members" => array(
- rest::url("gallery", $photo2->relative_url()))),
+ rest::url("gallery", $photo2))),
gallery_rest::get($request));
}
@@ -92,12 +92,12 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$album2 = test::random_album($album1);
$album1->reload();
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params->type = "album";
$this->assert_equal_array(
array("resource" => $album1->as_array(),
"members" => array(
- rest::url("gallery", $album2->relative_url()))),
+ rest::url("gallery", $album2))),
gallery_rest::get($request));
}
@@ -105,11 +105,11 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$album1 = test::random_album();
access::allow(identity::everybody(), "edit", $album1);
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params->title = "my new title";
$this->assert_equal_array(
- array("url" => rest::url("gallery", $album1->relative_url())),
+ array("url" => rest::url("gallery", $album1)),
gallery_rest::put($request));
$this->assert_equal("my new title", $album1->reload()->title);
}
@@ -118,7 +118,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$album1 = test::random_album();
access::allow(identity::everybody(), "edit", $album1);
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params->title = "my new title";
$request->params->slug = "not url safe";
@@ -135,7 +135,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$album1 = test::random_album();
access::allow(identity::everybody(), "edit", $album1);
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params->type = "album";
$request->params->name = "my album";
$request->params->title = "my album";
@@ -150,7 +150,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$album1 = test::random_album();
access::allow(identity::everybody(), "edit", $album1);
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params->type = "album";
$request->params->name = "my album";
$request->params->title = "my album";
@@ -170,7 +170,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$album1 = test::random_album();
access::allow(identity::everybody(), "edit", $album1);
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
$request->params->type = "photo";
$request->params->name = "my photo.jpg";
$request->file = MODPATH . "gallery/tests/test.jpg";
@@ -185,7 +185,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$album1 = test::random_album();
access::allow(identity::everybody(), "edit", $album1);
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
gallery_rest::delete($request);
$album1->reload();
@@ -195,7 +195,7 @@ class Gallery_Rest_Helper_Test extends Gallery_Unit_Test_Case {
public function delete_album_fails_without_permission_test() {
$album1 = test::random_album();
- $request->url = rest::url("gallery", $album1->relative_url());
+ $request->url = rest::url("gallery", $album1);
try {
gallery_rest::delete($request);
} catch (Exception $e) {
diff --git a/modules/rest/helpers/rest.php b/modules/rest/helpers/rest.php
index 423765bb..93ad2bd3 100644
--- a/modules/rest/helpers/rest.php
+++ b/modules/rest/helpers/rest.php
@@ -75,10 +75,14 @@ class rest_Core {
/**
* Return an absolute url used for REST resource location.
* @param string module name (eg, "gallery", "tags")
- * @param string relative path (eg "Family/Weddings.jpg")
- * @return string complete url
+ * @param object resource
*/
- static function url($module, $path) {
- return url::abs_site("rest/$module/$path");
+ static function url($module, $resource) {
+ $class = "{$module}_rest";
+ if (!method_exists($class, "url")) {
+ throw new Exception("@todo MISSING REST CLASS: $class");
+ }
+
+ return call_user_func(array($class, "url"), $resource);
}
}
diff --git a/modules/tag/helpers/tag_rest.php b/modules/tag/helpers/tag_rest.php
index 0aac5291..a4eaee90 100644
--- a/modules/tag/helpers/tag_rest.php
+++ b/modules/tag/helpers/tag_rest.php
@@ -22,10 +22,10 @@ class tag_rest_Core {
$tag = rest::resolve($request->url);
$items = array();
foreach ($tag->items() as $item) {
- $items[] = url::abs_site("rest/gallery/" . $item->relative_url());
+ $items[] = rest::url("gallery", $item);
}
- return rest::reply(array("resource" => $tag->as_array(), "members" => $items));
+ return array("resource" => $tag->as_array(), "members" => $items);
}
static function post($request) {
@@ -38,7 +38,7 @@ class tag_rest_Core {
access::required("edit", $item);
tag::add($item, $tag->name);
- return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name))));
+ return array("url" => rest::url("tag", $tag));
}
static function put($request) {
@@ -61,7 +61,7 @@ class tag_rest_Core {
}
$tag->save();
- return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name))));
+ return array("url" => rest::url("tag", $tag));
}
static function delete($request) {
@@ -70,7 +70,6 @@ class tag_rest_Core {
if (empty($request->params->url)) {
// Delete the tag
$tag->delete();
- return rest::reply();
} else {
// Remove an item from the tag
$item = rest::resolve($request->params->url);
@@ -78,7 +77,7 @@ class tag_rest_Core {
$tag->save();
tag::compact();
- return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name))));
+ return array("url" => rest::url("tag", $tag));
}
}
@@ -90,4 +89,8 @@ class tag_rest_Core {
return $tag;
}
+
+ static function url($item) {
+ return url::abs_site("rest/tag/" . rawurlencode($tag->name));
+ }
}
diff --git a/modules/tag/helpers/tags_rest.php b/modules/tag/helpers/tags_rest.php
index 7f0ed66a..dd23e97f 100644
--- a/modules/tag/helpers/tags_rest.php
+++ b/modules/tag/helpers/tags_rest.php
@@ -21,9 +21,9 @@ class tags_rest_Core {
static function get($request) {
$tags = array();
foreach (ORM::factory("tag")->find_all() as $tag) {
- $tags[$tag->name] = url::abs_site("rest/tags/" . rawurlencode($tag->name));
+ $tags[$tag->name] = rest::url("tags", $tag);
}
- return rest::reply(array("members" => $tags));
+ return array("members" => $tags);
}
static function post($request) {
@@ -43,6 +43,6 @@ class tags_rest_Core {
$tag->save();
}
- return rest::reply(array("url" => url::abs_site("rest/tag/" . rawurlencode($tag->name))));
+ return array("url" => rest::url("tag", $tag));
}
}