Commit 0500b645 authored by Romain Courteaud's avatar Romain Courteaud

Release 3.30.0

Speed optimization.
parent ee320069
...@@ -8195,24 +8195,42 @@ return new Parser; ...@@ -8195,24 +8195,42 @@ return new Parser;
} }
} }
function ensurePushableQueue(callback, argument_list, context) {
var result;
try {
result = callback.apply(context, argument_list);
} catch (e) {
return new RSVP.Queue()
.push(function returnPushableError() {
return RSVP.reject(e);
});
}
if (result instanceof RSVP.Queue) {
return result;
}
return new RSVP.Queue()
.push(function returnPushableResult() {
return result;
});
}
function declareMethod(klass, name, precondition_function, post_function) { function declareMethod(klass, name, precondition_function, post_function) {
klass.prototype[name] = function () { klass.prototype[name] = function () {
var argument_list = arguments, var argument_list = arguments,
context = this, context = this,
precondition_result; precondition_result,
storage_method,
queue;
return new RSVP.Queue() // Precondition function are not asynchronous
.push(function () {
if (precondition_function !== undefined) { if (precondition_function !== undefined) {
return precondition_function.apply( precondition_result = precondition_function.apply(
context.__storage, context.__storage,
[argument_list, context, name] [argument_list, context, name]
); );
} }
})
.push(function (result) { storage_method = context.__storage[name];
var storage_method = context.__storage[name];
precondition_result = result;
if (storage_method === undefined) { if (storage_method === undefined) {
throw new jIO.util.jIOError( throw new jIO.util.jIOError(
"Capacity '" + name + "' is not implemented on '" + "Capacity '" + name + "' is not implemented on '" +
...@@ -8220,22 +8238,21 @@ return new Parser; ...@@ -8220,22 +8238,21 @@ return new Parser;
501 501
); );
} }
return storage_method.apply( queue = ensurePushableQueue(storage_method, argument_list,
context.__storage, context.__storage);
argument_list
);
})
.push(function (result) {
if (post_function !== undefined) { if (post_function !== undefined) {
queue
.push(function (result) {
return post_function.call( return post_function.call(
context, context,
argument_list, argument_list,
result, result,
precondition_result precondition_result
); );
}
return result;
}); });
}
return queue;
}; };
// Allow chain // Allow chain
return this; return this;
...@@ -8267,8 +8284,7 @@ return new Parser; ...@@ -8267,8 +8284,7 @@ return new Parser;
JioProxyStorage.prototype.post = function () { JioProxyStorage.prototype.post = function () {
var context = this, var context = this,
argument_list = arguments; argument_list = arguments;
return new RSVP.Queue() return ensurePushableQueue(function () {
.push(function () {
var storage_method = context.__storage.post; var storage_method = context.__storage.post;
if (storage_method === undefined) { if (storage_method === undefined) {
throw new jIO.util.jIOError( throw new jIO.util.jIOError(
...@@ -8395,13 +8411,8 @@ return new Parser; ...@@ -8395,13 +8411,8 @@ return new Parser;
501 501
); );
} }
return new RSVP.Queue() return ensurePushableQueue(storage_method, argument_list,
.push(function () { context.__storage);
return storage_method.apply(
context.__storage,
argument_list
);
});
}; };
JioProxyStorage.prototype.hasCapacity = function (name) { JioProxyStorage.prototype.hasCapacity = function (name) {
...@@ -8425,8 +8436,7 @@ return new Parser; ...@@ -8425,8 +8436,7 @@ return new Parser;
if (options === undefined) { if (options === undefined) {
options = {}; options = {};
} }
return new RSVP.Queue() return ensurePushableQueue(function () {
.push(function () {
if (context.hasCapacity("list") && if (context.hasCapacity("list") &&
((options.query === undefined) || context.hasCapacity("query")) && ((options.query === undefined) || context.hasCapacity("query")) &&
((options.sort_on === undefined) || context.hasCapacity("sort")) && ((options.sort_on === undefined) || context.hasCapacity("sort")) &&
...@@ -8435,9 +8445,7 @@ return new Parser; ...@@ -8435,9 +8445,7 @@ return new Parser;
((options.include_docs === undefined) || ((options.include_docs === undefined) ||
context.hasCapacity("include")) && context.hasCapacity("include")) &&
((options.limit === undefined) || context.hasCapacity("limit"))) { ((options.limit === undefined) || context.hasCapacity("limit"))) {
return context.buildQuery(options); return context.buildQuery(options)
}
})
.push(function (result) { .push(function (result) {
return { return {
data: { data: {
...@@ -8446,6 +8454,8 @@ return new Parser; ...@@ -8446,6 +8454,8 @@ return new Parser;
} }
}; };
}); });
}
});
}; };
declareMethod(JioProxyStorage, "allAttachments", checkId); declareMethod(JioProxyStorage, "allAttachments", checkId);
...@@ -8454,8 +8464,7 @@ return new Parser; ...@@ -8454,8 +8464,7 @@ return new Parser;
JioProxyStorage.prototype.repair = function () { JioProxyStorage.prototype.repair = function () {
var context = this, var context = this,
argument_list = arguments; argument_list = arguments;
return new RSVP.Queue() return ensurePushableQueue(function () {
.push(function () {
var storage_method = context.__storage.repair; var storage_method = context.__storage.repair;
if (storage_method !== undefined) { if (storage_method !== undefined) {
return context.__storage.repair.apply(context.__storage, return context.__storage.repair.apply(context.__storage,
...@@ -12385,8 +12394,6 @@ return new Parser; ...@@ -12385,8 +12394,6 @@ return new Parser;
}; };
function extractPropertyFromFormJSON(json) { function extractPropertyFromFormJSON(json) {
return new RSVP.Queue()
.push(function () {
var form = json._embedded._view, var form = json._embedded._view,
converted_json = { converted_json = {
portal_type: json._links.type.name portal_type: json._links.type.name
...@@ -12437,7 +12444,6 @@ return new Parser; ...@@ -12437,7 +12444,6 @@ return new Parser;
result.action_href = form._actions.put.href; result.action_href = form._actions.put.href;
} }
return result; return result;
});
} }
function extractPropertyFromForm(context, id) { function extractPropertyFromForm(context, id) {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
{ {
"name": "jio", "name": "jio",
"version": "v3.29.0", "version": "v3.30.0",
"license": "LGPLv3", "license": "LGPLv3",
"author": "Nexedi SA", "author": "Nexedi SA",
"contributors": [ "contributors": [
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment