Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

More Cleanups #4815

Merged
merged 6 commits into from
Feb 23, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 36 additions & 60 deletions addon/-private/system/store.js
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ Store = Service.extend({
this._identityMap = new IdentityMap();
this._pendingSave = [];
this._instanceCache = new ContainerInstanceCache(getOwner(this), this);
this._modelClassCache = new EmptyObject();
this._modelFactoryCache = new EmptyObject();

/*
Ember Data uses several specialized micro-queues for organizing
Expand Down Expand Up @@ -342,7 +342,7 @@ Store = Service.extend({
createRecord(modelName, inputProperties) {
assert(`You need to pass a model name to the store's createRecord method`, isPresent(modelName));
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');
let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@runspired I believe you recently introduced _classKeyFor as a wrapper for normalizeModelName. Are you ok with changing this back to just normalizeModelName?

let properties = copy(inputProperties) || new EmptyObject();

// If the passed properties do not include a primary key,
Expand Down Expand Up @@ -464,7 +464,7 @@ Store = Service.extend({
assert(`Calling store.find() with a query object is no longer supported. Use store.query() instead.`, typeof id !== 'object');
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');

let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

return this.findRecord(normalizedModelName, id);
},
Expand Down Expand Up @@ -695,7 +695,7 @@ Store = Service.extend({
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');
assert(badIdFormatAssertion, (typeof id === 'string' && id.length > 0) || (typeof id === 'number' && !isNaN(id)));

let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

let internalModel = this._internalModelForId(normalizedModelName, id);
options = options || {};
Expand All @@ -716,8 +716,7 @@ Store = Service.extend({
}

let snapshot = internalModel.createSnapshot(options);
let modelClass = internalModel.type;
let adapter = this.adapterFor(modelClass.modelName);
let adapter = this.adapterFor(internalModel.modelName);

// Refetch the record if the adapter thinks the record is stale
if (adapter.shouldReloadRecord(this, snapshot)) {
Expand All @@ -737,9 +736,7 @@ Store = Service.extend({
return Promise.resolve(internalModel);
},

_findByInternalModel(internalModel, options) {
options = options || {};

_findByInternalModel(internalModel, options = {}) {
if (options.preload) {
internalModel.preloadData(options.preload);
}
Expand Down Expand Up @@ -778,7 +775,7 @@ Store = Service.extend({

let promises = new Array(ids.length);

let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

for (let i = 0; i < ids.length; i++) {
promises[i] = this.findRecord(normalizedModelName, ids[i]);
Expand Down Expand Up @@ -828,11 +825,10 @@ Store = Service.extend({
options
};

let modelClass = internalModel.type; // TODO: is this needed?
let promise = resolver.promise;

internalModel.loadingData(promise);
this._pendingFetch.get(modelClass).push(pendingFetchItem);
this._pendingFetch.get(modelName).push(pendingFetchItem);

emberRun.scheduleOnce('afterRender', this, this.flushAllPendingFetches);

Expand All @@ -848,9 +844,9 @@ Store = Service.extend({
this._pendingFetch.clear();
},

_flushPendingFetchForType(pendingFetchItems, modelClass) {
_flushPendingFetchForType(pendingFetchItems, modelName) {
let store = this;
let adapter = store.adapterFor(modelClass.modelName);
let adapter = store.adapterFor(modelName);
let shouldCoalesce = !!adapter.findMany && adapter.coalesceFindRequests;
let totalItems = pendingFetchItems.length;
let internalModels = new Array(totalItems);
Expand Down Expand Up @@ -947,7 +943,7 @@ Store = Service.extend({
}

if (totalInGroup > 1) {
_findMany(adapter, store, modelClass, ids, groupedInternalModels)
_findMany(adapter, store, modelName, ids, groupedInternalModels)
.then(function(foundInternalModels) {
handleFoundRecords(foundInternalModels, groupedInternalModels);
})
Expand Down Expand Up @@ -1006,7 +1002,7 @@ Store = Service.extend({
@return {RecordReference}
*/
getReference(modelName, id) {
let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

return this._internalModelForId(normalizedModelName, id).recordReference;
},
Expand Down Expand Up @@ -1036,7 +1032,7 @@ Store = Service.extend({
heimdall.increment(peekRecord);
assert(`You need to pass a model name to the store's peekRecord method`, isPresent(modelName));
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');
let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

if (this.hasRecordForId(normalizedModelName, id)) {
return this._internalModelForId(normalizedModelName, id).getRecord();
Expand Down Expand Up @@ -1091,7 +1087,7 @@ Store = Service.extend({
assert(`You need to pass a model name to the store's hasRecordForId method`, isPresent(modelName));
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');

let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

let trueId = coerceId(id);
let internalModel = this._recordMapFor(normalizedModelName).get(trueId);
Expand Down Expand Up @@ -1248,7 +1244,7 @@ Store = Service.extend({
assert(`You need to pass a query hash to the store's query method`, query);
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');

let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);
return this._query(normalizedModelName, query);
},

Expand All @@ -1259,7 +1255,6 @@ Store = Service.extend({
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');

let modelToken = heimdall.start('initial-modelFor-lookup');
let modelClass = this._modelFor(modelName);
heimdall.stop(modelToken);

array = array || this.recordArrayManager.createAdapterPopulatedRecordArray(modelName, query);
Expand All @@ -1271,7 +1266,7 @@ Store = Service.extend({
assert(`You tried to load a query but you have no adapter (for ${modelName})`, adapter);
assert(`You tried to load a query but your adapter does not implement 'query'`, typeof adapter.query === 'function');

let pA = promiseArray(_query(adapter, this, modelClass, query, array));
let pA = promiseArray(_query(adapter, this, modelName, query, array));
instrument(() => {
pA.finally(() => { heimdall.stop(token); });
});
Expand Down Expand Up @@ -1376,15 +1371,14 @@ Store = Service.extend({
assert(`You need to pass a query hash to the store's queryRecord method`, query);
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');

let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

let modelClass = this._modelFor(normalizedModelName);
let adapter = this.adapterFor(normalizedModelName);

assert(`You tried to make a query but you have no adapter (for ${normalizedModelName})`, adapter);
assert(`You tried to make a query but your adapter does not implement 'queryRecord'`, typeof adapter.queryRecord === 'function');

return promiseObject(_queryRecord(adapter, this, modelClass, query).then((internalModel) => {
return promiseObject(_queryRecord(adapter, this, modelName, query).then(internalModel => {
// the promise returned by store.queryRecord is expected to resolve with
// an instance of DS.Model
if (internalModel) {
Expand Down Expand Up @@ -1588,9 +1582,8 @@ Store = Service.extend({
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');

let token = heimdall.start('store.findAll');
let normalizedModelName = this._classKeyFor(modelName);
let modelClass = this._modelFor(normalizedModelName);
let fetch = this._fetchAll(modelClass, this.peekAll(normalizedModelName), options);
let normalizedModelName = normalizeModelName(modelName);
let fetch = this._fetchAll(normalizedModelName, this.peekAll(normalizedModelName), options);

instrument(() => {
fetch.finally(() => { heimdall.stop(token); });
Expand All @@ -1602,14 +1595,11 @@ Store = Service.extend({
/**
@method _fetchAll
@private
@param {DS.Model} modelClass
@param {DS.Model} modelName
@param {DS.RecordArray} array
@return {Promise} promise
*/
_fetchAll(modelClass, array, options) {
options = options || {};

let modelName = modelClass.modelName;
_fetchAll(modelName, array, options = {}) {
let adapter = this.adapterFor(modelName);
let sinceToken = this._recordMapFor(modelName).metadata.since;

Expand All @@ -1618,14 +1608,14 @@ Store = Service.extend({

if (options.reload) {
set(array, 'isUpdating', true);
return promiseArray(_findAll(adapter, this, modelClass, sinceToken, options));
return promiseArray(_findAll(adapter, this, modelName, sinceToken, options));
}

let snapshotArray = array._createSnapshot(options);

if (adapter.shouldReloadAll(this, snapshotArray)) {
set(array, 'isUpdating', true);
return promiseArray(_findAll(adapter, this, modelClass, sinceToken, options));
return promiseArray(_findAll(adapter, this, modelName, sinceToken, options));
}

if (options.backgroundReload === false) {
Expand All @@ -1634,7 +1624,7 @@ Store = Service.extend({

if (options.backgroundReload || adapter.shouldBackgroundReloadAll(this, snapshotArray)) {
set(array, 'isUpdating', true);
_findAll(adapter, this, modelClass, sinceToken, options);
_findAll(adapter, this, modelName, sinceToken, options);
}

return promiseArray(Promise.resolve(array));
Expand Down Expand Up @@ -1680,7 +1670,7 @@ Store = Service.extend({
heimdall.increment(peekAll);
assert(`You need to pass a model name to the store's peekAll method`, isPresent(modelName));
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');
let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);
let liveRecordArray = this.recordArrayManager.liveRecordArrayFor(normalizedModelName);

this.recordArrayManager.syncLiveRecordArray(liveRecordArray, normalizedModelName);
Expand Down Expand Up @@ -1708,7 +1698,7 @@ Store = Service.extend({
if (arguments.length === 0) {
this._identityMap.clear();
} else {
let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);
this._recordMapFor(normalizedModelName).clear();
}
},
Expand Down Expand Up @@ -1780,7 +1770,7 @@ Store = Service.extend({
let array;
let hasQuery = length === 3;

let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

// allow an optional server query
if (hasQuery) {
Expand Down Expand Up @@ -1972,20 +1962,6 @@ Store = Service.extend({
internalModel.setId(id);
},

/**
Returns the normalized (dasherized) modelName. This method should be used whenever
receiving a modelName in a public method.


@method _classKeyFor
@param {String} modelName
@returns {String}
@private
*/
_classKeyFor(modelName) {
return normalizeModelName(modelName);
},

/**
Returns a map of IDs to client IDs for a given modelName.

Expand Down Expand Up @@ -2083,7 +2059,7 @@ Store = Service.extend({
assert(`You need to pass a model name to the store's modelFor method`, isPresent(modelName));
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');

let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

return this._modelFor(normalizedModelName);
},
Expand All @@ -2099,7 +2075,7 @@ Store = Service.extend({

_modelFactoryFor(modelName) {
heimdall.increment(modelFor);
let factory = this._modelClassCache[modelName];
let factory = this._modelFactoryCache[modelName];

if (!factory) {
factory = this.modelFactoryFor(modelName);
Expand All @@ -2120,7 +2096,7 @@ Store = Service.extend({
// TODO: deprecate this
klass.modelName = klass.modelName || modelName;

this._modelClassCache[modelName] = factory;
this._modelFactoryCache[modelName] = factory;
}

return factory;
Expand All @@ -2134,7 +2110,7 @@ Store = Service.extend({
assert(`You need to pass a model name to the store's modelFactoryFor method`, isPresent(modelName));
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');

let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);
let owner = getOwner(this);

if (owner.factoryFor) {
Expand Down Expand Up @@ -2495,7 +2471,7 @@ Store = Service.extend({
} else {
payload = inputPayload;
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');
let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);
serializer = this.serializerFor(normalizedModelName);
}
if (isEnabled('ds-pushpayload-return')) {
Expand Down Expand Up @@ -2528,7 +2504,7 @@ Store = Service.extend({
heimdall.increment(normalize);
assert(`You need to pass a model name to the store's normalize method`, isPresent(modelName));
assert(`Passing classes to store methods has been removed. Please pass a dasherized string instead of ${inspect(modelName)}`, typeof modelName === 'string');
let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);
let serializer = this.serializerFor(normalizedModelName);
let model = this._modelFor(normalizedModelName);
return serializer.normalize(model, payload);
Expand Down Expand Up @@ -2612,7 +2588,7 @@ Store = Service.extend({
heimdall.increment(adapterFor);
assert(`You need to pass a model name to the store's adapterFor method`, isPresent(modelName));
assert(`Passing classes to store.adapterFor has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');
let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

return this._instanceCache.get('adapter', normalizedModelName);
},
Expand Down Expand Up @@ -2646,7 +2622,7 @@ Store = Service.extend({
heimdall.increment(serializerFor);
assert(`You need to pass a model name to the store's serializerFor method`, isPresent(modelName));
assert(`Passing classes to store.serializerFor has been removed. Please pass a dasherized string instead of ${modelName}`, typeof modelName === 'string');
let normalizedModelName = this._classKeyFor(modelName);
let normalizedModelName = normalizeModelName(modelName);

return this._instanceCache.get('serializer', normalizedModelName);
},
Expand Down
16 changes: 8 additions & 8 deletions addon/-private/system/store/finders.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ export function _find(adapter, store, modelClass, id, internalModel, options) {
}, `DS: Extract payload of '${modelName}'`);
}

export function _findMany(adapter, store, modelClass, ids, internalModels) {
export function _findMany(adapter, store, modelName, ids, internalModels) {
let snapshots = Ember.A(internalModels).invoke('createSnapshot');
let { modelName } = modelClass; // TODO: pass in modelName, or something
let modelClass = store.modelFor(modelName); // `adapter.findMany` gets the modelClass still
let promise = adapter.findMany(store, modelClass, ids, snapshots);
let serializer = serializerForAdapter(store, adapter, modelName);
let label = `DS: Handle Adapter#findMany of '${modelName}'`;
Expand Down Expand Up @@ -118,8 +118,8 @@ export function _findBelongsTo(adapter, store, internalModel, link, relationship
}, null, `DS: Extract payload of ${internalModel.modelName} : ${relationship.type}`);
}

export function _findAll(adapter, store, modelClass, sinceToken, options) {
let modelName = modelClass.modelName; // TODO: pass in modelName
export function _findAll(adapter, store, modelName, sinceToken, options) {
let modelClass = store.modelFor(modelName); // adapter.findAll depends on the class
let recordArray = store.peekAll(modelName);
let snapshotArray = recordArray._createSnapshot(options);
let promise = adapter.findAll(store, modelClass, sinceToken, snapshotArray);
Expand All @@ -140,8 +140,8 @@ export function _findAll(adapter, store, modelClass, sinceToken, options) {
}, null, 'DS: Extract payload of findAll ${modelName}');
}

export function _query(adapter, store, modelClass, query, recordArray) {
let modelName = modelClass.modelName; // TODO: name yo
export function _query(adapter, store, modelName, query, recordArray) {
let modelClass = store.modelFor(modelName); // adapter.query needs the class
let promise = adapter.query(store, modelClass, query, recordArray);

let serializerToken = heimdall.start('initial-serializerFor-lookup');
Expand All @@ -165,8 +165,8 @@ export function _query(adapter, store, modelClass, query, recordArray) {
}, null, `DS: Extract payload of query ${modelName}`);
}

export function _queryRecord(adapter, store, modelClass, query) {
let modelName = modelClass.modelName;
export function _queryRecord(adapter, store, modelName, query) {
let modelClass = store.modelFor(modelName); // adapter.queryRecord needs the class
let promise = adapter.queryRecord(store, modelClass, query);
let serializer = serializerForAdapter(store, adapter, modelName);
let label = `DS: Handle Adapter#queryRecord of ${modelName}`;
Expand Down