TINKERPOP-1854 Make Lambda implementation internal
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/7fbb7790 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/7fbb7790 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/7fbb7790 Branch: refs/heads/TINKERPOP-1897 Commit: 7fbb779010f028c8f3df6935969d29afefe0fb0f Parents: 0cdaa3a Author: Florian Hockmann <[email protected]> Authored: Thu Mar 15 18:26:40 2018 +0100 Committer: Florian Hockmann <[email protected]> Committed: Thu Mar 15 18:26:40 2018 +0100 ---------------------------------------------------------------------- docs/src/reference/gremlin-variants.asciidoc | 4 +- .../src/Gremlin.Net/Process/Traversal/Lambda.cs | 45 +++++++------------- .../Process/Traversal/StringBasedLambda.cs | 42 ++++++++++++++++++ .../Structure/IO/GraphSON/GraphSONWriter.cs | 2 +- .../Structure/IO/GraphSON/LambdaSerializer.cs | 43 ------------------- .../IO/GraphSON/StringBasedLambdaSerializer.cs | 43 +++++++++++++++++++ 6 files changed, 104 insertions(+), 75 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7fbb7790/docs/src/reference/gremlin-variants.asciidoc ---------------------------------------------------------------------- diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc index bf8c8b1..c19160a 100644 --- a/docs/src/reference/gremlin-variants.asciidoc +++ b/docs/src/reference/gremlin-variants.asciidoc @@ -451,8 +451,8 @@ g.V().Out().Map<int>(Lambda.Python("lambda x: len(x.get().value('name'))")).Sum< <1> `Lambda.Groovy()` can be used to create a Groovy lambda. <2> `Lambda.Python()` can be used to create a Python lambda. -The `Lambda` class implements interfaces like `IFunction` and `IPredicate` that mirror their Java counterparts which makes it possible -to use lambdas with Gremlin.Net for the same steps as in Gremlin-Java. +The `ILambda` interface returned by these two methods inherits interfaces like `IFunction` and `IPredicate` that mirror +their Java counterparts which makes it possible to use lambdas with Gremlin.Net for the same steps as in Gremlin-Java. [[gremlin-javascript]] == Gremlin-JavaScript http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7fbb7790/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Lambda.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Lambda.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Lambda.cs index 21849ef..12eb016 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Lambda.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/Lambda.cs @@ -26,47 +26,34 @@ namespace Gremlin.Net.Process.Traversal /// <summary> /// Represents a lambda. /// </summary> - public class Lambda : IFunction, IBiFunction, IPredicate, IUnaryOperator, IBinaryOperator, IComparator, IConsumer, - ISupplier + public interface ILambda : IFunction, IBiFunction, IPredicate, IUnaryOperator, IBinaryOperator, IComparator, + IConsumer, ISupplier { - private const int DefaultArgument = -1; - - private Lambda(string expression, string language) - { - LambdaExpression = expression; - Language = language; - } - - /// <summary> - /// Gets the lambda expression. - /// </summary> - public string LambdaExpression { get; } - - /// <summary> - /// Gets the language of this lambda. - /// </summary> - public string Language { get; } - - internal object Arguments => DefaultArgument; + } + /// <summary> + /// Provides methods to create lambdas. + /// </summary> + public static class Lambda + { /// <summary> - /// Creates a new Groovy <see cref="Lambda"/>. + /// Creates a new Groovy lambda. /// </summary> /// <param name="expression">The lambda expression.</param> - /// <returns>The created <see cref="Lambda"/>.</returns> - public static Lambda Groovy(string expression) + /// <returns>The created lambda.</returns> + public static ILambda Groovy(string expression) { - return new Lambda(expression, "gremlin-groovy"); + return new StringBasedLambda(expression, "gremlin-groovy"); } /// <summary> - /// Creates a new Python <see cref="Lambda"/>. + /// Creates a new Python lambda. /// </summary> /// <param name="expression">The lambda expression.</param> - /// <returns>The created <see cref="Lambda"/>.</returns> - public static Lambda Python(string expression) + /// <returns>The created lambda.</returns> + public static ILambda Python(string expression) { - return new Lambda(expression, "gremlin-python"); + return new StringBasedLambda(expression, "gremlin-python"); } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7fbb7790/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/StringBasedLambda.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/StringBasedLambda.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/StringBasedLambda.cs new file mode 100644 index 0000000..e27b474 --- /dev/null +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/StringBasedLambda.cs @@ -0,0 +1,42 @@ +#region License + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#endregion + +namespace Gremlin.Net.Process.Traversal +{ + internal class StringBasedLambda : ILambda + { + private const int DefaultArgument = -1; + + public StringBasedLambda(string expression, string language) + { + LambdaExpression = expression; + Language = language; + } + + public string LambdaExpression { get; } + + public string Language { get; } + + public object Arguments => DefaultArgument; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7fbb7790/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs index 826d608..0ef2bde 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/GraphSONWriter.cs @@ -60,7 +60,7 @@ namespace Gremlin.Net.Structure.IO.GraphSON {typeof(Property), new PropertySerializer()}, {typeof(VertexProperty), new VertexPropertySerializer()}, {typeof(AbstractTraversalStrategy), new TraversalStrategySerializer()}, - {typeof(Lambda), new LambdaSerializer()} + {typeof(ILambda), new StringBasedLambdaSerializer()} }; /// <summary> http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7fbb7790/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/LambdaSerializer.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/LambdaSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/LambdaSerializer.cs deleted file mode 100644 index fa739fd..0000000 --- a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/LambdaSerializer.cs +++ /dev/null @@ -1,43 +0,0 @@ -#region License - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -#endregion - -using System.Collections.Generic; -using Gremlin.Net.Process.Traversal; - -namespace Gremlin.Net.Structure.IO.GraphSON -{ - internal class LambdaSerializer : IGraphSONSerializer - { - public Dictionary<string, dynamic> Dictify(dynamic objectData, GraphSONWriter writer) - { - Lambda lambda = objectData; - var valueDict = new Dictionary<string, dynamic> - { - {"script", lambda.LambdaExpression}, - {"language", lambda.Language}, - {"arguments", lambda.Arguments} - }; - return GraphSONUtil.ToTypedValue(nameof(Lambda), valueDict); - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7fbb7790/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/StringBasedLambdaSerializer.cs ---------------------------------------------------------------------- diff --git a/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/StringBasedLambdaSerializer.cs b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/StringBasedLambdaSerializer.cs new file mode 100644 index 0000000..2e66367 --- /dev/null +++ b/gremlin-dotnet/src/Gremlin.Net/Structure/IO/GraphSON/StringBasedLambdaSerializer.cs @@ -0,0 +1,43 @@ +#region License + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#endregion + +using System.Collections.Generic; +using Gremlin.Net.Process.Traversal; + +namespace Gremlin.Net.Structure.IO.GraphSON +{ + internal class StringBasedLambdaSerializer : IGraphSONSerializer + { + public Dictionary<string, dynamic> Dictify(dynamic objectData, GraphSONWriter writer) + { + StringBasedLambda lambda = objectData; + var valueDict = new Dictionary<string, dynamic> + { + {"script", lambda.LambdaExpression}, + {"language", lambda.Language}, + {"arguments", lambda.Arguments} + }; + return GraphSONUtil.ToTypedValue(nameof(Lambda), valueDict); + } + } +} \ No newline at end of file
