Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
33608bb
Adds a name property to DataQuery
marchant Apr 13, 2018
f5a3d9e
First batch of proposed changes to DataOperation, WIP
marchant Apr 13, 2018
7745a5d
updates comment
marchant Apr 13, 2018
a5cbc2e
WIP: Updates DataOperations to make it more, operational
marchant Apr 30, 2018
83c3c9e
- renames instance’s _currentIndex to creationIndex
marchant May 7, 2018
bd7072c
Begin RawDataWorker -- WIP
tejaede Apr 28, 2018
f084e0c
Continue work on RawDataWorker
tejaede Apr 30, 2018
d30be8e
Add temporary RawDataOperation. Remove logs.
tejaede May 7, 2018
4c17da5
Remove backup files
tejaede May 7, 2018
19e2743
Reinstate specs
tejaede May 7, 2018
199275a
Fix specs
tejaede May 7, 2018
d013655
Add spec for moving mapping to DataService
tejaede Apr 3, 2018
e924e75
Move addRawData to DataService
tejaede Apr 3, 2018
4a28669
Reorganize DataService into sections
tejaede Apr 6, 2018
1e8810b
Move mapping of rawData into DataService
tejaede Apr 11, 2018
56240ef
Refine specs for mapping in DataService
tejaede Apr 12, 2018
db82aa0
Improve support for DataService#mapObjectToRawData
tejaede Apr 16, 2018
a7bf321
Reorganize DataService and reinstate unit tests
tejaede Apr 16, 2018
b769e57
Update documentation of DataService
tejaede Apr 16, 2018
14a2a59
Update DataService documentation
tejaede Apr 16, 2018
35ae86f
Continue updating DataService documentation
tejaede Apr 16, 2018
e1e634b
Improve logic of whether addOneRawData can perform mapping
tejaede Apr 18, 2018
10821a2
Add batchAddsDataToStream property
tejaede Apr 18, 2018
75ee017
Fix specs of raw-data-service & data-service. Refactor addRawData
tejaede Apr 19, 2018
c5681e9
Fix lint
tejaede Apr 23, 2018
59abae3
Interim
tejaede May 11, 2018
b0f1f1d
Fix data-operation require of criteria & add spec
tejaede May 12, 2018
7c0666f
Merge branch 'data-operation-evolution' into features/sentinel
tejaede May 14, 2018
c27e75b
Merge branch 'tej/features/data-service-mapping' into features/sentinel
tejaede May 14, 2018
e4f6deb
Merge branch 'features/raw-data-worker' into features/sentinel
tejaede May 14, 2018
67a2515
Fix criteria reference
tejaede May 12, 2018
eef295b
Refactor RawDataWorker to use operation
tejaede May 12, 2018
bfc9c3e
Build out RawDataWorker spec
tejaede May 13, 2018
1139769
Fix spec
tejaede May 14, 2018
2496461
Reinstate specs
tejaede May 14, 2018
3fef127
Fix lint
tejaede May 14, 2018
84b084d
Remove log
tejaede May 14, 2018
8664e27
Fix merge errors
tejaede May 14, 2018
470c6b5
Merge branch 'master' into features/sentinel
tejaede May 17, 2018
58b8c2d
Update raw-data-worker to use native Map deserialization
tejaede May 17, 2018
ddb4774
Make RawDataWorker function as rootService
tejaede May 17, 2018
b30aa5f
Refactor DataOperation to a module
tejaede May 21, 2018
ff1e01e
Improve DataTrigger serialization spec
tejaede May 31, 2018
a91509a
Respect propertyDescriptor.serializable in DataTrigger.addTrigger
tejaede May 31, 2018
b49e77b
Fix minor serialization/mapping bugs
tejaede May 23, 2018
3ab8006
Move DataOperationType to own module
tejaede May 30, 2018
6c1618e
Fix minor serialization/mapping bugs
tejaede Jun 4, 2018
b6066cd
Fix mapping bugs
tejaede Jun 6, 2018
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
2 changes: 1 addition & 1 deletion core/core.js
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ valuePropertyDescriptor.value = function Montage_defineProperty(obj, prop, descr
if (! (typeof obj === "object" || typeof obj === FUNCTION) || obj === null) {
throw new TypeError("Object must be an object, not '" + obj + "'");
}

var isValueDescriptor = (VALUE in descriptor);

// reset defaults appropriately for framework.
Expand Down
14 changes: 12 additions & 2 deletions core/criteria.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,10 @@ var Criteria = exports.Criteria = Montage.specialize({
*/
syntax: {
get: function() {
return this._syntax || (this._syntax = parse(this._expression));
if (!this._syntax && this.expression) {
this._syntax = parse(this.expression);
}
return this._syntax;
}
},
_compiledSyntax: {
Expand Down Expand Up @@ -121,7 +124,14 @@ var Criteria = exports.Criteria = Montage.specialize({

serializeSelf: {
value: function (serializer) {
serializer.setProperty("expression", this._expression || (this._expression = stringify(this.syntax)));
// serializer.setProperty("expression", this._expression || (this._expression = stringify(this.syntax)));
if (this._expression) {
serializer.setProperty("expression", this._expression);
} else if (this.syntax) {
serializer.setProperty("expression", (this._expression = stringify(this.syntax)));
} else {
serializer.setProperty("expression", "");
}
serializer.setProperty("parameters", this.parameters);
}
},
Expand Down
2 changes: 1 addition & 1 deletion core/deprecate.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* global console */
var Montage = require("./core").Montage;
var Montage = require("./core").Montage,
Map = require("collections/map");

var deprecatedFeaturesOnceMap = new Map();
Expand Down
33 changes: 27 additions & 6 deletions core/meta/property-descriptor.js
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ exports.PropertyDescriptor = Montage.specialize( /** @lends PropertyDescriptor#
this._setPropertyWithDefaults(serializer, "collectionValueType", this.collectionValueType);
this._setPropertyWithDefaults(serializer, "valueObjectPrototypeName", this.valueObjectPrototypeName);
this._setPropertyWithDefaults(serializer, "valueObjectModuleId", this.valueObjectModuleId);
this._setPropertyWithDefaults(serializer, "valueDescriptor", this._valueDescriptorReference);
this._setPropertyWithDefaults(serializer, "valueDescriptor", this._valueDescriptor || this._valueDescriptorReference);
if (this.enumValues.length > 0) {
this._setPropertyWithDefaults(serializer, "enumValues", this.enumValues);
}
Expand All @@ -125,12 +125,17 @@ exports.PropertyDescriptor = Montage.specialize( /** @lends PropertyDescriptor#
if (value !== void 0) {
this._owner = value;
}

this._overridePropertyWithDefaults(deserializer, "cardinality");

if (this.cardinality === -1) {
this.cardinality = Infinity;
}

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

this._overridePropertyWithDefaults(deserializer, "mandatory");
this._overridePropertyWithDefaults(deserializer, "readOnly");
Expand All @@ -139,7 +144,7 @@ exports.PropertyDescriptor = Montage.specialize( /** @lends PropertyDescriptor#
this._overridePropertyWithDefaults(deserializer, "collectionValueType");
this._overridePropertyWithDefaults(deserializer, "valueObjectPrototypeName");
this._overridePropertyWithDefaults(deserializer, "valueObjectModuleId");
this._overridePropertyWithDefaults(deserializer, "_valueDescriptorReference", "valueDescriptor", "targetBlueprint");
this._overridePropertyWithDefaults(deserializer, "valueDescriptor", "valueDescriptor", "targetBlueprint");
this._overridePropertyWithDefaults(deserializer, "enumValues");
this._overridePropertyWithDefaults(deserializer, "defaultValue");
this._overridePropertyWithDefaults(deserializer, "helpKey");
Expand Down Expand Up @@ -303,7 +308,7 @@ exports.PropertyDescriptor = Montage.specialize( /** @lends PropertyDescriptor#
*/
isDerived: {
get: function () {
return false;
return this._isDerived || false;
}
},

Expand Down Expand Up @@ -363,14 +368,30 @@ exports.PropertyDescriptor = Montage.specialize( /** @lends PropertyDescriptor#
*/
valueDescriptor: {
serializable: false,
get: function () {
// TODO: Needed for backwards compatibility with ObjectDescriptorReference.
// Remove eventually, this can become completely sync
if (this._valueDescriptor && typeof this._valueDescriptor.promise === "function") {
deprecate.deprecationWarningOnce("valueDescriptor reference via ObjectDescriptorReference", "direct reference via object syntax");
return this._valueDescriptor.promise(this.require);
} else {
return this._valueDescriptor;
}
},
set: function (descriptor) {
this._valueDescriptor = descriptor;
}
},

valueDescriptorReference: {
get: function () {
// TODO: Needed for backwards compatibility with ObjectDescriptorReference.
// Remove eventually, this can become completely sync
if (this._valueDescriptorReference && typeof this._valueDescriptorReference.promise === "function") {
deprecate.deprecationWarningOnce("valueDescriptor reference via ObjectDescriptorReference", "direct reference via object syntax");
return this._valueDescriptorReference.promise(this.require);
} else {
return this._valueDescriptorReference && Promise.resolve(this._valueDescriptorReference);
return this._valueDescriptor && Promise.resolve(this._valueDescriptor);
}
},
set: function (descriptor) {
Expand Down
4 changes: 3 additions & 1 deletion core/serialization/deserializer/montage-reviver.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,10 @@ var ModuleLoader = Montage.specialize({
moduleDescriptor = _require.getModuleDescriptor(module.redirect);
}



if (moduleDescriptor.mappingRedirect !== void 0) {
return this.getExports(
return this.getModuleDescriptor(
moduleDescriptor.mappingRequire,
moduleDescriptor.mappingRedirect
);
Expand Down
6 changes: 6 additions & 0 deletions core/serialization/deserializer/self-deserializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@ var SelfDeserializer = Montage.specialize( {
},

getProperty: {
value: deprecate.deprecateMethod(void 0, function (name) {
return this.getValue(name);
}, "getProperty", "getValue", true)
},

getValue: {
value: function (name) {
if (this._objectDescriptor.values) {
return this._objectDescriptor.values[name];
Expand Down
9 changes: 7 additions & 2 deletions core/serialization/serializer/montage-visitor.js
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ var MontageVisitor = Montage.specialize({
var builderObject = this.builder.createCustomObject(),
substituteObject;


this.setObjectSerialization(object, builderObject);

substituteObject = this.serializeMontageObject(malker, object, builderObject);
Expand Down Expand Up @@ -349,15 +350,18 @@ var MontageVisitor = Montage.specialize({
if (!malker.legacyMode) {
var unitSerializer = new UnitSerializer()
.initWithMalkerAndVisitorAndObject(malker, this, object),
bindings = Bindings.serializeObjectBindings(unitSerializer, object);
bindings = Bindings.serializeObjectBindings(unitSerializer, object),
propertyNames = new Set(Montage.getSerializablePropertyNames(object));



if (bindings) {
var valuesObject = this.builder.top.getProperty("values");
this.builder.push(valuesObject);


/* jshint forin: true */
for (var key in bindings) {
for (var key in bindings && propertyNames.has(key)) {
/* jshint forin: false */
this.builder.top.setProperty(key, bindings[key]);
}
Expand Down Expand Up @@ -416,6 +420,7 @@ var MontageVisitor = Montage.specialize({
propertyNames = Montage.getSerializablePropertyNames(object),
propertyNamesCount = propertyNames.length;


for (var i = 0; i < propertyNamesCount; i++) {
propertyName = propertyNames[i];
type = Montage.getPropertyAttribute(object, propertyName, "serializable");
Expand Down
20 changes: 16 additions & 4 deletions data/converter/raw-property-value-to-object-converter.js
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,10 @@ exports.RawPropertyValueToObjectConverter = Converter.specialize( /** @lends Raw

convertSyntax: {
get: function() {
return this._convertSyntax || (this._convertSyntax = parse(this.convertExpression));
if (!this._convertSyntax && this.convertExpression) {
this._convertSyntax = parse(this.convertExpression);
}
return this._convertSyntax;
}
},

Expand Down Expand Up @@ -162,7 +165,10 @@ exports.RawPropertyValueToObjectConverter = Converter.specialize( /** @lends Raw
* */
revertSyntax: {
get: function() {
return this._revertSyntax || (this._revertSyntax = parse(this.revertExpression));
if (!this._revertSyntax && this.revertExpression) {
this._revertSyntax = parse(this.revertExpression);
}
return this._revertSyntax;
}
},

Expand All @@ -172,7 +178,10 @@ exports.RawPropertyValueToObjectConverter = Converter.specialize( /** @lends Raw

compiledRevertSyntax: {
get: function () {
return this._compiledRevertSyntax || (this._compiledRevertSyntax = compile(this.revertSyntax));
if (!this._compiledRevertSyntax && this.revertSyntax) {
this._compiledRevertSyntax = compile(this.revertSyntax);
}
return this._compiledRevertSyntax;
}
},

Expand Down Expand Up @@ -314,14 +323,17 @@ exports.RawPropertyValueToObjectConverter = Converter.specialize( /** @lends Raw

return this._descriptorToFetch.then(function (typeToFetch) {
var type = [typeToFetch.module.id, typeToFetch.name].join("/");

if (self.serviceIdentifier) {
criteria.parameters.serviceIdentifier = self.serviceIdentifier;
}

query = DataQuery.withTypeAndCriteria(type, criteria);

return self.service ? self.service.then(function (service) {
// if (type.indexOf("Renderer") !== -1) {
// debugger;
// }
return service.rootService.fetchData(query);
}) : null;
});
Expand Down
6 changes: 6 additions & 0 deletions data/model/data-identifier.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ var Montage = require("core/core").Montage;
*
* Exact details are not exposed and may vary per specific DataService or RawDataService
*
* Note, a dataService's identifier is by default it's moduleId.
*
* "montage-data://[this.dataService.identifier]/[this.dataService.connectionDescriptor.name]/[this.objectDescriptor.name]/[this.primaryKey]
*
* "montage-data://twitter-service/production/user/14DS9ZT459EF44305UI

* @class
* @extends external:Montage
*/
Expand Down
5 changes: 3 additions & 2 deletions data/model/data-object-descriptor.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var ObjectDescriptor = require("./object-descriptor").ObjectDescriptor,
DataPropertyDescriptor = require("./data-property-descriptor").DataPropertyDescriptor;
DataPropertyDescriptor = require("./data-property-descriptor").DataPropertyDescriptor,
deprecate = require("core/deprecate");

/**
* Extends an object descriptor with the additional object information needed by
Expand All @@ -10,7 +11,7 @@ var ObjectDescriptor = require("./object-descriptor").ObjectDescriptor,
* @extends ObjectDescriptor
*/
exports.DataObjectDescriptor = ObjectDescriptor.specialize(/** @lends DataObjectDescriptor.prototype */ {

/**
* The names of the properties containing the identifier for this type of
* data object.
Expand Down
9 changes: 9 additions & 0 deletions data/model/data-query.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,15 @@ exports.DataQuery = Montage.specialize(/** @lends DataQuery.prototype */ {
value: undefined
},

/**
* A property used to give a meaningful name to an operation
*
* @type {string}
*/
name: {
value: undefined
},

/**
* An object defining the criteria that must be satisfied by objects for
* them to be included in the data set defined by this query.
Expand Down
24 changes: 22 additions & 2 deletions data/service/data-mapping.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,36 @@ exports.DataMapping = Montage.specialize(/** @lends DataMapping.prototype */ {
*/
mapRawDataToObject: {
value: function (data, object, context) {
var i, key,
keys = Object.keys(data);
var i, key, keys;

if (data) {
keys = Object.keys(data);
for (i = 0; (key = keys[i]); ++i) {
object[key] = data[key];
}
}
}
},

/**
* Maps the value of a single raw data property onto the model object
*
* @method
* @argument {Object} data - An object whose properties' values
* hold the raw data.
* @argument {Object} object - The object on which to assign the property
* @argument {string} propertyName - The name of the model property to which
* to assign the value(s).
* @returns {DataStream|Promise|?} - Either the value or a "promise" for it
*
*/
mapRawDataToObjectProperty: {
value: function (data, object, propertyName) {
// TO DO: Provide a default mapping based on object descriptor and prpoerty name
// For now, subclasses must override this.
}
},

/**
* @todo Document.
*/
Expand Down
Loading