From ddd6475a23643a5e3c00d41454e646d986624dd6 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Sun, 24 May 2015 17:53:31 -0500 Subject: [PATCH 01/14] Uses the method from ajaxSettings instead of passed in If you override ajaxSettings and change the method/type, it was getting ignored in _ajax(). This uses the ajaxSettings method rather than the one passed in, giving users the ability to talk to non-traditional APIs. --- packages/ember-model/lib/rest_adapter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/ember-model/lib/rest_adapter.js b/packages/ember-model/lib/rest_adapter.js index cb1bd1c..2d3337f 100644 --- a/packages/ember-model/lib/rest_adapter.js +++ b/packages/ember-model/lib/rest_adapter.js @@ -130,7 +130,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ return new Ember.RSVP.Promise(function(resolve, reject) { if (params) { - if (method === "GET") { + if (settings.type === "GET") { settings.data = params; } else { settings.contentType = "application/json; charset=utf-8"; From 904b9c5936c3507a2fb33280517246baef6eaf12 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Sun, 24 May 2015 18:26:01 -0500 Subject: [PATCH 02/14] ran grunt build to update ember-model.js --- ember-model.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ember-model.js b/ember-model.js index e47ac9c..f096116 100644 --- a/ember-model.js +++ b/ember-model.js @@ -1770,7 +1770,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ return new Ember.RSVP.Promise(function(resolve, reject) { if (params) { - if (method === "GET") { + if (settings.type === "GET") { settings.data = params; } else { settings.contentType = "application/json; charset=utf-8"; @@ -2033,4 +2033,4 @@ Ember.onLoad('Ember.Application', function(Application) { }); -})(); \ No newline at end of file +})(); From e07f5336806fa06e651995519a0979928fbf66a3 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Mon, 25 May 2015 11:11:54 -0500 Subject: [PATCH 03/14] Allows you to specify your own success/error callback in ajaxSettings You can specify a callback on success/error in your ajaxSettings so you can do something like: var mySuccess = function(data, status, jqXHR) { console.log("success"); } var myError = function(jqXHR, status, error) { console.warn("error"); } var ajaxSettings = function(url, method) { return { url: url, type: method, successCallback: mySuccess, errorCallback: myError }; } --- ember-model.js | 23 +++++++++++++++++++---- packages/ember-model/lib/rest_adapter.js | 10 ++++++++-- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/ember-model.js b/ember-model.js index f096116..6adc0b5 100644 --- a/ember-model.js +++ b/ember-model.js @@ -542,6 +542,15 @@ function hasCachedValue(object, key) { } } +function isDescriptor(value) { + // Ember < 1.11 + if (Ember.Descriptor !== undefined) { + return value instanceof Ember.Descriptor; + } + // Ember >= 1.11 + return value && typeof value === 'object' && value.isDescriptor; +} + Ember.run.queues.push('data'); Ember.Model = Ember.Object.extend(Ember.Evented, { @@ -653,7 +662,7 @@ Ember.Model = Ember.Object.extend(Ember.Evented, { }, didDefineProperty: function(proto, key, value) { - if (value instanceof Ember.Descriptor) { + if (isDescriptor(value)) { var meta = value.meta(); var klass = proto.constructor; @@ -1778,8 +1787,11 @@ Ember.RESTAdapter = Ember.Adapter.extend({ } } - settings.success = function(json) { + settings.success = function(json, textStatus, jqXHR) { Ember.run(null, resolve, json); + if (settings.successCallback) { + settings.successCallback.call(this, json, textStatus, jqXHR); + } }; settings.error = function(jqXHR, textStatus, errorThrown) { @@ -1789,8 +1801,11 @@ Ember.RESTAdapter = Ember.Adapter.extend({ } Ember.run(null, reject, jqXHR); - }; + if (settings.errorCallback) { + settings.errorCallback.call(this, jqXHR, textStatus, errorThrown); + } + }; Ember.$.ajax(settings); }); @@ -2033,4 +2048,4 @@ Ember.onLoad('Ember.Application', function(Application) { }); -})(); +})(); \ No newline at end of file diff --git a/packages/ember-model/lib/rest_adapter.js b/packages/ember-model/lib/rest_adapter.js index 2d3337f..476eaf1 100644 --- a/packages/ember-model/lib/rest_adapter.js +++ b/packages/ember-model/lib/rest_adapter.js @@ -138,8 +138,11 @@ Ember.RESTAdapter = Ember.Adapter.extend({ } } - settings.success = function(json) { + settings.success = function(json, textStatus, jqXHR) { Ember.run(null, resolve, json); + if (settings.successCallback) { + settings.successCallback.call(this, json, textStatus, jqXHR); + } }; settings.error = function(jqXHR, textStatus, errorThrown) { @@ -149,8 +152,11 @@ Ember.RESTAdapter = Ember.Adapter.extend({ } Ember.run(null, reject, jqXHR); - }; + if (settings.errorCallback) { + settings.errorCallback.call(this, jqXHR, textStatus, errorThrown); + } + }; Ember.$.ajax(settings); }); From f346722c94e7d3219ba32c1c996613ffc07a8b45 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Tue, 26 May 2015 16:52:06 -0500 Subject: [PATCH 04/14] allows for x-url-encoded parameters on POST submission --- ember-model.js | 13 +++++++++---- packages/ember-model/lib/rest_adapter.js | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/ember-model.js b/ember-model.js index 6adc0b5..420a75d 100644 --- a/ember-model.js +++ b/ember-model.js @@ -1779,11 +1779,16 @@ Ember.RESTAdapter = Ember.Adapter.extend({ return new Ember.RSVP.Promise(function(resolve, reject) { if (params) { - if (settings.type === "GET") { + if (settings.type.trim().toUpperCase() === "GET") { settings.data = params; - } else { - settings.contentType = "application/json; charset=utf-8"; - settings.data = JSON.stringify(params); + } else { // POST, PUT + if (settings.dataType.trim().toUpperCase() === "JSON") { + settings.contentType = "application/json; charset=utf-8"; + settings.data = JSON.stringify(params); + } else { + settings.contentType = "application/x-www-form-urlencoded; charset=UTF-8"; + settings.data = params; + } } } diff --git a/packages/ember-model/lib/rest_adapter.js b/packages/ember-model/lib/rest_adapter.js index 476eaf1..e0a3fad 100644 --- a/packages/ember-model/lib/rest_adapter.js +++ b/packages/ember-model/lib/rest_adapter.js @@ -130,11 +130,16 @@ Ember.RESTAdapter = Ember.Adapter.extend({ return new Ember.RSVP.Promise(function(resolve, reject) { if (params) { - if (settings.type === "GET") { + if (settings.type.trim().toUpperCase() === "GET") { settings.data = params; - } else { - settings.contentType = "application/json; charset=utf-8"; - settings.data = JSON.stringify(params); + } else { // POST, PUT + if (settings.dataType.trim().toUpperCase() === "JSON") { + settings.contentType = "application/json; charset=utf-8"; + settings.data = JSON.stringify(params); + } else { + settings.contentType = "application/x-www-form-urlencoded; charset=UTF-8"; + settings.data = params; + } } } From 8619189c4ba9141a638dafefb4a095b79f2d3356 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Wed, 3 Jun 2015 10:46:11 -0500 Subject: [PATCH 05/14] Gives you the ability to override both dataType and contentType If your API is a bit goofy you can override the ajaxSettings in your RESTAdapter so you can do things like: --> POST URL-Encoded, receive JSON back: myModel.adapter = RESTAdapter.extend({ ajaxSettings: function(url) { type: "POST", contentType: "application/x-www-form-urlencoded", dataType: "json" // ... snip other properties } }); --> PUT JSON encoded content, receive text back myModel.adapter = RESTAdapter.extend({ ajaxSettings: function(url) { type: "PUT", contentType: "json", dataType: "text" // ... snip other properties } }); --- packages/ember-model/lib/rest_adapter.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/ember-model/lib/rest_adapter.js b/packages/ember-model/lib/rest_adapter.js index e0a3fad..e25942b 100644 --- a/packages/ember-model/lib/rest_adapter.js +++ b/packages/ember-model/lib/rest_adapter.js @@ -117,9 +117,10 @@ Ember.RESTAdapter = Ember.Adapter.extend({ ajaxSettings: function(url, method) { return { - url: url, - type: method, - dataType: "json" + url : url, + type : method, + dataType : "json", + contentType : "application/json" }; }, @@ -130,14 +131,12 @@ Ember.RESTAdapter = Ember.Adapter.extend({ return new Ember.RSVP.Promise(function(resolve, reject) { if (params) { - if (settings.type.trim().toUpperCase() === "GET") { + if (/get/i.test(settings.type)) { // GET settings.data = params; } else { // POST, PUT - if (settings.dataType.trim().toUpperCase() === "JSON") { - settings.contentType = "application/json; charset=utf-8"; + if (/json/i.test(settings.contentType)) { settings.data = JSON.stringify(params); - } else { - settings.contentType = "application/x-www-form-urlencoded; charset=UTF-8"; + } else { // application/x-www-form-urlencoded; charset=UTF-8 settings.data = params; } } From fa02e942ff7ef899253eacc9cf0ed3bc1994e6f0 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Wed, 3 Jun 2015 11:42:34 -0500 Subject: [PATCH 06/14] Copies dist/ember-model.js to the root folder --- ember-model.js | 114 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 106 insertions(+), 8 deletions(-) diff --git a/ember-model.js b/ember-model.js index 420a75d..e1a0f2c 100644 --- a/ember-model.js +++ b/ember-model.js @@ -7,6 +7,12 @@ if (Ember.libraries) { } +})(); + +(function() { + + + })(); (function() { @@ -40,6 +46,14 @@ Ember.Adapter = Ember.Object.extend({ (function() { + + +})(); + +(function() { + + + var get = Ember.get, set = Ember.set; @@ -152,6 +166,12 @@ Ember.FixtureAdapter = Ember.Adapter.extend({ }); +})(); + +(function() { + + + })(); (function() { @@ -213,6 +233,14 @@ Ember.RecordArray = Ember.ArrayProxy.extend(Ember.Evented, { (function() { + + +})(); + +(function() { + + + var get = Ember.get; Ember.FilteredRecordArray = Ember.RecordArray.extend({ @@ -271,6 +299,12 @@ Ember.FilteredRecordArray = Ember.RecordArray.extend({ } }); +})(); + +(function() { + + + })(); (function() { @@ -513,6 +547,20 @@ Ember.EmbeddedHasManyArray = Ember.ManyArray.extend({ (function() { + + +})(); + +(function() { + + + +})(); + +(function() { + + + var get = Ember.get, set = Ember.set, setProperties = Ember.setProperties, @@ -1353,6 +1401,12 @@ Ember.Model.reopenClass({ }); +})(); + +(function() { + + + })(); (function() { @@ -1416,6 +1470,12 @@ Ember.Model.reopen({ }); +})(); + +(function() { + + + })(); (function() { @@ -1543,6 +1603,12 @@ Ember.Model.reopen({ }); +})(); + +(function() { + + + })(); (function() { @@ -1649,6 +1715,14 @@ Ember.attr = function(type, options) { (function() { + + +})(); + +(function() { + + + var get = Ember.get; Ember.RESTAdapter = Ember.Adapter.extend({ @@ -1766,9 +1840,10 @@ Ember.RESTAdapter = Ember.Adapter.extend({ ajaxSettings: function(url, method) { return { - url: url, - type: method, - dataType: "json" + url : url, + type : method, + dataType : "json", + contentType : "application/json" }; }, @@ -1779,14 +1854,12 @@ Ember.RESTAdapter = Ember.Adapter.extend({ return new Ember.RSVP.Promise(function(resolve, reject) { if (params) { - if (settings.type.trim().toUpperCase() === "GET") { + if (/get/i.test(settings.type)) { // GET settings.data = params; } else { // POST, PUT - if (settings.dataType.trim().toUpperCase() === "JSON") { - settings.contentType = "application/json; charset=utf-8"; + if (/json/i.test(settings.contentType)) { settings.data = JSON.stringify(params); - } else { - settings.contentType = "application/x-www-form-urlencoded; charset=UTF-8"; + } else { // application/x-www-form-urlencoded; charset=UTF-8 settings.data = params; } } @@ -1830,6 +1903,12 @@ Ember.RESTAdapter = Ember.Adapter.extend({ }); +})(); + +(function() { + + + })(); (function() { @@ -1857,6 +1936,12 @@ Ember.loadPromise = function(target) { }; +})(); + +(function() { + + + })(); (function() { @@ -1977,6 +2062,12 @@ Ember.onLoad('Ember.Application', function(Application) { }); +})(); + +(function() { + + + })(); (function() { @@ -2053,4 +2144,11 @@ Ember.onLoad('Ember.Application', function(Application) { }); +})(); + +(function() { + + + + })(); \ No newline at end of file From 1300b68d65fc4c0b7bcc31e099e9bdb9c1a0e4ca Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Wed, 3 Jun 2015 16:25:26 -0500 Subject: [PATCH 07/14] Uses new getter/setter for computed properties because deprecated --- ember-model.js | 132 +++++-------------------------- packages/ember-model/lib/attr.js | 33 ++++---- 2 files changed, 38 insertions(+), 127 deletions(-) diff --git a/ember-model.js b/ember-model.js index e1a0f2c..afd2158 100644 --- a/ember-model.js +++ b/ember-model.js @@ -7,12 +7,6 @@ if (Ember.libraries) { } -})(); - -(function() { - - - })(); (function() { @@ -46,14 +40,6 @@ Ember.Adapter = Ember.Object.extend({ (function() { - - -})(); - -(function() { - - - var get = Ember.get, set = Ember.set; @@ -166,12 +152,6 @@ Ember.FixtureAdapter = Ember.Adapter.extend({ }); -})(); - -(function() { - - - })(); (function() { @@ -233,14 +213,6 @@ Ember.RecordArray = Ember.ArrayProxy.extend(Ember.Evented, { (function() { - - -})(); - -(function() { - - - var get = Ember.get; Ember.FilteredRecordArray = Ember.RecordArray.extend({ @@ -299,12 +271,6 @@ Ember.FilteredRecordArray = Ember.RecordArray.extend({ } }); -})(); - -(function() { - - - })(); (function() { @@ -547,20 +513,6 @@ Ember.EmbeddedHasManyArray = Ember.ManyArray.extend({ (function() { - - -})(); - -(function() { - - - -})(); - -(function() { - - - var get = Ember.get, set = Ember.set, setProperties = Ember.setProperties, @@ -1401,12 +1353,6 @@ Ember.Model.reopenClass({ }); -})(); - -(function() { - - - })(); (function() { @@ -1470,12 +1416,6 @@ Ember.Model.reopen({ }); -})(); - -(function() { - - - })(); (function() { @@ -1603,19 +1543,13 @@ Ember.Model.reopen({ }); -})(); - -(function() { - - - })(); (function() { var get = Ember.get, - set = Ember.set, - meta = Ember.meta; + set = Ember.set, + meta = Ember.meta; Ember.Model.dataTypes = {}; @@ -1667,20 +1601,20 @@ function serialize(value, type) { } Ember.attr = function(type, options) { - return Ember.computed(function(key, value) { - var data = get(this, '_data'), + return Ember.computed("_data", { + set: function(key, value) { + var data = get(this, '_data'), dataKey = this.dataKey(key), dataValue = data && get(data, dataKey), beingCreated = meta(this).proto === this, dirtyAttributes = get(this, '_dirtyAttributes'), createdDirtyAttributes = false; - if (!dirtyAttributes) { - dirtyAttributes = []; - createdDirtyAttributes = true; - } + if (!dirtyAttributes) { + dirtyAttributes = []; + createdDirtyAttributes = true; + } - if (arguments.length === 2) { if (beingCreated) { if (!data) { data = {}; @@ -1700,13 +1634,18 @@ Ember.attr = function(type, options) { } return value; - } + }, - if (dataValue==null && options && options.defaultValue!=null) { - return Ember.copy(options.defaultValue); - } + get: function(key) { + var data = get(this, '_data'), + dataKey = this.dataKey(key), + dataValue = data && get(data, dataKey); + if (dataValue==null && options && options.defaultValue!=null) { + return Ember.copy(options.defaultValue); + } - return this.getAttr(key, deserialize(dataValue, type)); + return this.getAttr(key, deserialize(dataValue, type)); + } }).property('_data').meta({isAttribute: true, type: type, options: options}); }; @@ -1715,14 +1654,6 @@ Ember.attr = function(type, options) { (function() { - - -})(); - -(function() { - - - var get = Ember.get; Ember.RESTAdapter = Ember.Adapter.extend({ @@ -1903,12 +1834,6 @@ Ember.RESTAdapter = Ember.Adapter.extend({ }); -})(); - -(function() { - - - })(); (function() { @@ -1936,12 +1861,6 @@ Ember.loadPromise = function(target) { }; -})(); - -(function() { - - - })(); (function() { @@ -2062,12 +1981,6 @@ Ember.onLoad('Ember.Application', function(Application) { }); -})(); - -(function() { - - - })(); (function() { @@ -2144,11 +2057,4 @@ Ember.onLoad('Ember.Application', function(Application) { }); -})(); - -(function() { - - - - })(); \ No newline at end of file diff --git a/packages/ember-model/lib/attr.js b/packages/ember-model/lib/attr.js index 431842c..dd20fad 100644 --- a/packages/ember-model/lib/attr.js +++ b/packages/ember-model/lib/attr.js @@ -1,6 +1,6 @@ var get = Ember.get, - set = Ember.set, - meta = Ember.meta; + set = Ember.set, + meta = Ember.meta; Ember.Model.dataTypes = {}; @@ -52,20 +52,20 @@ function serialize(value, type) { } Ember.attr = function(type, options) { - return Ember.computed(function(key, value) { - var data = get(this, '_data'), + return Ember.computed("_data", { + set: function(key, value) { + var data = get(this, '_data'), dataKey = this.dataKey(key), dataValue = data && get(data, dataKey), beingCreated = meta(this).proto === this, dirtyAttributes = get(this, '_dirtyAttributes'), createdDirtyAttributes = false; - if (!dirtyAttributes) { - dirtyAttributes = []; - createdDirtyAttributes = true; - } + if (!dirtyAttributes) { + dirtyAttributes = []; + createdDirtyAttributes = true; + } - if (arguments.length === 2) { if (beingCreated) { if (!data) { data = {}; @@ -85,12 +85,17 @@ Ember.attr = function(type, options) { } return value; - } + }, - if (dataValue==null && options && options.defaultValue!=null) { - return Ember.copy(options.defaultValue); - } + get: function(key) { + var data = get(this, '_data'), + dataKey = this.dataKey(key), + dataValue = data && get(data, dataKey); + if (dataValue==null && options && options.defaultValue!=null) { + return Ember.copy(options.defaultValue); + } - return this.getAttr(key, deserialize(dataValue, type)); + return this.getAttr(key, deserialize(dataValue, type)); + } }).property('_data').meta({isAttribute: true, type: type, options: options}); }; From 247860aacd04f1bb54f7928faf182aa9ecb4885b Mon Sep 17 00:00:00 2001 From: Julien Guimont Date: Wed, 3 Jun 2015 16:02:04 -0400 Subject: [PATCH 08/14] Compatibility with ember 1.13.0-beta.2 --- bower.json | 2 +- packages/ember-model/lib/attr.js | 30 +++++----- packages/ember-model/lib/belongs_to.js | 71 ++++++++++++++---------- packages/ember-model/lib/has_many.js | 18 +++--- packages/ember-model/lib/store.js | 8 ++- packages/ember-model/tests/store_test.js | 7 ++- 6 files changed, 79 insertions(+), 57 deletions(-) diff --git a/bower.json b/bower.json index fdbb77c..2763b97 100644 --- a/bower.json +++ b/bower.json @@ -3,7 +3,7 @@ "version": "0.0.15", "main": "ember-model.js", "dependencies": { - "ember": "~1.11" + "ember": "~1.13" }, "devDependencies": { "qunit": "~1.11" diff --git a/packages/ember-model/lib/attr.js b/packages/ember-model/lib/attr.js index dd20fad..0114621 100644 --- a/packages/ember-model/lib/attr.js +++ b/packages/ember-model/lib/attr.js @@ -53,14 +53,24 @@ function serialize(value, type) { Ember.attr = function(type, options) { return Ember.computed("_data", { - set: function(key, value) { + get: function(key){ var data = get(this, '_data'), - dataKey = this.dataKey(key), - dataValue = data && get(data, dataKey), - beingCreated = meta(this).proto === this, - dirtyAttributes = get(this, '_dirtyAttributes'), - createdDirtyAttributes = false; + dataKey = this.dataKey(key), + dataValue = data && get(data, dataKey); + if (dataValue==null && options && options.defaultValue!=null) { + return Ember.copy(options.defaultValue); + } + + return this.getAttr(key, deserialize(dataValue, type)); + }, + set: function(key, value){ + var data = get(this, '_data'), + dataKey = this.dataKey(key), + dataValue = data && get(data, dataKey), + beingCreated = meta(this).proto === this, + dirtyAttributes = get(this, '_dirtyAttributes'), + createdDirtyAttributes = false; if (!dirtyAttributes) { dirtyAttributes = []; createdDirtyAttributes = true; @@ -86,16 +96,10 @@ Ember.attr = function(type, options) { return value; }, - + }).meta({isAttribute: true, type: type, options: options}); get: function(key) { var data = get(this, '_data'), dataKey = this.dataKey(key), dataValue = data && get(data, dataKey); - if (dataValue==null && options && options.defaultValue!=null) { - return Ember.copy(options.defaultValue); - } - - return this.getAttr(key, deserialize(dataValue, type)); } - }).property('_data').meta({isAttribute: true, type: type, options: options}); }; diff --git a/packages/ember-model/lib/belongs_to.js b/packages/ember-model/lib/belongs_to.js index 59f53fe..2f7127f 100644 --- a/packages/ember-model/lib/belongs_to.js +++ b/packages/ember-model/lib/belongs_to.js @@ -30,30 +30,52 @@ Ember.belongsTo = function(type, options) { var meta = { type: type, isRelationship: true, options: options, kind: 'belongsTo', getType: getType}; - return Ember.computed(function(propertyKey, value, oldValue) { - type = meta.getType(this); - Ember.assert("Type cannot be empty.", !Ember.isEmpty(type)); + return Ember.computed("_data", { + get: function(propertyKey){ + type = meta.getType(this); + Ember.assert("Type cannot be empty.", !Ember.isEmpty(type)); + + var key = options.key || propertyKey, + self = this; + + var dirtyChanged = function(sender) { + if (sender.get('isDirty')) { + self._relationshipBecameDirty(propertyKey); + } else { + self._relationshipBecameClean(propertyKey); + } + }; - var key = options.key || propertyKey; + var store = storeFor(this), + value = this.getBelongsTo(key, type, meta, store); + this._registerBelongsTo(meta); + if (value !== null && meta.options.embedded) { + value.get('isDirty'); // getter must be called before adding observer + value.addObserver('isDirty', dirtyChanged); + } + return value; + }, - var dirtyAttributes = get(this, '_dirtyAttributes'), - createdDirtyAttributes = false, - self = this; + set: function(propertyKey, value, oldValue){ + type = meta.getType(this); + Ember.assert("Type cannot be empty.", !Ember.isEmpty(type)); - var dirtyChanged = function(sender) { - if (sender.get('isDirty')) { - self._relationshipBecameDirty(propertyKey); - } else { - self._relationshipBecameClean(propertyKey); - } - }; + var dirtyAttributes = get(this, '_dirtyAttributes'), + createdDirtyAttributes = false, + self = this; - if (!dirtyAttributes) { - dirtyAttributes = []; - createdDirtyAttributes = true; - } + var dirtyChanged = function(sender) { + if (sender.get('isDirty')) { + self._relationshipBecameDirty(propertyKey); + } else { + self._relationshipBecameClean(propertyKey); + } + }; - if (arguments.length > 1) { + if (!dirtyAttributes) { + dirtyAttributes = []; + createdDirtyAttributes = true; + } if (value) { Ember.assert(Ember.String.fmt('Attempted to set property of type: %@ with a value of type: %@', @@ -81,17 +103,8 @@ Ember.belongsTo = function(type, options) { } return value === undefined ? null : value; - } else { - var store = storeFor(this); - value = this.getBelongsTo(key, type, meta, store); - this._registerBelongsTo(meta); - if (value !== null && meta.options.embedded) { - value.get('isDirty'); // getter must be called before adding observer - value.addObserver('isDirty', dirtyChanged); - } - return value; } - }).property('_data').meta(meta); + }).meta(meta); }; Ember.Model.reopen({ diff --git a/packages/ember-model/lib/has_many.js b/packages/ember-model/lib/has_many.js index 9756a3b..f20254e 100644 --- a/packages/ember-model/lib/has_many.js +++ b/packages/ember-model/lib/has_many.js @@ -21,18 +21,18 @@ Ember.hasMany = function(type, options) { var meta = { type: type, isRelationship: true, options: options, kind: 'hasMany', getType: getType}; - return Ember.computed(function(propertyKey, newContentArray, existingArray) { - type = meta.getType(this); - Ember.assert("Type cannot be empty", !Ember.isEmpty(type)); + return Ember.computed({ + get: function(propertyKey) { + type = meta.getType(this); + Ember.assert("Type cannot be empty", !Ember.isEmpty(type)); - var key = options.key || propertyKey; - - if (arguments.length > 1) { - return existingArray.setObjects(newContentArray); - } else { + var key = options.key || propertyKey; return this.getHasMany(key, type, meta, this.container); + }, + set: function(propertyKey, newContentArray, existingArray) { + return existingArray.setObjects(newContentArray); } - }).property().meta(meta); + }).meta(meta); }; Ember.Model.reopen({ diff --git a/packages/ember-model/lib/store.js b/packages/ember-model/lib/store.js index 813d0d7..0e89965 100644 --- a/packages/ember-model/lib/store.js +++ b/packages/ember-model/lib/store.js @@ -57,14 +57,18 @@ Ember.Model.Store = Ember.Object.extend({ }); Ember.onLoad('Ember.Application', function(Application) { + Application.initializer({ name: "store", - initialize: function(container, application) { - application.register('store:main', container.lookupFactory('store:application') || Ember.Model.Store); + initialize: function(_, application) { + var store = application.Store || Ember.Model.Store; + application.register('store:application', store); + application.register('store:main', store); application.inject('route', 'store', 'store:main'); application.inject('controller', 'store', 'store:main'); } }); + }); diff --git a/packages/ember-model/tests/store_test.js b/packages/ember-model/tests/store_test.js index cd4d1f7..2072a2e 100644 --- a/packages/ember-model/tests/store_test.js +++ b/packages/ember-model/tests/store_test.js @@ -202,7 +202,7 @@ test("store.find(type) records use application adapter if no klass.adapter or ty EmbeddedModel.adapter = undefined; registry.register('adapter:test', null); registry.register('adapter:application', Ember.FixtureAdapter); - + var promise = Ember.run(store, store.find, 'test','a'); promise.then(function(record) { @@ -217,10 +217,11 @@ test("store.find(type) records use application adapter if no klass.adapter or ty test("Registering a custom store on application works", function() { Ember.run(function() { + var CustomStore = Ember.Model.Store.extend({ custom: true }); App = Ember.Application.create({ - TestRoute: Ember.Route.extend() + TestRoute: Ember.Route.extend(), + Store: CustomStore }); - App.ApplicationStore = Ember.Model.Store.extend({ custom: true }); }); container = App.__container__; From b4b99269ef1be37d92b1a9aa9b5b5df7e5a2cf3c Mon Sep 17 00:00:00 2001 From: Julien Guimont Date: Wed, 3 Jun 2015 16:03:36 -0400 Subject: [PATCH 09/14] update release --- ember-model.js | 125 +++++++++++++++++++++++++++++-------------------- 1 file changed, 73 insertions(+), 52 deletions(-) diff --git a/ember-model.js b/ember-model.js index afd2158..1a612a3 100644 --- a/ember-model.js +++ b/ember-model.js @@ -1380,18 +1380,18 @@ Ember.hasMany = function(type, options) { var meta = { type: type, isRelationship: true, options: options, kind: 'hasMany', getType: getType}; - return Ember.computed(function(propertyKey, newContentArray, existingArray) { - type = meta.getType(this); - Ember.assert("Type cannot be empty", !Ember.isEmpty(type)); + return Ember.computed({ + get: function(propertyKey) { + type = meta.getType(this); + Ember.assert("Type cannot be empty", !Ember.isEmpty(type)); - var key = options.key || propertyKey; - - if (arguments.length > 1) { - return existingArray.setObjects(newContentArray); - } else { + var key = options.key || propertyKey; return this.getHasMany(key, type, meta, this.container); + }, + set: function(propertyKey, newContentArray, existingArray) { + return existingArray.setObjects(newContentArray); } - }).property().meta(meta); + }).meta(meta); }; Ember.Model.reopen({ @@ -1452,30 +1452,52 @@ Ember.belongsTo = function(type, options) { var meta = { type: type, isRelationship: true, options: options, kind: 'belongsTo', getType: getType}; - return Ember.computed(function(propertyKey, value, oldValue) { - type = meta.getType(this); - Ember.assert("Type cannot be empty.", !Ember.isEmpty(type)); + return Ember.computed("_data", { + get: function(propertyKey){ + type = meta.getType(this); + Ember.assert("Type cannot be empty.", !Ember.isEmpty(type)); - var key = options.key || propertyKey; + var key = options.key || propertyKey, + self = this; - var dirtyAttributes = get(this, '_dirtyAttributes'), - createdDirtyAttributes = false, - self = this; + var dirtyChanged = function(sender) { + if (sender.get('isDirty')) { + self._relationshipBecameDirty(propertyKey); + } else { + self._relationshipBecameClean(propertyKey); + } + }; - var dirtyChanged = function(sender) { - if (sender.get('isDirty')) { - self._relationshipBecameDirty(propertyKey); - } else { - self._relationshipBecameClean(propertyKey); + var store = storeFor(this), + value = this.getBelongsTo(key, type, meta, store); + this._registerBelongsTo(meta); + if (value !== null && meta.options.embedded) { + value.get('isDirty'); // getter must be called before adding observer + value.addObserver('isDirty', dirtyChanged); } - }; + return value; + }, - if (!dirtyAttributes) { - dirtyAttributes = []; - createdDirtyAttributes = true; - } + set: function(propertyKey, value, oldValue){ + type = meta.getType(this); + Ember.assert("Type cannot be empty.", !Ember.isEmpty(type)); + + var dirtyAttributes = get(this, '_dirtyAttributes'), + createdDirtyAttributes = false, + self = this; - if (arguments.length > 1) { + var dirtyChanged = function(sender) { + if (sender.get('isDirty')) { + self._relationshipBecameDirty(propertyKey); + } else { + self._relationshipBecameClean(propertyKey); + } + }; + + if (!dirtyAttributes) { + dirtyAttributes = []; + createdDirtyAttributes = true; + } if (value) { Ember.assert(Ember.String.fmt('Attempted to set property of type: %@ with a value of type: %@', @@ -1503,17 +1525,8 @@ Ember.belongsTo = function(type, options) { } return value === undefined ? null : value; - } else { - var store = storeFor(this); - value = this.getBelongsTo(key, type, meta, store); - this._registerBelongsTo(meta); - if (value !== null && meta.options.embedded) { - value.get('isDirty'); // getter must be called before adding observer - value.addObserver('isDirty', dirtyChanged); - } - return value; } - }).property('_data').meta(meta); + }).meta(meta); }; Ember.Model.reopen({ @@ -1602,14 +1615,24 @@ function serialize(value, type) { Ember.attr = function(type, options) { return Ember.computed("_data", { - set: function(key, value) { + get: function(key){ var data = get(this, '_data'), - dataKey = this.dataKey(key), - dataValue = data && get(data, dataKey), - beingCreated = meta(this).proto === this, - dirtyAttributes = get(this, '_dirtyAttributes'), - createdDirtyAttributes = false; + dataKey = this.dataKey(key), + dataValue = data && get(data, dataKey); + + if (dataValue==null && options && options.defaultValue!=null) { + return Ember.copy(options.defaultValue); + } + return this.getAttr(key, deserialize(dataValue, type)); + }, + set: function(key, value){ + var data = get(this, '_data'), + dataKey = this.dataKey(key), + dataValue = data && get(data, dataKey), + beingCreated = meta(this).proto === this, + dirtyAttributes = get(this, '_dirtyAttributes'), + createdDirtyAttributes = false; if (!dirtyAttributes) { dirtyAttributes = []; createdDirtyAttributes = true; @@ -1635,18 +1658,12 @@ Ember.attr = function(type, options) { return value; }, - + }).meta({isAttribute: true, type: type, options: options}); get: function(key) { var data = get(this, '_data'), dataKey = this.dataKey(key), dataValue = data && get(data, dataKey); - if (dataValue==null && options && options.defaultValue!=null) { - return Ember.copy(options.defaultValue); - } - - return this.getAttr(key, deserialize(dataValue, type)); } - }).property('_data').meta({isAttribute: true, type: type, options: options}); }; @@ -2044,16 +2061,20 @@ Ember.Model.Store = Ember.Object.extend({ }); Ember.onLoad('Ember.Application', function(Application) { + Application.initializer({ name: "store", - initialize: function(container, application) { - application.register('store:main', container.lookupFactory('store:application') || Ember.Model.Store); + initialize: function(_, application) { + var store = application.Store || Ember.Model.Store; + application.register('store:application', store); + application.register('store:main', store); application.inject('route', 'store', 'store:main'); application.inject('controller', 'store', 'store:main'); } }); + }); From 708b7f6e41f67ce11ce72cbe7c1e8694de046b1f Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Wed, 3 Jun 2015 18:11:44 -0500 Subject: [PATCH 10/14] Fixes vestigial tail from bad merge --- ember-model.js | 110 ++++++++++++++++++++++++++++--- packages/ember-model/lib/attr.js | 11 +--- 2 files changed, 105 insertions(+), 16 deletions(-) diff --git a/ember-model.js b/ember-model.js index 1a612a3..f3ad29d 100644 --- a/ember-model.js +++ b/ember-model.js @@ -7,6 +7,12 @@ if (Ember.libraries) { } +})(); + +(function() { + + + })(); (function() { @@ -40,6 +46,14 @@ Ember.Adapter = Ember.Object.extend({ (function() { + + +})(); + +(function() { + + + var get = Ember.get, set = Ember.set; @@ -152,6 +166,12 @@ Ember.FixtureAdapter = Ember.Adapter.extend({ }); +})(); + +(function() { + + + })(); (function() { @@ -213,6 +233,14 @@ Ember.RecordArray = Ember.ArrayProxy.extend(Ember.Evented, { (function() { + + +})(); + +(function() { + + + var get = Ember.get; Ember.FilteredRecordArray = Ember.RecordArray.extend({ @@ -271,6 +299,12 @@ Ember.FilteredRecordArray = Ember.RecordArray.extend({ } }); +})(); + +(function() { + + + })(); (function() { @@ -513,6 +547,20 @@ Ember.EmbeddedHasManyArray = Ember.ManyArray.extend({ (function() { + + +})(); + +(function() { + + + +})(); + +(function() { + + + var get = Ember.get, set = Ember.set, setProperties = Ember.setProperties, @@ -1353,6 +1401,12 @@ Ember.Model.reopenClass({ }); +})(); + +(function() { + + + })(); (function() { @@ -1416,6 +1470,12 @@ Ember.Model.reopen({ }); +})(); + +(function() { + + + })(); (function() { @@ -1556,6 +1616,12 @@ Ember.Model.reopen({ }); +})(); + +(function() { + + + })(); (function() { @@ -1615,7 +1681,7 @@ function serialize(value, type) { Ember.attr = function(type, options) { return Ember.computed("_data", { - get: function(key){ + get: function(key) { var data = get(this, '_data'), dataKey = this.dataKey(key), dataValue = data && get(data, dataKey); @@ -1626,7 +1692,7 @@ Ember.attr = function(type, options) { return this.getAttr(key, deserialize(dataValue, type)); }, - set: function(key, value){ + set: function(key, value) { var data = get(this, '_data'), dataKey = this.dataKey(key), dataValue = data && get(data, dataKey), @@ -1657,13 +1723,8 @@ Ember.attr = function(type, options) { } return value; - }, - }).meta({isAttribute: true, type: type, options: options}); - get: function(key) { - var data = get(this, '_data'), - dataKey = this.dataKey(key), - dataValue = data && get(data, dataKey); } + }).meta({isAttribute: true, type: type, options: options}); }; @@ -1671,6 +1732,14 @@ Ember.attr = function(type, options) { (function() { + + +})(); + +(function() { + + + var get = Ember.get; Ember.RESTAdapter = Ember.Adapter.extend({ @@ -1851,6 +1920,12 @@ Ember.RESTAdapter = Ember.Adapter.extend({ }); +})(); + +(function() { + + + })(); (function() { @@ -1878,6 +1953,12 @@ Ember.loadPromise = function(target) { }; +})(); + +(function() { + + + })(); (function() { @@ -1998,6 +2079,12 @@ Ember.onLoad('Ember.Application', function(Application) { }); +})(); + +(function() { + + + })(); (function() { @@ -2078,4 +2165,11 @@ Ember.onLoad('Ember.Application', function(Application) { }); +})(); + +(function() { + + + + })(); \ No newline at end of file diff --git a/packages/ember-model/lib/attr.js b/packages/ember-model/lib/attr.js index 0114621..44ecb79 100644 --- a/packages/ember-model/lib/attr.js +++ b/packages/ember-model/lib/attr.js @@ -53,7 +53,7 @@ function serialize(value, type) { Ember.attr = function(type, options) { return Ember.computed("_data", { - get: function(key){ + get: function(key) { var data = get(this, '_data'), dataKey = this.dataKey(key), dataValue = data && get(data, dataKey); @@ -64,7 +64,7 @@ Ember.attr = function(type, options) { return this.getAttr(key, deserialize(dataValue, type)); }, - set: function(key, value){ + set: function(key, value) { var data = get(this, '_data'), dataKey = this.dataKey(key), dataValue = data && get(data, dataKey), @@ -95,11 +95,6 @@ Ember.attr = function(type, options) { } return value; - }, - }).meta({isAttribute: true, type: type, options: options}); - get: function(key) { - var data = get(this, '_data'), - dataKey = this.dataKey(key), - dataValue = data && get(data, dataKey); } + }).meta({isAttribute: true, type: type, options: options}); }; From 095b585ddb9a18e84296b6c5213f3fd4363cec82 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Wed, 3 Jun 2015 18:23:58 -0500 Subject: [PATCH 11/14] Removes default contentType from ajaxSettings This was causing previously working calls to fail because now our ajax calls have the Content-Type: header being added, making the server return a 400 Bad Request error. --- ember-model.js | 3 +-- packages/ember-model/lib/rest_adapter.js | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/ember-model.js b/ember-model.js index f3ad29d..6d5c1f7 100644 --- a/ember-model.js +++ b/ember-model.js @@ -1859,8 +1859,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ return { url : url, type : method, - dataType : "json", - contentType : "application/json" + dataType : "json" }; }, diff --git a/packages/ember-model/lib/rest_adapter.js b/packages/ember-model/lib/rest_adapter.js index e25942b..4775ccc 100644 --- a/packages/ember-model/lib/rest_adapter.js +++ b/packages/ember-model/lib/rest_adapter.js @@ -119,8 +119,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ return { url : url, type : method, - dataType : "json", - contentType : "application/json" + dataType : "json" }; }, From d5a123b726828083772a4b40a2d94402f060c984 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Thu, 19 Nov 2015 22:53:59 -0600 Subject: [PATCH 12/14] runs grunt build to make sure ember-model is up to snuff --- ember-model.js | 183 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 155 insertions(+), 28 deletions(-) diff --git a/ember-model.js b/ember-model.js index 7d3e8f5..507701a 100644 --- a/ember-model.js +++ b/ember-model.js @@ -7,6 +7,12 @@ if (Ember.libraries) { } +})(); + +(function() { + + + })(); (function() { @@ -40,6 +46,14 @@ Ember.Adapter = Ember.Object.extend({ (function() { + + +})(); + +(function() { + + + var get = Ember.get, set = Ember.set; @@ -152,6 +166,12 @@ Ember.FixtureAdapter = Ember.Adapter.extend({ }); +})(); + +(function() { + + + })(); (function() { @@ -191,7 +211,7 @@ Ember.RecordArray = Ember.ArrayProxy.extend(Ember.Evented, { var modelClass = this.get('modelClass'), self = this, promises; - + set(this, 'isLoaded', false); if (modelClass._findAllRecordArray === this) { return modelClass.adapter.findAll(modelClass, this); @@ -213,6 +233,14 @@ Ember.RecordArray = Ember.ArrayProxy.extend(Ember.Evented, { (function() { + + +})(); + +(function() { + + + var get = Ember.get; Ember.FilteredRecordArray = Ember.RecordArray.extend({ @@ -271,6 +299,12 @@ Ember.FilteredRecordArray = Ember.RecordArray.extend({ } }); +})(); + +(function() { + + + })(); (function() { @@ -316,12 +350,12 @@ Ember.ManyArray = Ember.RecordArray.extend({ var content = get(this, 'content'); if (!content.length) { return; } - + // need to add observer if it wasn't materialized before var observerNeeded = (content[idx].record) ? false : true; var record = this.materializeRecord(idx, this.container); - + if (observerNeeded) { var isDirtyRecord = record.get('isDirty'), isNewRecord = record.get('isNew'); if (isDirtyRecord || isNewRecord) { this._modifiedRecords.pushObject(content[idx]); } @@ -347,22 +381,22 @@ Ember.ManyArray = Ember.RecordArray.extend({ this._super(index, removed, added); }, - _contentWillChange: function() { + _contentDidChange: function() { var content = get(this, 'content'); + var contentPrev = this._content; - if (content) { - this.arrayWillChange(content, 0, get(content, 'length'), 0); - content.removeArrayObserver(this); + if (contentPrev && contentPrev !== content) { + this.arrayWillChange(contentPrev, 0, get(contentPrev, 'length'), 0); + contentPrev.removeArrayObserver(this); this._setupOriginalContent(content); } - }.observesBefore('content'), - _contentDidChange: function() { - var content = get(this, 'content'); if (content) { content.addArrayObserver(this); this.arrayDidChange(content, 0, 0, get(content, 'length')); } + + this._content = content; }.observes('content'), arrayWillChange: function(item, idx, removedCnt, addedCnt) { @@ -384,7 +418,7 @@ Ember.ManyArray = Ember.RecordArray.extend({ var content = item; for (var i = idx; i < idx+addedCnt; i++) { var currentItem = content[i]; - if (currentItem && currentItem.record) { + if (currentItem && currentItem.record) { var isDirtyRecord = currentItem.record.get('isDirty'), isNewRecord = currentItem.record.get('isNew'); // why newly created object is not dirty? if (isDirtyRecord || isNewRecord) { this._modifiedRecords.pushObject(currentItem); } Ember.addObserver(currentItem, 'record.isDirty', this, 'recordStateChanged'); @@ -426,7 +460,7 @@ Ember.ManyArray = Ember.RecordArray.extend({ }, recordStateChanged: function(obj, keyName) { - var parent = get(this, 'parent'), relationshipKey = get(this, 'relationshipKey'); + var parent = get(this, 'parent'), relationshipKey = get(this, 'relationshipKey'); if (obj.record.get('isDirty')) { if (this._modifiedRecords.indexOf(obj) === -1) { this._modifiedRecords.pushObject(obj); } @@ -434,7 +468,7 @@ Ember.ManyArray = Ember.RecordArray.extend({ } else { if (this._modifiedRecords.indexOf(obj) > -1) { this._modifiedRecords.removeObject(obj); } if (!this.get('isDirty')) { - parent._relationshipBecameClean(relationshipKey); + parent._relationshipBecameClean(relationshipKey); } } } @@ -513,6 +547,20 @@ Ember.EmbeddedHasManyArray = Ember.ManyArray.extend({ (function() { + + +})(); + +(function() { + + + +})(); + +(function() { + + + var get = Ember.get, set = Ember.set, setProperties = Ember.setProperties, @@ -578,12 +626,16 @@ Ember.Model = Ember.Object.extend(Ember.Evented, { _relationshipBecameDirty: function(name) { var dirtyAttributes = get(this, '_dirtyAttributes'); - if (!dirtyAttributes.contains(name)) { dirtyAttributes.pushObject(name); } + if (dirtyAttributes) { + dirtyAttributes.addObject(name); + } else { + set(this, '_dirtyAttributes', [name]); + } }, _relationshipBecameClean: function(name) { var dirtyAttributes = get(this, '_dirtyAttributes'); - dirtyAttributes.removeObject(name); + if (dirtyAttributes) { dirtyAttributes.removeObject(name); } }, dataKey: function(key) { @@ -1353,6 +1405,12 @@ Ember.Model.reopenClass({ }); +})(); + +(function() { + + + })(); (function() { @@ -1405,6 +1463,7 @@ Ember.Model.computed = function() { (function() { + var get = Ember.get; function getType(record) { @@ -1437,6 +1496,9 @@ Ember.hasMany = function(type, options) { return this.getHasMany(key, type, meta, this.container); }, set: function(propertyKey, newContentArray, existingArray) { + if (!existingArray) { + existingArray = this.getHasMany(options.key || propertyKey, type, meta, this.container); + } return existingArray.setObjects(newContentArray); } }).meta(meta); @@ -1468,6 +1530,13 @@ Ember.Model.reopen({ (function() { + + +})(); + +(function() { + + var get = Ember.get, set = Ember.set; @@ -1608,9 +1677,16 @@ Ember.Model.reopen({ (function() { + + +})(); + +(function() { + + var get = Ember.get, - set = Ember.set, - meta = Ember.meta; + set = Ember.set, + meta = Ember.meta; Ember.Model.dataTypes = {}; @@ -1714,6 +1790,14 @@ Ember.attr = function(type, options) { (function() { + + +})(); + +(function() { + + + var get = Ember.get; Ember.RESTAdapter = Ember.Adapter.extend({ @@ -1804,7 +1888,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ url = this.buildURL(record.constructor, get(record, primaryKey)), self = this; - return this.ajax(url, record.toJSON(), "DELETE").then(function(data) { // TODO: Some APIs may or may not return data + return this.ajax(url, record.toJSON(), "DELETE").then(function(data) { self.didDeleteRecord(record, data); }); }, @@ -1831,29 +1915,36 @@ Ember.RESTAdapter = Ember.Adapter.extend({ ajaxSettings: function(url, method) { return { - url: url, - type: method, - dataType: "json" + url : url, + type : method, + dataType : "json" }; }, _ajax: function(url, params, method, settings) { + var self = this; if (!settings) { settings = this.ajaxSettings(url, method); } return new Ember.RSVP.Promise(function(resolve, reject) { if (params) { - if (method === "GET") { + if (/get/i.test(settings.type)) { // GET settings.data = params; - } else { - settings.contentType = "application/json; charset=utf-8"; - settings.data = JSON.stringify(params); + } else { // POST, PUT + if (/json/i.test(settings.contentType)) { + settings.data = JSON.stringify(params); + } else { // application/x-www-form-urlencoded; charset=UTF-8 + settings.data = params; + } } } - settings.success = function(json) { + settings.success = function(json, textStatus, jqXHR) { Ember.run(null, resolve, json); + if (settings.successCallback) { + settings.successCallback.call(this, json, textStatus, jqXHR); + } }; settings.error = function(jqXHR, textStatus, errorThrown) { @@ -1862,14 +1953,25 @@ Ember.RESTAdapter = Ember.Adapter.extend({ jqXHR.then = null; } - Ember.run(null, reject, jqXHR); - }; + self._handleRejections(method, jqXHR, resolve, reject); + if (settings.errorCallback) { + settings.errorCallback.call(this, jqXHR, textStatus, errorThrown); + } + }; Ember.$.ajax(settings); }); }, + _handleRejections: function(method, jqXHR, resolve, reject) { + if (method === "DELETE" && jqXHR.status >= 200 && jqXHR.status < 300) { + Ember.run(null, resolve, null); + } else { + Ember.run(null, reject, jqXHR); + } + }, + _loadRecordFromData: function(record, data) { var rootKey = get(record.constructor, 'rootKey'), primaryKey = get(record.constructor, 'primaryKey'); @@ -1884,6 +1986,12 @@ Ember.RESTAdapter = Ember.Adapter.extend({ }); +})(); + +(function() { + + + })(); (function() { @@ -1911,6 +2019,12 @@ Ember.loadPromise = function(target) { }; +})(); + +(function() { + + + })(); (function() { @@ -2031,6 +2145,12 @@ Ember.onLoad('Ember.Application', function(Application) { }); +})(); + +(function() { + + + })(); (function() { @@ -2112,3 +2232,10 @@ Ember.onLoad('Ember.Application', function(Application) { })(); + +(function() { + + + + +})(); \ No newline at end of file From 2d63621de8dbcc558fa036f330ae571fcd0bf4a2 Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Sat, 2 Apr 2016 20:31:58 -0500 Subject: [PATCH 13/14] fixed typo from bad merge --- ember-model.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ember-model.js b/ember-model.js index 4ff4388..20ec284 100644 --- a/ember-model.js +++ b/ember-model.js @@ -1859,7 +1859,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ settings.data = params; } } - } return new Ember.RSVP.Promise(function(resolve, reject) { + } settings.success = function(json, textStatus, jqXHR) { Ember.run(null, resolve, json); @@ -2138,4 +2138,4 @@ Ember.onLoad('Ember.Application', function(Application) { }); -})(); \ No newline at end of file +})(); From 9c5302a78c1f1047fdfcb51dcfe0ca90e9e2b10a Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Sat, 2 Apr 2016 20:44:24 -0500 Subject: [PATCH 14/14] Reverting back to ember.merge because ember 2.2 doesn't support it --- ember-model.js | 18 +++++++++--------- packages/ember-model/lib/model.js | 2 +- packages/ember-model/lib/store.js | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/ember-model.js b/ember-model.js index 20ec284..856586e 100644 --- a/ember-model.js +++ b/ember-model.js @@ -634,7 +634,7 @@ Ember.Model = Ember.Object.extend(Ember.Evented, { load: function(id, hash) { var data = {}; data[get(this.constructor, 'primaryKey')] = id; - set(this, '_data', Ember.assign(data, hash)); + set(this, '_data', Ember.merge(data, hash)); this.getWithDefault('_dirtyAttributes', []).clear(); this._reloadHasManys(); @@ -1614,8 +1614,8 @@ Ember.Model.reopen({ (function() { var get = Ember.get, - set = Ember.set, - meta = Ember.meta; + set = Ember.set, + meta = Ember.meta; Ember.Model.dataTypes = {}; @@ -1836,9 +1836,9 @@ Ember.RESTAdapter = Ember.Adapter.extend({ ajaxSettings: function(url, method) { return { - url: url, - type: method, - dataType: "json" + url : url, + type : method, + dataType : "json" }; }, @@ -1875,7 +1875,7 @@ Ember.RESTAdapter = Ember.Adapter.extend({ } self._handleRejections(method, jqXHR, resolve, reject); - + if (settings.errorCallback) { settings.errorCallback.call(this, jqXHR, textStatus, errorThrown); @@ -2088,7 +2088,7 @@ Ember.Model.Store = Ember.Object.extend({ createRecord: function(type, props) { var klass = this.modelFor(type); klass.reopenClass({adapter: this.adapterFor(type)}); - return klass.create(Ember.assign({container: this.container}, props)); + return klass.create(Ember.merge({container: this.container}, props)); }, find: function(type, id) { @@ -2138,4 +2138,4 @@ Ember.onLoad('Ember.Application', function(Application) { }); -})(); +})(); \ No newline at end of file diff --git a/packages/ember-model/lib/model.js b/packages/ember-model/lib/model.js index 9a4abd3..e5f05fc 100644 --- a/packages/ember-model/lib/model.js +++ b/packages/ember-model/lib/model.js @@ -122,7 +122,7 @@ Ember.Model = Ember.Object.extend(Ember.Evented, { load: function(id, hash) { var data = {}; data[get(this.constructor, 'primaryKey')] = id; - set(this, '_data', Ember.assign(data, hash)); + set(this, '_data', Ember.merge(data, hash)); this.getWithDefault('_dirtyAttributes', []).clear(); this._reloadHasManys(); diff --git a/packages/ember-model/lib/store.js b/packages/ember-model/lib/store.js index d974785..f273129 100644 --- a/packages/ember-model/lib/store.js +++ b/packages/ember-model/lib/store.js @@ -25,7 +25,7 @@ Ember.Model.Store = Ember.Object.extend({ createRecord: function(type, props) { var klass = this.modelFor(type); klass.reopenClass({adapter: this.adapterFor(type)}); - return klass.create(Ember.assign({container: this.container}, props)); + return klass.create(Ember.merge({container: this.container}, props)); }, find: function(type, id) {