From 489e2cf9903f08892cc0bbd4901a7a227bd697b1 Mon Sep 17 00:00:00 2001 From: ahaurw01 Date: Tue, 14 May 2013 22:27:42 -0400 Subject: [PATCH] Make RESTAdapter#findAll use record.constructor.collectionKey only when present --- packages/ember-model/lib/rest_adapter.js | 7 +-- .../tests/adapter/rest_adapter_test.js | 54 +++++++++++++++---- 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/packages/ember-model/lib/rest_adapter.js b/packages/ember-model/lib/rest_adapter.js index 0154f0c..51a40c2 100644 --- a/packages/ember-model/lib/rest_adapter.js +++ b/packages/ember-model/lib/rest_adapter.js @@ -17,12 +17,9 @@ Ember.RESTAdapter = Ember.Adapter.extend({ var url = this.buildURL(klass), collectionKey = klass.collectionKey; - if (!collectionKey) { - throw new Error('Ember.RESTAdapter requires a `collectionKey` property to be specified'); - } - return this.ajax(url).then(function(data) { - Ember.run(records, records.load, klass, data[collectionKey]); + var dataToLoad = collectionKey ? data[collectionKey] : data; + Ember.run(records, records.load, klass, dataToLoad); }); }, diff --git a/packages/ember-model/tests/adapter/rest_adapter_test.js b/packages/ember-model/tests/adapter/rest_adapter_test.js index 9d3e0a1..4ed3009 100644 --- a/packages/ember-model/tests/adapter/rest_adapter_test.js +++ b/packages/ember-model/tests/adapter/rest_adapter_test.js @@ -44,16 +44,6 @@ module("Ember.RESTAdapter - with a url specified", { } }); -test("findAll throws an error if collectionKey isn't specified", function() { - expect(1); - - RESTModel.collectionKey = null; - - throws(function() { - Ember.run(RESTModel, RESTModel.find); - }, /requires a `collectionKey` property to be specified/); -}); - test("findAll", function() { expect(3); @@ -66,6 +56,50 @@ test("findAll", function() { Ember.run(RESTModel, RESTModel.find); }); +test("findAll loads the full JSON payload when collectionKey isn't specified", function() { + expect(1); + + var data = [ + {id: 1, name: 'Erik'}, + {id: 2, name: 'Aaron'} + ], + records; + RESTModel.collectionKey = undefined; + + adapter._ajax = function(url, params, method) { + return ajaxSuccess(data); + }; + + Ember.run(function() { + records = RESTModel.findAll(); + }); + + equal(records.get('length'), data.length, "The proper number of items should have been loaded."); +}); + +test("findAll loads the proper JSON payload subset when collectionKey is specified", function() { + expect(1); + + var data = { + posts: [ + {id: 1, name: 'Erik'}, + {id: 2, name: 'Aaron'} + ] + }, + records; + RESTModel.collectionKey = "posts"; + + adapter._ajax = function(url, params, method) { + return ajaxSuccess(data); + }; + + Ember.run(function() { + records = RESTModel.findAll(); + }); + + equal(records.get('length'), data.posts.length, "The proper number of items should have been loaded."); +}); + test("findById", function() { expect(4);