Skip to content

Commit

Permalink
Merge branch 'master' of github.com:danielspaniel/ember-data-change-t…
Browse files Browse the repository at this point in the history
…racker
  • Loading branch information
danielspaniel committed Dec 3, 2019
2 parents 3571220 + 68bb711 commit 4c5a00d
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 17 deletions.
31 changes: 22 additions & 9 deletions addon/tracker.js
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@ export default class Tracker {
static saveChanges(model, {except = []} = {}) {
let metaInfo = this.metaInfo(model);
let keys = Object.keys(metaInfo).filter(key => !except.includes(key));
keys.forEach(key => Tracker.saveKey(model, key));
Tracker.saveKeys(model, keys);
}

/**
Expand Down Expand Up @@ -459,6 +459,26 @@ export default class Tracker {
model.notifyPropertyChange('hasDirtyRelations');
}

/**
* Save the value from an array of keys model's tracker hash
* and save the relationship states if keys represents a relationship
*
* @param {DS.Model} model
* @param {Array} keys to save
*/

static saveKeys(model, keys){
let modelTracker = model.get(ModelTrackerKey) || {},
relationshipsKnownTracker = model.get(RelationshipsKnownTrackerKey) || {},
isNew = model.get('isNew');

keys.forEach(key => {
modelTracker[key] = isNew ? undefined : this.serialize(model, key);
relationshipsKnownTracker[key] = isNew ? true : this.isKnown(model, key);
})
model.setProperties({[ModelTrackerKey]:modelTracker, [RelationshipsKnownTrackerKey]: relationshipsKnownTracker})
}

/**
* Save current model key value in model's tracker hash
* and save the relationship state if key represents a relationship
Expand All @@ -467,14 +487,7 @@ export default class Tracker {
* @param {String} key attribute/association name
*/
static saveKey(model, key) {
let modelTracker = model.get(ModelTrackerKey) || {},
relationshipsKnownTracker = model.get(RelationshipsKnownTrackerKey) || {},
isNew = model.get('isNew');
modelTracker[key] = isNew ? undefined : this.serialize(model, key);
model.set(ModelTrackerKey, modelTracker);

relationshipsKnownTracker[key] = isNew ? true : this.isKnown(model, key);
model.set(RelationshipsKnownTrackerKey, relationshipsKnownTracker);
this.saveKeys(model, [key]);
}

/**
Expand Down
5 changes: 3 additions & 2 deletions tests/unit/model-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { initializer as modelInitializer } from 'ember-data-change-tracker';
import Tracker, { ModelTrackerKey, RelationshipsKnownTrackerKey } from 'ember-data-change-tracker/tracker';
import sinon from 'sinon';
import EmberObject, { get, observer } from '@ember/object';

import { settled } from '@ember/test-helpers'
modelInitializer();

const setModel = (model, attr, value) => {
Expand All @@ -30,11 +30,12 @@ module('Unit | Model', function(hooks) {
manualSetup(this);
});

test('only sets up tracking meta data once on model type', function(assert) {
test('only sets up tracking meta data once on model type', async function(assert) {
sinon.stub(Tracker, 'options').returns({auto: true});
let getTrackerInfo = sinon.stub(Tracker, 'getTrackerInfo').returns({autoSave: true});

let dog = make('dog');
await settled();
assert.ok(dog.constructor.alreadySetupTrackingMeta, 'auto save set up metaData');

Tracker.setupTracking(dog); // try and setup again
Expand Down
12 changes: 6 additions & 6 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1524,9 +1524,9 @@ asynckit@^0.4.0:
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=

atob@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d"
integrity sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=
version "2.1.2"
resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==

aws-sign2@~0.7.0:
version "0.7.0"
Expand Down Expand Up @@ -7652,9 +7652,9 @@ lodash.defaults@~2.3.0:
lodash.keys "~2.3.0"

lodash.defaultsdeep@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz#bec1024f85b1bd96cbea405b23c14ad6443a6f81"
integrity sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E=
version "4.6.1"
resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==

lodash.escape@~2.3.0:
version "2.3.0"
Expand Down

0 comments on commit 4c5a00d

Please sign in to comment.