Skip to content

Commit 39fa610

Browse files
committed
fix #998 add support for variables in
1 parent 8271db0 commit 39fa610

File tree

2 files changed

+38
-20
lines changed

2 files changed

+38
-20
lines changed

src/Nest/Resolvers/PropertyNameResolver.cs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
using System.Reflection;
99
using System.Runtime.CompilerServices;
1010
using System.Collections.Concurrent;
11+
using System.Collections.ObjectModel;
12+
using System.ComponentModel;
1113

1214
namespace Nest.Resolvers
1315
{
@@ -130,9 +132,12 @@ protected override Expression VisitMethodCall(MethodCallExpression m, Stack<stri
130132
{
131133
if (m.Method.Name == "Suffix" && m.Arguments.Any())
132134
{
133-
var constantExpression = m.Arguments.Last() as ConstantExpression;
134-
if (constantExpression != null)
135-
stack.Push(constantExpression.Value as string);
135+
VisitConstantOrVariable(m, stack);
136+
var callingMember = new ReadOnlyCollection<Expression>(
137+
new List<Expression> {{m.Arguments.First()}}
138+
);
139+
base.VisitExpressionList(callingMember, stack, properties);
140+
return m;
136141
}
137142
else if (m.Method.Name == "FullyQualified" && m.Arguments.Any())
138143
{
@@ -152,16 +157,11 @@ protected override Expression VisitMethodCall(MethodCallExpression m, Stack<stri
152157
{
153158
return base.VisitMethodCall(m, stack, properties);
154159
}
155-
var lastArg = m.Arguments.Last();
156-
var constantExpression = lastArg as ConstantExpression;
157-
var value = constantExpression != null
158-
? constantExpression.Value.ToString()
159-
: Expression.Lambda(lastArg).Compile().DynamicInvoke().ToString();
160-
stack.Push(value);
160+
VisitConstantOrVariable(m, stack);
161161
Visit(m.Object, stack, properties);
162162
return m;
163163
}
164-
if (IsLinqOperator(m.Method))
164+
else if (IsLinqOperator(m.Method))
165165
{
166166
for (int i = 1; i < m.Arguments.Count; i++)
167167
{
@@ -172,6 +172,16 @@ protected override Expression VisitMethodCall(MethodCallExpression m, Stack<stri
172172
}
173173
return base.VisitMethodCall(m, stack, properties);
174174
}
175+
176+
private static void VisitConstantOrVariable(MethodCallExpression m, Stack<string> stack)
177+
{
178+
var lastArg = m.Arguments.Last();
179+
var constantExpression = lastArg as ConstantExpression;
180+
var value = constantExpression != null
181+
? constantExpression.Value.ToString()
182+
: Expression.Lambda(lastArg).Compile().DynamicInvoke().ToString();
183+
stack.Push(value);
184+
}
175185

176186
private static bool IsLinqOperator(MethodInfo method)
177187
{

src/Tests/Nest.Tests.Unit/Internals/Inferno/PropertyVisitorTests.cs

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -155,18 +155,26 @@ public void CollectionSuffix()
155155
P(p => p.Collection.Suffix("suffix")).Should().Be("collection.suffix");
156156
}
157157

158+
[Test]
159+
public void PropertySuffixVariable()
160+
{
161+
P(p => p.Name.Suffix(_variable)).Should().Be("name.vari");
162+
}
158163

164+
[Test]
165+
public void PropertySuffixLocalVariable()
166+
{
167+
var prop = "propXY12";
168+
P(p => p.Name.Suffix(prop)).Should().Be("name." + prop);
169+
}
159170

171+
//Fully qualified tests
172+
//TODO remove in 2.0 as type.properties are gonna be removed in elasticsearch 2.0
160173

161-
162-
163-
164-
165-
166-
167-
168-
169-
170-
174+
[Test]
175+
public void PropertySuffixVariableFullyQualified()
176+
{
177+
P(p => p.FullyQualified().Name.Suffix(_variable)).Should().Be("domainobject.name.vari");
178+
}
171179
}
172180
}

0 commit comments

Comments
 (0)