Skip to content

Commit

Permalink
Support for pagination, and selective rollback for single attribute (#95
Browse files Browse the repository at this point in the history
)

* Support added for metadata. Allows pagination in ember

* Support added for metadata. Allows pagination in ember

* Support added for metadata. Allows pagination in ember

* added rollbackSingleAttribute method

* updated rollbackSingleAttribute method

* updated rollbackSingleAttribute method

* Improve EG to support client notification that a model was deleted on the backend. Also improved logging of model errors.

* Update compiled files

* Bumps eg versions in bower and package.json
  • Loading branch information
mtheoryx committed Jan 19, 2017
1 parent 374ddea commit 7df3a56
Show file tree
Hide file tree
Showing 9 changed files with 90 additions and 41 deletions.
3 changes: 2 additions & 1 deletion bower.json
@@ -1,6 +1,7 @@
{
"name": "ember-graph",
"description": "Ember persistence library for complex object graphs",
"version": "1.1.0",
"main": "dist/ember-graph.js",
"homepage": "https://github.com/stingerlabs/ember-graph",
"repository": {
Expand Down Expand Up @@ -41,4 +42,4 @@
".travis.yml",
"Gruntfile.js"
]
}
}
37 changes: 26 additions & 11 deletions dist/ember-graph.js
Expand Up @@ -2633,6 +2633,16 @@ define('ember-graph/model/core', ['exports', 'ember', 'ember-graph/util/set', 'e
this.set('clientAttributes', _ember.default.Object.create());
},

/**
* Resets a single attribute to last known server attribute
*
* @method rollbackSingleAttribute
* @param {String} attr
*/
rollbackSingleAttribute: function (attr) {
this.clientAttributes.set(attr, this.serverAttributes.get(attr));
},

/**
* Loads attributes from the server.
*/
Expand Down Expand Up @@ -3331,7 +3341,7 @@ define('ember-graph/model/relationship', ['exports', 'ember', 'ember-graph/relat
return;
}

if (!oldVal && newVal || oldVal && !newVal || (oldVal.typeKey !== newVal.typeKey || oldVal.id !== newVal.id)) {
if (!oldVal && newVal || oldVal && !newVal || oldVal.typeKey !== newVal.typeKey || oldVal.id !== newVal.id) {
changes[name] = [oldVal, newVal];
}
}
Expand Down Expand Up @@ -6496,7 +6506,7 @@ define('ember-graph/store/relationship', ['exports', 'ember', 'ember-graph/relat
/* eslint-enable */

// Everything else is invalid
_ember.default.assert('Invalid hasOne relationship values.');
_ember.default.assert('Invalid hasOne relationship values for: ' + type + '.' + name);
});

return values;
Expand Down Expand Up @@ -6874,15 +6884,20 @@ define('ember-graph/store/store', ['exports', 'ember', 'ember-graph/store/record
recordRequestCache.savePendingRequest(typeKey, query, promise);
}

return _emberGraphDataPromise_object.PromiseArray.create({
promise: promise.then(function (payload) {
var records = payload.meta.matchedRecords;
_this4.pushPayload(payload);
return promise.then(function (payload) {
return {
records: _emberGraphDataPromise_object.PromiseArray.create({
promise: promise.then(function (payload) {
var records = payload.meta.matchedRecords;
_this4.pushPayload(payload);

return records.map(function (record) {
return _this4.getRecord(record.type, record.id);
});
})
return records.map(function (record) {
return _this4.getRecord(record.type, record.id);
});
})
}),
meta: payload.meta.serverMeta
};
});
},

Expand Down Expand Up @@ -7108,7 +7123,7 @@ define('ember-graph/store/store', ['exports', 'ember', 'ember-graph/store/record
_ember.default.changeProperties(function () {
var reloadDirty = _this9.get('reloadDirty');

(_ember.default.get(payload, 'meta.deletedRecords') || []).forEach(function (record) {
(_ember.default.get(payload, 'meta.serverMeta.deletedRecords') || []).forEach(function (record) {
_this9.deleteRecordFromStore(record.type, record.id);
});

Expand Down
6 changes: 3 additions & 3 deletions dist/ember-graph.min.js

Large diffs are not rendered by default.

35 changes: 25 additions & 10 deletions dist/ember-graph.prod.js
Expand Up @@ -2633,6 +2633,16 @@ define('ember-graph/model/core', ['exports', 'ember', 'ember-graph/util/set', 'e
this.set('clientAttributes', _ember.default.Object.create());
},

/**
* Resets a single attribute to last known server attribute
*
* @method rollbackSingleAttribute
* @param {String} attr
*/
rollbackSingleAttribute: function (attr) {
this.clientAttributes.set(attr, this.serverAttributes.get(attr));
},

/**
* Loads attributes from the server.
*/
Expand Down Expand Up @@ -3313,7 +3323,7 @@ define('ember-graph/model/relationship', ['exports', 'ember', 'ember-graph/relat
return;
}

if (!oldVal && newVal || oldVal && !newVal || (oldVal.typeKey !== newVal.typeKey || oldVal.id !== newVal.id)) {
if (!oldVal && newVal || oldVal && !newVal || oldVal.typeKey !== newVal.typeKey || oldVal.id !== newVal.id) {
changes[name] = [oldVal, newVal];
}
}
Expand Down Expand Up @@ -6840,15 +6850,20 @@ define('ember-graph/store/store', ['exports', 'ember', 'ember-graph/store/record
recordRequestCache.savePendingRequest(typeKey, query, promise);
}

return _emberGraphDataPromise_object.PromiseArray.create({
promise: promise.then(function (payload) {
var records = payload.meta.matchedRecords;
_this4.pushPayload(payload);
return promise.then(function (payload) {
return {
records: _emberGraphDataPromise_object.PromiseArray.create({
promise: promise.then(function (payload) {
var records = payload.meta.matchedRecords;
_this4.pushPayload(payload);

return records.map(function (record) {
return _this4.getRecord(record.type, record.id);
});
})
return records.map(function (record) {
return _this4.getRecord(record.type, record.id);
});
})
}),
meta: payload.meta.serverMeta
};
});
},

Expand Down Expand Up @@ -7074,7 +7089,7 @@ define('ember-graph/store/store', ['exports', 'ember', 'ember-graph/store/record
_ember.default.changeProperties(function () {
var reloadDirty = _this9.get('reloadDirty');

(_ember.default.get(payload, 'meta.deletedRecords') || []).forEach(function (record) {
(_ember.default.get(payload, 'meta.serverMeta.deletedRecords') || []).forEach(function (record) {
_this9.deleteRecordFromStore(record.type, record.id);
});

Expand Down
1 change: 1 addition & 0 deletions package.json
@@ -1,6 +1,7 @@
{
"name": "Ember-Graph",
"license": "MIT",
"version": "1.1.0",
"repository": {
"type": "git",
"url": "https://github.com/stingerlabs/ember-graph"
Expand Down
10 changes: 10 additions & 0 deletions src/model/core.js
Expand Up @@ -151,6 +151,16 @@ var CoreModel = Ember.Object.extend({
this.set('clientAttributes', Ember.Object.create());
},

/**
* Resets a single attribute to last known server attribute
*
* @method rollbackSingleAttribute
* @param {String} attr
*/
rollbackSingleAttribute: function(attr) {
this.clientAttributes.set(attr, this.serverAttributes.get(attr));
},

/**
* Loads attributes from the server.
*/
Expand Down
2 changes: 1 addition & 1 deletion src/store/relationship.js
Expand Up @@ -217,7 +217,7 @@ export default {
/* eslint-enable */

// Everything else is invalid
Ember.assert('Invalid hasOne relationship values.');
Ember.assert('Invalid hasOne relationship values for: ' + type + '.' + name);
});

return values;
Expand Down
25 changes: 15 additions & 10 deletions src/store/store.js
Expand Up @@ -355,15 +355,20 @@ var Store = (Ember.Service || Ember.Object).extend({
recordRequestCache.savePendingRequest(typeKey, query, promise);
}

return PromiseArray.create({
promise: promise.then((payload) => {
var records = payload.meta.matchedRecords;
this.pushPayload(payload);

return records.map((record) => {
return this.getRecord(record.type, record.id);
});
})
return promise.then((payload) => {
return {
records: PromiseArray.create({
promise: promise.then((payload) => {
var records = payload.meta.matchedRecords;
this.pushPayload(payload);

return records.map((record) => {
return this.getRecord(record.type, record.id);
});
})
}),
meta: payload.meta.serverMeta
};
});
},

Expand Down Expand Up @@ -577,7 +582,7 @@ var Store = (Ember.Service || Ember.Object).extend({
Ember.changeProperties(() => {
const reloadDirty = this.get('reloadDirty');

(Ember.get(payload, 'meta.deletedRecords') || []).forEach((record) => {
(Ember.get(payload, 'meta.serverMeta.deletedRecords') || []).forEach((record) => {
this.deleteRecordFromStore(record.type, record.id);
});

Expand Down
12 changes: 7 additions & 5 deletions test/store/delete.js
Expand Up @@ -109,11 +109,13 @@

store.pushPayload({
meta: {
deletedRecords: [
{ type: 'post', id: '1' },
{ type: 'post', id: '2' },
{ type: 'post', id: '3' }
]
serverMeta: {
deletedRecords: [
{ type: 'post', id: '1' },
{ type: 'post', id: '2' },
{ type: 'post', id: '3' }
]
}
}
});

Expand Down

0 comments on commit 7df3a56

Please sign in to comment.