summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2010-06-07 23:12:52 -0700
committerBharat Mediratta <bharat@menalto.com>2010-06-07 23:12:52 -0700
commit6425d41eddd44091b2d83ba3c3734cc6990ca581 (patch)
tree94c6ad398edb6a72879b17772aab5670a1371b84
parent98fce83de5f772482382bfabdbcd94c25ecdbb1a (diff)
Add a "preserve_ids" global query parameter for REST requests that
indicates that we shouldn't opportunistically convert ids into REST urls.
-rw-r--r--modules/gallery/helpers/item_rest.php3
-rw-r--r--modules/gallery/helpers/items_rest.php14
-rw-r--r--modules/gallery/models/item.php7
-rw-r--r--modules/gallery/tests/Item_Model_Test.php4
-rw-r--r--modules/gallery/tests/Item_Rest_Helper_Test.php21
-rw-r--r--modules/gallery/tests/Items_Rest_Helper_Test.php35
6 files changed, 57 insertions, 27 deletions
diff --git a/modules/gallery/helpers/item_rest.php b/modules/gallery/helpers/item_rest.php
index c88f92d9..1d19d9f1 100644
--- a/modules/gallery/helpers/item_rest.php
+++ b/modules/gallery/helpers/item_rest.php
@@ -78,9 +78,10 @@ class item_rest_Core {
}
$orm->order_by($order_by);
+ $preserve_ids = isset($p->preserve_ids) ? (bool)$p->preserve_ids : false;
$result = array(
"url" => $request->url,
- "entity" => $item->as_restful_array(),
+ "entity" => $item->as_restful_array($preserve_ids),
"relationships" => rest::relationships("item", $item));
if ($item->is_album()) {
$result["members"] = array();
diff --git a/modules/gallery/helpers/items_rest.php b/modules/gallery/helpers/items_rest.php
index 9cca9a54..e9773745 100644
--- a/modules/gallery/helpers/items_rest.php
+++ b/modules/gallery/helpers/items_rest.php
@@ -36,6 +36,8 @@ class items_rest_Core {
*/
static function get($request) {
$items = array();
+ $preserve_ids = isset($request->params->preserve_ids) ?
+ (bool)$request->params->preserve_ids : false;
if (isset($request->params->urls)) {
foreach (json_decode($request->params->urls) as $url) {
if (isset($request->params->type)) {
@@ -45,10 +47,10 @@ class items_rest_Core {
if (access::can("view", $item)) {
if (isset($types)) {
if (in_array($item->type, $types)) {
- $items[] = items_rest::_format_restful_item($item);
+ $items[] = items_rest::_format_restful_item($item, $preserve_ids);
}
} else {
- $items[] = items_rest::_format_restful_item($item);
+ $items[] = items_rest::_format_restful_item($item, $preserve_ids);
}
}
}
@@ -57,9 +59,9 @@ class items_rest_Core {
if (!access::can("view", $item)) {
throw new Kohana_404_Exception();
}
- $items[] = items_rest::_format_restful_item($item);
+ $items[] = items_rest::_format_restful_item($item, $preserve_ids);
while (($item = $item->parent()) != null) {
- array_unshift($items, items_rest::_format_restful_item($item));
+ array_unshift($items, items_rest::_format_restful_item($item, $preserve_ids));
};
}
@@ -74,9 +76,9 @@ class items_rest_Core {
return $item;
}
- private static function _format_restful_item($item) {
+ private static function _format_restful_item($item, $preserve_ids) {
$item_rest = array("url" => rest::url("item", $item),
- "entity" => $item->as_restful_array(),
+ "entity" => $item->as_restful_array($preserve_ids),
"relationships" => rest::relationships("item", $item));
if ($item->type == "album") {
$members = array();
diff --git a/modules/gallery/models/item.php b/modules/gallery/models/item.php
index dfcbdd70..f59caa65 100644
--- a/modules/gallery/models/item.php
+++ b/modules/gallery/models/item.php
@@ -923,12 +923,15 @@ class Item_Model extends ORM_MPTT {
/**
* Same as ORM::as_array() but convert id fields into their RESTful form.
+ * Convert any item ids into REST urls
+ *
+ * @param bool preserve_ids true if we should preserve ids
*/
- public function as_restful_array($convert_ids=true) {
+ public function as_restful_array($preserve_ids) {
// Convert item ids to rest URLs for consistency
$data = $this->as_array();
- if ($convert_ids) {
+ if (!$preserve_ids) {
if ($tmp = $this->parent()) {
$data["parent"] = rest::url("item", $tmp);
}
diff --git a/modules/gallery/tests/Item_Model_Test.php b/modules/gallery/tests/Item_Model_Test.php
index 9d3f54f2..6c5882c4 100644
--- a/modules/gallery/tests/Item_Model_Test.php
+++ b/modules/gallery/tests/Item_Model_Test.php
@@ -357,7 +357,7 @@ class Item_Model_Test extends Gallery_Unit_Test_Case {
$photo = test::random_photo($album);
$album->reload();
- $result = $album->as_restful_array();
+ $result = $album->as_restful_array(false);
$this->assert_same(rest::url("item", item::root()), $result["parent"]);
$this->assert_same(rest::url("item", $photo), $result["album_cover"]);
$this->assert_true(!array_key_exists("parent_id", $result));
@@ -369,7 +369,7 @@ class Item_Model_Test extends Gallery_Unit_Test_Case {
$photo = test::random_photo($album);
$album->reload();
- $result = $album->as_restful_array(false);
+ $result = $album->as_restful_array(true);
$this->assert_same(item::root()->id, $result["parent_id"]);
$this->assert_same($photo->id, $result["album_cover_item_id"]);
$this->assert_true(!array_key_exists("parent", $result));
diff --git a/modules/gallery/tests/Item_Rest_Helper_Test.php b/modules/gallery/tests/Item_Rest_Helper_Test.php
index 0b5e0471..5a80d66b 100644
--- a/modules/gallery/tests/Item_Rest_Helper_Test.php
+++ b/modules/gallery/tests/Item_Rest_Helper_Test.php
@@ -28,6 +28,17 @@ class Item_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$this->assert_equal($album->id, $resolved->id);
}
+ public function get_with_ids_test() {
+ $photo1 = test::random_photo(item::root());
+ $request = new stdClass();
+ $request->url = rest::url("item", $photo1);
+ $request->params = new stdClass();
+ $request->params->preserve_ids = 1;
+
+ $response = item_rest::get($request);
+ $this->assert_equal(item::root()->id, $response["entity"]["parent_id"]); // Spot check
+ }
+
public function get_scope_test() {
$album1 = test::random_album();
$photo1 = test::random_photo($album1);
@@ -41,7 +52,7 @@ class Item_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$request->params = new stdClass();
$this->assert_equal_array(
array("url" => rest::url("item", $album1),
- "entity" => $album1->as_restful_array(),
+ "entity" => $album1->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album1),
@@ -56,7 +67,7 @@ class Item_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$request->params->scope = "direct";
$this->assert_equal_array(
array("url" => rest::url("item", $album1),
- "entity" => $album1->as_restful_array(),
+ "entity" => $album1->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album1),
@@ -71,7 +82,7 @@ class Item_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$request->params->scope = "all";
$this->assert_equal_array(
array("url" => rest::url("item", $album1),
- "entity" => $album1->as_restful_array(),
+ "entity" => $album1->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album1),
@@ -98,7 +109,7 @@ class Item_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$request->params->name = "foo";
$this->assert_equal_array(
array("url" => rest::url("item", $album1),
- "entity" => $album1->as_restful_array(),
+ "entity" => $album1->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album1),
@@ -121,7 +132,7 @@ class Item_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$request->params->type = "album";
$this->assert_equal_array(
array("url" => rest::url("item", $album1),
- "entity" => $album1->as_restful_array(),
+ "entity" => $album1->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album1),
diff --git a/modules/gallery/tests/Items_Rest_Helper_Test.php b/modules/gallery/tests/Items_Rest_Helper_Test.php
index 94bf912a..3efd677d 100644
--- a/modules/gallery/tests/Items_Rest_Helper_Test.php
+++ b/modules/gallery/tests/Items_Rest_Helper_Test.php
@@ -34,13 +34,13 @@ class Items_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$this->assert_equal_array(
array(
array("url" => rest::url("item", $photo1),
- "entity" => $photo1->as_restful_array(),
+ "entity" => $photo1->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $photo1),
"members" => array()))),
array("url" => rest::url("item", $album2),
- "entity" => $album2->as_restful_array(),
+ "entity" => $album2->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album2),
@@ -67,7 +67,7 @@ class Items_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$this->assert_equal_array(
array(
array("url" => rest::url("item", $album2),
- "entity" => $album2->as_restful_array(),
+ "entity" => $album2->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album2),
@@ -94,7 +94,7 @@ class Items_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$this->assert_equal_array(
array(
array("url" => rest::url("item", $photo1),
- "entity" => $photo1->as_restful_array(),
+ "entity" => $photo1->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $photo1),
@@ -119,13 +119,13 @@ class Items_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$this->assert_equal_array(
array(
array("url" => rest::url("item", $photo1),
- "entity" => $photo1->as_restful_array(),
+ "entity" => $photo1->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $photo1),
"members" => array()))),
array("url" => rest::url("item", $album2),
- "entity" => $album2->as_restful_array(),
+ "entity" => $album2->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album2),
@@ -146,7 +146,7 @@ class Items_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$root = ORM::factory("item", 1);
$restful_root = array(
"url" => rest::url("item", $root),
- "entity" => $root->as_restful_array(),
+ "entity" => $root->as_restful_array(false),
"relationships" => rest::relationships("item", $root));
$restful_root["members"] = array();
foreach ($root->children() as $child) {
@@ -155,12 +155,12 @@ class Items_Rest_Helper_Test extends Gallery_Unit_Test_Case {
$request = new stdClass();
$request->params = new stdClass();
- $request->params->ancestor_for = rest::url("item", $photo2);
+ $request->params->ancestors_for = rest::url("item", $photo2);
$this->assert_equal_array(
array(
$restful_root,
array("url" => rest::url("item", $album1),
- "entity" => $album1->as_restful_array(),
+ "entity" => $album1->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album1),
@@ -170,7 +170,7 @@ class Items_Rest_Helper_Test extends Gallery_Unit_Test_Case {
rest::url("item", $album2)),
),
array("url" => rest::url("item", $album2),
- "entity" => $album2->as_restful_array(),
+ "entity" => $album2->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $album2),
@@ -178,11 +178,24 @@ class Items_Rest_Helper_Test extends Gallery_Unit_Test_Case {
"members" => array(
rest::url("item", $photo2))),
array("url" => rest::url("item", $photo2),
- "entity" => $photo2->as_restful_array(),
+ "entity" => $photo2->as_restful_array(false),
"relationships" => array(
"tags" => array(
"url" => rest::url("item_tags", $photo2),
"members" => array())))),
items_rest::get($request));
}
+
+ public function get_ancestor_with_ids_test() {
+ $album1 = test::random_album();
+ $photo1 = test::random_photo($album1);
+
+ $request = new stdClass();
+ $request->params = new stdClass();
+ $request->params->ancestors_for = rest::url("item", $photo1);
+ $request->params->preserve_ids = 1;
+
+ $response = items_rest::get($request);
+ $this->assert_same(item::root()->id, $response[1]["entity"]["parent_id"]); // Spot check
+ }
}