Skip to content

Commit

Permalink
Merge pull request #1978 from montagejs/master
Browse files Browse the repository at this point in the history
Merge master in commonjs
  • Loading branch information
hthetiot authored May 14, 2018
2 parents 0aec6f7 + 63b5fd8 commit 4a0b76e
Show file tree
Hide file tree
Showing 15 changed files with 447 additions and 179 deletions.
49 changes: 24 additions & 25 deletions core/meta/object-descriptor.js
Original file line number Diff line number Diff line change
Expand Up @@ -404,35 +404,34 @@ var ObjectDescriptor = exports.ObjectDescriptor = Montage.specialize( /** @lends
}
},

_preparePropertyDescriptorsCache: {
value: function () {
var ownDescriptors = this._ownPropertyDescriptors,
isReady = true,
descriptor, i, n;

if (!this._propertyDescriptorsAreCached) {

for (i = 0, n = ownDescriptors.length; i < n && isReady; ++i) {
descriptor = ownDescriptors[i];
isReady = !!(descriptor && descriptor.name);
}

if (isReady) {
this._propertyDescriptorsAreCached = true;
this._propertyDescriptors = [];
this._propertyDescriptorsTable.clear();
for (i = 0, n = ownDescriptors.length; i < n; ++i) {
_preparePropertyDescriptorsCache: {
value: function () {
var ownDescriptors = this._ownPropertyDescriptors,
isReady = true,
descriptor, i, n;
if (!this._propertyDescriptorsAreCached) {

for (i = 0, n = ownDescriptors.length; i < n && isReady; ++i) {
descriptor = ownDescriptors[i];
descriptor._owner = this;
this._propertyDescriptors.push(descriptor);
this._propertyDescriptorsTable.set(descriptor.name, descriptor);
isReady = !!(descriptor && descriptor.name);
}

if (isReady) {
this._propertyDescriptorsAreCached = true;
this._propertyDescriptors = [];
this._propertyDescriptorsTable.clear();
for (i = 0, n = ownDescriptors.length; i < n; ++i) {
descriptor = ownDescriptors[i];
descriptor._owner = this;
this._propertyDescriptors.push(descriptor);
this._propertyDescriptorsTable.set(descriptor.name, descriptor);
}
this.addRangeAtPathChangeListener("_ownPropertyDescriptors", this, "_handlePropertyDescriptorsRangeChange");
this.addRangeAtPathChangeListener("parent.propertyDescriptors", this, "_handlePropertyDescriptorsRangeChange");
}
this.addRangeAtPathChangeListener("_ownPropertyDescriptors", this, "_handlePropertyDescriptorsRangeChange");
this.addRangeAtPathChangeListener("parent.propertyDescriptors", this, "_handlePropertyDescriptorsRangeChange");
}
}
}
},
},

/**
* PropertyDescriptors for this object descriptor, not including those
Expand Down
71 changes: 70 additions & 1 deletion data/model/data-query.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
var Montage = require("montage").Montage;
var Montage = require("montage").Montage,
ModuleReference = require("core/module-reference").ModuleReference;

/**
* Defines the criteria that objects must satisfy to be included in a set of
Expand All @@ -9,12 +10,80 @@ var Montage = require("montage").Montage;
*/
exports.DataQuery = Montage.specialize(/** @lends DataQuery.prototype */ {


deserializeSelf: {
value: function (deserializer) {
var result, value;

value = deserializer.getProperty("criteria");
if (value !== void 0) {
this.criteria = value;
}

value = deserializer.getProperty("orderings");
if (value !== void 0) {
this.orderings = value;
}

value = deserializer.getProperty("prefetchExpressions");
if (value !== void 0) {
this.prefetchExpressions = value;
}

value = deserializer.getProperty("selectBindings");
if (value !== void 0) {
this.selectBindings = value;
}

value = deserializer.getProperty("selectExpression");
if (value !== void 0) {
this.selectExpression = value;
}


value = deserializer.getProperty("type");
if (value !== void 0) {
this.type = value;
} else {
value = deserializer.getProperty("typeModule");
if (value) {
var self = this;

result = value.require.async(value.id).then(function (exports) {
self.type = exports.montageObject;
return self;
});
}
}

return result || Promise.resolve(this);
}
},

serializeSelf: {
value: function (serializer) {
serializer.setProperty("criteria", this.criteria);
serializer.setProperty("orderings", this.orderings);
serializer.setProperty("prefetchExpressions", this.prefetchExpressions);
serializer.setProperty("selectBindings", this.selectBindings);
serializer.setProperty("selectExpression", this.selectExpression);

if (this.type.objectDescriptorInstanceModule) {
serializer.setProperty("typeModule", this.type.objectDescriptorInstanceModule);
} else {
serializer.setProperty("type", this.type);
}

}
},

/**
* The type of the data object to retrieve.
*
* @type {DataObjectDescriptor}
*/
type: {
serializable: "value",
value: undefined
},

Expand Down
50 changes: 30 additions & 20 deletions data/service/data-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -483,9 +483,10 @@ exports.DataService = Montage.specialize(/** @lends DataService.prototype */ {

_objectDescriptorForType: {
value: function (type) {
return this._constructorToObjectDescriptorMap.get(type) ||
typeof type === "string" && this._moduleIdToObjectDescriptorMap[type] ||
type;
var descriptor = this._constructorToObjectDescriptorMap.get(type) ||
typeof type === "string" && this._moduleIdToObjectDescriptorMap[type];

return descriptor || type;
}
},

Expand Down Expand Up @@ -1177,7 +1178,7 @@ exports.DataService = Montage.specialize(/** @lends DataService.prototype */ {
var self = this,
propertyName = propertiesToRequest.shift(),
promise = this.getObjectProperties(object, propertyName);

if (promise) {
return promise.then(function () {
var result = null;
Expand Down Expand Up @@ -1295,29 +1296,40 @@ exports.DataService = Montage.specialize(/** @lends DataService.prototype */ {
}
},

_isAsync: {
value: function (object) {
return object && object.then && typeof object.then === "function";
}
},

_fetchObjectPropertyWithPropertyDescriptor: {
value: function (object, propertyName, propertyDescriptor) {
var self = this,
objectDescriptor = propertyDescriptor.owner,
mapping = objectDescriptor && this.mappingWithType(objectDescriptor),
data = {};
data = {},
result;


if (mapping) {

Object.assign(data, this.snapshotForObject(object));

return mapping.mapObjectToCriteriaSourceForProperty(object, data, propertyName).then(function() {
result = mapping.mapObjectToCriteriaSourceForProperty(object, data, propertyName);
if (this._isAsync(result)) {
return result.then(function() {
Object.assign(data, self.snapshotForObject(object));
return mapping.mapRawDataToObjectProperty(data, object, propertyName);
});
} else {
Object.assign(data, self.snapshotForObject(object));
return mapping.mapRawDataToObjectProperty(data, object, propertyName);
});
result = mapping.mapRawDataToObjectProperty(data, object, propertyName);
if (!this._isAsync(result)) {
result = this.nullPromise;
}
return result;
}
} else {
return this.nullPromise;
}


//return mapping.
// (object,{}, propertyName);

}
},

Expand Down Expand Up @@ -1351,9 +1363,7 @@ exports.DataService = Montage.specialize(/** @lends DataService.prototype */ {
}
}
}
// if (names.indexOf("geometryType")) {
//
// }

// Return a promise that will be fulfilled only when all of the
// requested data has been set on the object. If possible do this
// without creating any additional promises.
Expand Down Expand Up @@ -1918,9 +1928,9 @@ exports.DataService = Montage.specialize(/** @lends DataService.prototype */ {
}
return mappingPromise.then(function () {
return self.saveRawData(record, object)
.then(function () {
.then(function (data) {
self.rootService.createdDataObjects.delete(object);
return null;
return data;
});
});
}
Expand Down
11 changes: 5 additions & 6 deletions data/service/data-trigger.js
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,7 @@ exports.DataTrigger.prototype = Object.create({}, /** @lends DataTrigger.prototy
var prototype, descriptor, getter;
// Start an asynchronous fetch of the property's value if necessary.
this.getObjectProperty(object);

// Search the prototype chain for a getter for this property,
// starting just after the prototype that called this method.
prototype = Object.getPrototypeOf(this._objectPrototype);
Expand Down Expand Up @@ -408,12 +409,10 @@ Object.defineProperties(exports.DataTrigger, /** @lends DataTrigger */ {
propertyDescriptor, trigger, name, i;

for (i = 0; (propertyDescriptor = propertyDescriptors[i]); i += 1) {
if (!requisitePropertyNames.has(propertyDescriptor.name)) {
name = propertyDescriptor.name;
trigger = this.addTrigger(service, objectDescriptor, prototype, name);
if (trigger) {
triggers[name] = trigger;
}
name = propertyDescriptor.name;
trigger = this.addTrigger(service, objectDescriptor, prototype, name);
if (trigger) {
triggers[name] = trigger;
}
}
return triggers;
Expand Down
Loading

0 comments on commit 4a0b76e

Please sign in to comment.