Export enums and fix TraversalStrategies#applyStrategies()
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/10c71551 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/10c71551 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/10c71551 Branch: refs/heads/TINKERPOP-1489 Commit: 10c7155166e815304773eef5dc0076f20370aa81 Parents: 2d85056 Author: Jorge Bay Gondra <jorgebaygon...@gmail.com> Authored: Fri Oct 7 12:01:30 2016 +0200 Committer: Jorge Bay Gondra <jorgebaygon...@gmail.com> Committed: Fri Jan 19 09:30:14 2018 +0100 ---------------------------------------------------------------------- .../GraphTraversalSourceGenerator.groovy | 4 +- .../javascript/TraversalSourceGenerator.groovy | 52 +++++++++----------- .../driver/remote-connection.js | 2 +- .../main/javascript/gremlin-javascript/index.js | 11 ++++- .../process/graph-traversal.js | 4 +- .../gremlin-javascript/process/traversal.js | 44 ++++++++--------- .../gremlin-javascript/test-exports.js | 15 ++++-- .../gremlin-javascript/test-graphson.js | 2 +- .../gremlin-javascript/test-traversal.js | 17 ++++++- 9 files changed, 87 insertions(+), 64 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/10c71551/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/GraphTraversalSourceGenerator.groovy ---------------------------------------------------------------------- diff --git a/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/GraphTraversalSourceGenerator.groovy b/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/GraphTraversalSourceGenerator.groovy index 81c38dc..b569292 100644 --- a/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/GraphTraversalSourceGenerator.groovy +++ b/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/GraphTraversalSourceGenerator.groovy @@ -87,12 +87,12 @@ class GraphTraversalSourceGenerator { /** * @param remoteConnection - * @returns {GraphTraversal} + * @returns {GraphTraversalSource} */ GraphTraversalSource.prototype.withRemote = function (remoteConnection) { var traversalStrategy = new t.TraversalStrategies(this._traversalStrategies); traversalStrategy.addStrategy(new remote.RemoteStrategy(remoteConnection)); - return new GraphTraversal(this._graph, traversalStrategy, new Bytecode(this._bytecode)); + return new GraphTraversalSource(this._graph, traversalStrategy, new Bytecode(this._bytecode)); }; /** http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/10c71551/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/TraversalSourceGenerator.groovy ---------------------------------------------------------------------- diff --git a/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/TraversalSourceGenerator.groovy b/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/TraversalSourceGenerator.groovy index efcb826..5b07a32 100644 --- a/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/TraversalSourceGenerator.groovy +++ b/gremlin-javascript/src/main/groovy/org/apache/tinkerpop/gremlin/javascript/TraversalSourceGenerator.groovy @@ -177,11 +177,14 @@ class TraversalSourceGenerator { this.strategies.push(strategy); }; - /** @param {Traversal} traversal */ - TraversalStrategies.prototype.applyStrategies = function (traversal) { - this.strategies.forEach(function eachStrategy(s) { - s.apply(traversal); - }); + /** + * @param {Traversal} traversal + * @param {Function} callback + */ + TraversalStrategies.prototype.applyStrategies = function (traversal, callback) { + eachSeries(this.strategies, function eachStrategy(s, next) { + s.apply(traversal, next); + }, callback); }; /** @@ -195,8 +198,9 @@ class TraversalSourceGenerator { /** * @abstract * @param {Traversal} traversal + * @param {Function} callback */ - TraversalStrategy.prototype.apply = function (traversal) { + TraversalStrategy.prototype.apply = function (traversal, callback) { }; @@ -290,24 +294,6 @@ class TraversalSourceGenerator { this.elementName = elementName; } - /** - * @type {{barrier, cardinality, column, direction, operator, order, pop, scope, t}} - */ - var enums = {};\n""") - - for (final Class<? extends Enum> enumClass : CoreImports.getClassImports() - .findAll { Enum.class.isAssignableFrom(it) } - .sort { a, b -> a.getSimpleName() <=> b.getSimpleName() } - .collect()) { - moduleOutput.append(" enums.${SymbolHelper.decapitalize(enumClass.getSimpleName())} = " + - "toEnum('${SymbolHelper.toJs(enumClass.getSimpleName())}', '"); - enumClass.getEnumConstants() - .sort { a, b -> a.name() <=> b.name() } - .each { value -> moduleOutput.append("${SymbolHelper.toJs(value.name())} "); } - moduleOutput.deleteCharAt(moduleOutput.length() - 1).append("');\n") - } - - moduleOutput.append(""" // Utility functions /** @returns {Array} */ function parseArgs() { @@ -376,11 +362,21 @@ class TraversalSourceGenerator { TraversalSideEffects: TraversalSideEffects, TraversalStrategies: TraversalStrategies, TraversalStrategy: TraversalStrategy, - Traverser: Traverser + Traverser: Traverser""") + for (final Class<? extends Enum> enumClass : CoreImports.getClassImports() + .findAll { Enum.class.isAssignableFrom(it) } + .sort { a, b -> a.getSimpleName() <=> b.getSimpleName() } + .collect()) { + moduleOutput.append(",\n ${SymbolHelper.decapitalize(enumClass.getSimpleName())}: " + + "toEnum('${SymbolHelper.toJs(enumClass.getSimpleName())}', '"); + enumClass.getEnumConstants() + .sort { a, b -> a.name() <=> b.name() } + .each { value -> moduleOutput.append("${SymbolHelper.toJs(value.name())} "); } + moduleOutput.deleteCharAt(moduleOutput.length() - 1).append("')") + } + + moduleOutput.append(""" }; - Object.keys(enums).forEach(function (k) { - toExport[k] = enums[k]; - }); if (typeof module !== 'undefined') { // CommonJS module.exports = toExport; http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/10c71551/gremlin-javascript/src/main/javascript/gremlin-javascript/driver/remote-connection.js ---------------------------------------------------------------------- diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/driver/remote-connection.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/driver/remote-connection.js index 99b177f..e19b537 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/driver/remote-connection.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/driver/remote-connection.js @@ -68,7 +68,7 @@ /** @override */ RemoteStrategy.prototype.apply = function (traversal, callback) { if (traversal.traversers) { - return; + return callback(); } this.connection.submit(traversal.getBytecode(), function (err, remoteTraversal) { if (err) { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/10c71551/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js ---------------------------------------------------------------------- diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js index cda8200..ddcdac2 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/index.js @@ -49,14 +49,21 @@ process: { Bytecode: t.Bytecode, EnumValue: t.EnumValue, - inherits: t.inherits, P: t.P, - parseArgs: t.parseArgs, Traversal: t.Traversal, TraversalSideEffects: t.TraversalSideEffects, TraversalStrategies: t.TraversalStrategies, TraversalStrategy: t.TraversalStrategy, Traverser: t.Traverser, + barrier: t.barrier, + cardinality: t.cardinality, + column: t.column, + direction: t.direction, + operator: t.operator, + order: t.order, + pop: t.pop, + scope: t.scope, + t: t.t, GraphTraversal: gt.GraphTraversal, GraphTraversalSource: gt.GraphTraversalSource, statics: gt.statics http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/10c71551/gremlin-javascript/src/main/javascript/gremlin-javascript/process/graph-traversal.js ---------------------------------------------------------------------- diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/process/graph-traversal.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/process/graph-traversal.js index d9803ba..1a6356b 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/process/graph-traversal.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/process/graph-traversal.js @@ -44,12 +44,12 @@ /** * @param remoteConnection - * @returns {GraphTraversal} + * @returns {GraphTraversalSource} */ GraphTraversalSource.prototype.withRemote = function (remoteConnection) { var traversalStrategy = new t.TraversalStrategies(this._traversalStrategies); traversalStrategy.addStrategy(new remote.RemoteStrategy(remoteConnection)); - return new GraphTraversal(this._graph, traversalStrategy, new Bytecode(this._bytecode)); + return new GraphTraversalSource(this._graph, traversalStrategy, new Bytecode(this._bytecode)); }; /** http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/10c71551/gremlin-javascript/src/main/javascript/gremlin-javascript/process/traversal.js ---------------------------------------------------------------------- diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/process/traversal.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/process/traversal.js index 5c9bf6c..ff2927e 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/process/traversal.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/process/traversal.js @@ -185,11 +185,14 @@ this.strategies.push(strategy); }; - /** @param {Traversal} traversal */ - TraversalStrategies.prototype.applyStrategies = function (traversal) { - this.strategies.forEach(function eachStrategy(s) { - s.apply(traversal); - }); + /** + * @param {Traversal} traversal + * @param {Function} callback + */ + TraversalStrategies.prototype.applyStrategies = function (traversal, callback) { + eachSeries(this.strategies, function eachStrategy(s, next) { + s.apply(traversal, next); + }, callback); }; /** @@ -203,8 +206,9 @@ /** * @abstract * @param {Traversal} traversal + * @param {Function} callback */ - TraversalStrategy.prototype.apply = function (traversal) { + TraversalStrategy.prototype.apply = function (traversal, callback) { }; @@ -298,20 +302,6 @@ this.elementName = elementName; } - /** - * @type {{barrier, cardinality, column, direction, operator, order, pop, scope, t}} - */ - var enums = {}; - enums.barrier = toEnum('Barrier', 'normSack'); - enums.cardinality = toEnum('Cardinality', 'list set single'); - enums.column = toEnum('Column', 'keys values'); - enums.direction = toEnum('Direction', 'BOTH IN OUT'); - enums.operator = toEnum('Operator', 'addAll and assign div max min minus mult or sum sumLong'); - enums.order = toEnum('Order', 'decr incr keyDecr keyIncr shuffle valueDecr valueIncr'); - enums.pop = toEnum('Pop', 'all first last'); - enums.scope = toEnum('Scope', 'global local'); - enums.t = toEnum('T', 'id key label value'); - // Utility functions /** @returns {Array} */ function parseArgs() { @@ -380,11 +370,17 @@ TraversalSideEffects: TraversalSideEffects, TraversalStrategies: TraversalStrategies, TraversalStrategy: TraversalStrategy, - Traverser: Traverser + Traverser: Traverser, + barrier: toEnum('Barrier', 'normSack'), + cardinality: toEnum('Cardinality', 'list set single'), + column: toEnum('Column', 'keys values'), + direction: toEnum('Direction', 'BOTH IN OUT'), + operator: toEnum('Operator', 'addAll and assign div max min minus mult or sum sumLong'), + order: toEnum('Order', 'decr incr keyDecr keyIncr shuffle valueDecr valueIncr'), + pop: toEnum('Pop', 'all first last'), + scope: toEnum('Scope', 'global local'), + t: toEnum('T', 'id key label value') }; - Object.keys(enums).forEach(function (k) { - toExport[k] = enums[k]; - }); if (typeof module !== 'undefined') { // CommonJS module.exports = toExport; http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/10c71551/gremlin-javascript/src/test/javascript/gremlin-javascript/test-exports.js ---------------------------------------------------------------------- diff --git a/gremlin-javascript/src/test/javascript/gremlin-javascript/test-exports.js b/gremlin-javascript/src/test/javascript/gremlin-javascript/test-exports.js index 6edb323..b9265c7 100644 --- a/gremlin-javascript/src/test/javascript/gremlin-javascript/test-exports.js +++ b/gremlin-javascript/src/test/javascript/gremlin-javascript/test-exports.js @@ -34,9 +34,7 @@ assert.ok(glvModule.process); assert.strictEqual(typeof glvModule.process.Bytecode, 'function'); assert.strictEqual(typeof glvModule.process.EnumValue, 'function'); - assert.strictEqual(typeof glvModule.process.inherits, 'function'); assert.strictEqual(typeof glvModule.process.P, 'function'); - assert.strictEqual(typeof glvModule.process.parseArgs, 'function'); assert.strictEqual(typeof glvModule.process.Traversal, 'function'); assert.strictEqual(typeof glvModule.process.TraversalSideEffects, 'function'); assert.strictEqual(typeof glvModule.process.TraversalStrategies, 'function'); @@ -44,6 +42,17 @@ assert.strictEqual(typeof glvModule.process.Traverser, 'function'); assert.strictEqual(typeof glvModule.process.GraphTraversal, 'function'); assert.strictEqual(typeof glvModule.process.GraphTraversalSource, 'function'); + assert.strictEqual(typeof glvModule.process.barrier, 'object'); + assert.strictEqual(typeof glvModule.process.cardinality, 'object'); + assert.strictEqual(typeof glvModule.process.column, 'object'); + assert.strictEqual(typeof glvModule.process.direction, 'object'); + assert.strictEqual(typeof glvModule.process.operator, 'object'); + assert.strictEqual(typeof glvModule.process.order, 'object'); + assert.strictEqual(typeof glvModule.process.pop, 'object'); + assert.strictEqual(typeof glvModule.process.scope, 'object'); + assert.strictEqual(typeof glvModule.process.t, 'object'); + + assert.ok(glvModule.process.statics); assert.ok(glvModule.structure); @@ -75,4 +84,4 @@ } throw new Error('No module loader was found'); } -}).call(this) \ No newline at end of file +}).call(this); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/10c71551/gremlin-javascript/src/test/javascript/gremlin-javascript/test-graphson.js ---------------------------------------------------------------------- diff --git a/gremlin-javascript/src/test/javascript/gremlin-javascript/test-graphson.js b/gremlin-javascript/src/test/javascript/gremlin-javascript/test-graphson.js index e44ef90..418a9dd 100644 --- a/gremlin-javascript/src/test/javascript/gremlin-javascript/test-graphson.js +++ b/gremlin-javascript/src/test/javascript/gremlin-javascript/test-graphson.js @@ -87,7 +87,7 @@ assert.strictEqual(writer.write(true), 'true'); assert.strictEqual(writer.write(false), 'false'); }, - function testWriteNumber() { + function testWriteP() { var writer = new GraphSONWriter(); var expected = JSON.stringify({"@type":"g:P","@value":{"predicate":"and","value":[{"@type":"g:P","@value":{"predicate":"or","value":[{"@type":"g:P","@value":{"predicate":"lt","value":"b"}},{"@type":"g:P","@value":{"predicate":"gt","value":"c"}}]}},{"@type":"g:P","@value":{"predicate":"neq","value":"d"}}]}}); assert.strictEqual(writer.write(P.lt("b").or(P.gt("c")).and(P.neq("d"))), expected); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/10c71551/gremlin-javascript/src/test/javascript/gremlin-javascript/test-traversal.js ---------------------------------------------------------------------- diff --git a/gremlin-javascript/src/test/javascript/gremlin-javascript/test-traversal.js b/gremlin-javascript/src/test/javascript/gremlin-javascript/test-traversal.js index 477df91..1ec4253 100644 --- a/gremlin-javascript/src/test/javascript/gremlin-javascript/test-traversal.js +++ b/gremlin-javascript/src/test/javascript/gremlin-javascript/test-traversal.js @@ -26,9 +26,10 @@ var helper = loadModule.call(this, './helper.js'); var assert = helper.assert; var graph = helper.loadLibModule.call(this, 'structure/graph.js'); + var t = helper.loadLibModule.call(this, 'process/traversal.js'); [ - function testBytecode() { + function testBytecode1() { var g = new graph.Graph().traversal(); var bytecode = g.V().out('created').getBytecode(); assert.ok(bytecode); @@ -37,6 +38,20 @@ assert.strictEqual(bytecode.stepInstructions[0][0], 'V'); assert.strictEqual(bytecode.stepInstructions[1][0], 'out'); assert.strictEqual(bytecode.stepInstructions[1][1], 'created'); + }, + function testBytecode2() { + var g = new graph.Graph().traversal(); + var bytecode = g.V().order().by('age', t.order.decr).getBytecode(); + assert.ok(bytecode); + assert.strictEqual(bytecode.sourceInstructions.length, 0); + assert.strictEqual(bytecode.stepInstructions.length, 3); + assert.strictEqual(bytecode.stepInstructions[0][0], 'V'); + assert.strictEqual(bytecode.stepInstructions[1][0], 'order'); + assert.strictEqual(bytecode.stepInstructions[2][0], 'by'); + assert.strictEqual(bytecode.stepInstructions[2][1], 'age'); + assert.strictEqual(typeof bytecode.stepInstructions[2][2], 'object'); + assert.strictEqual(bytecode.stepInstructions[2][2].typeName, 'Order'); + assert.strictEqual(bytecode.stepInstructions[2][2].elementName, 'decr'); } ].forEach(function (testCase) { testCase.call(null);