busy-data
Version:
The default blueprint for ember-cli addons.
83 lines (70 loc) • 1.91 kB
JavaScript
/**
* @module app/initializers
*
*/
import DS from 'ember-data';
import { get } from '@ember/object';
import RPCModelMixin from 'busy-data/mixins/rpc-model';
export default {
name: 'busy-data',
initialize(/*registry*/) {
DS.RPCModel = DS.Model.extend(RPCModelMixin, {});
const belongsTo = DS.belongsTo;
DS.belongsTo = function(modelName, options={}) {
options.modelName = modelName;
return belongsTo(modelName, options);
};
const hasMany = DS.hasMany;
DS.hasMany = function(modelName, options={}) {
options.modelName = modelName;
return hasMany(modelName, options);
};
DS.Model.reopen( {
getRecord() {
// fix for the model._internalModel issue.
return this._internalModel.getRecord();
},
saveBatch(auto) {
this._batch = true;
this._autoBatch = auto === true ? true : false;
return this.save();
},
reloadAll() {
return this.reload().then(model => {
this.reloadRelationships();
return model;
});
},
reloadRelationships() {
this.eachRelationship(name => {
const model = this.get(name);
if (model.reload) {
model.reload();
} else {
model.get('content');
if (model.reload) {
model.reload();
}
}
});
}
});
DS.Model.reopenClass({
eachRelationship(callback, binding) {
get(this, 'relationshipsByName').forEach(function(relationship, name) {
if (relationship.options.modelName !== relationship.type) {
relationship.type = relationship.options.modelName;
}
callback.call(binding, name, relationship);
});
},
typeForRelationship(name, store) {
var relationship = get(this, 'relationshipsByName').get(name);
if (relationship.options.modelName !== relationship.type) {
relationship.type = relationship.options.modelName;
}
return relationship && store.modelFor(relationship.type);
}
});
}
};