Skip to content

Commit 796c020

Browse files
committed
Add processor implementations
1 parent 1e2ab75 commit 796c020

18 files changed

+674
-7
lines changed

src/Nest/Ingest/Processor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public interface IProcessor
1515
public abstract class ProcessorBase : IProcessor
1616
{
1717
string IProcessor.Name => this.Name;
18-
protected virtual string Name { get; }
18+
protected abstract string Name { get; }
1919

2020
public IEnumerable<IProcessor> OnFailure { get; set; }
2121
}
@@ -26,7 +26,7 @@ public abstract class ProcessorDescriptorBase<TProcessorDescriptor, TProcessorIn
2626
{
2727
IEnumerable<IProcessor> IProcessor.OnFailure { get; set; }
2828
string IProcessor.Name => this.Name;
29-
protected virtual string Name { get; }
29+
protected abstract string Name { get; }
3030

3131
/// <inheritdoc/>
3232
public TProcessorDescriptor OnFailure(IEnumerable<IProcessor> processors) => Assign(a => a.OnFailure = processors.ToListOrNullIfEmpty());

src/Nest/Ingest/Processors/AppendProcessor.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77

88
namespace Nest
99
{
10+
[JsonObject(MemberSerialization.OptIn)]
1011
public interface IAppendProcessor : IProcessor
1112
{
1213
[JsonProperty("field")]
1314
Field Field { get; set; }
15+
1416
[JsonProperty("values")]
1517
IEnumerable<object> Values { get; set; }
1618
}
@@ -34,12 +36,12 @@ public class AppendProcessorDescriptor<T> : ProcessorDescriptorBase<AppendProces
3436
public AppendProcessorDescriptor<T> Field(Expression<Func<T, object>> objectPath) =>
3537
Assign(a => a.Field = objectPath);
3638

37-
public AppendProcessorDescriptor<T> Terms<TValue>(IEnumerable<TValue> terms) => Assign(a => a.Values = terms?.Cast<object>());
39+
public AppendProcessorDescriptor<T> Values<TValue>(IEnumerable<TValue> values) => Assign(a => a.Values = values?.Cast<object>());
3840

39-
public AppendProcessorDescriptor<T> Terms<TValue>(params TValue[] terms) => Assign(a => {
40-
if(terms?.Length == 1 && typeof(IEnumerable).IsAssignableFrom(typeof(TValue)) && typeof(TValue) != typeof(string))
41-
a.Values = (terms.First() as IEnumerable)?.Cast<object>();
42-
else a.Values = terms?.Cast<object>();
41+
public AppendProcessorDescriptor<T> Values<TValue>(params TValue[] values) => Assign(a => {
42+
if(values?.Length == 1 && typeof(IEnumerable).IsAssignableFrom(typeof(TValue)) && typeof(TValue) != typeof(string))
43+
a.Values = (values.First() as IEnumerable)?.Cast<object>();
44+
else a.Values = values?.Cast<object>();
4345
});
4446
}
4547

src/Nest/Ingest/Processors/ConvertProcessor.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,15 @@
99

1010
namespace Nest
1111
{
12+
[JsonObject(MemberSerialization.OptIn)]
1213
public interface IConvertProcessor : IProcessor
1314
{
1415
[JsonProperty("field")]
1516
Field Field { get; set; }
17+
1618
[JsonProperty("target_field")]
1719
Field TargetField { get; set; }
20+
1821
[JsonProperty("type")]
1922
ConvertProcessorType? Type { get; set; }
2023
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Linq.Expressions;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace Nest
10+
{
11+
[JsonObject(MemberSerialization.OptIn)]
12+
public interface IDateProcessor : IProcessor
13+
{
14+
[JsonProperty("field")]
15+
Field Field { get; set; }
16+
17+
[JsonProperty("target_field")]
18+
Field TargetField { get; set; }
19+
20+
[JsonProperty("match_formats")]
21+
string MatchFormats { get; set; }
22+
23+
[JsonProperty("timezone")]
24+
string Timezone { get; set; }
25+
26+
[JsonProperty("locale")]
27+
string Locale { get; set; }
28+
}
29+
30+
public class DateProcessor : ProcessorBase, IDateProcessor
31+
{
32+
protected override string Name => "date";
33+
34+
public Field Field { get; set; }
35+
36+
public string Locale { get; set; }
37+
38+
public string MatchFormats { get; set; }
39+
40+
public Field TargetField { get; set; }
41+
42+
public string Timezone { get; set; }
43+
}
44+
45+
public class DateProcessorDescriptor<T>
46+
: ProcessorDescriptorBase<DateProcessorDescriptor<T>, IDateProcessor>, IDateProcessor
47+
where T : class
48+
{
49+
protected override string Name => "date";
50+
51+
Field IDateProcessor.Field { get; set; }
52+
53+
string IDateProcessor.Locale { get; set; }
54+
55+
string IDateProcessor.MatchFormats { get; set; }
56+
57+
Field IDateProcessor.TargetField { get; set; }
58+
59+
string IDateProcessor.Timezone { get; set; }
60+
61+
public DateProcessorDescriptor<T> Field(Field field) => Assign(a => a.Field = field);
62+
63+
public DateProcessorDescriptor<T> Field(Expression<Func<T, object>> objectPath) =>
64+
Assign(a => a.Field = objectPath);
65+
66+
public DateProcessorDescriptor<T> TargetField(Field field) => Assign(a => a.TargetField = field);
67+
68+
public DateProcessorDescriptor<T> TargetField(Expression<Func<T, object>> objectPath) =>
69+
Assign(a => a.TargetField = objectPath);
70+
71+
public DateProcessorDescriptor<T> MatchFormats(string matchFormats) => Assign(a => a.MatchFormats = matchFormats);
72+
73+
public DateProcessorDescriptor<T> Timezone(string timezone) => Assign(a => a.Timezone = timezone);
74+
75+
public DateProcessorDescriptor<T> Locale(string locale) => Assign(a => a.Locale = locale);
76+
}
77+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Linq.Expressions;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace Nest
10+
{
11+
[JsonObject(MemberSerialization.OptIn)]
12+
public interface IFailProcessor : IProcessor
13+
{
14+
[JsonProperty("message")]
15+
string Message { get; set; }
16+
}
17+
18+
public class FailProcessor : ProcessorBase, IFailProcessor
19+
{
20+
protected override string Name => "fail";
21+
public string Message { get; set; }
22+
}
23+
24+
public class FailProcessorDescriptor<T>
25+
: ProcessorDescriptorBase<FailProcessorDescriptor<T>, IFailProcessor>, IFailProcessor
26+
where T : class
27+
{
28+
protected override string Name => "fail";
29+
30+
string IFailProcessor.Message { get; set; }
31+
32+
public FailProcessorDescriptor<T> Message(string message) => Assign(a => a.Message = message);
33+
}
34+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Linq.Expressions;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace Nest
10+
{
11+
[JsonObject(MemberSerialization.OptIn)]
12+
public interface IForeachProcessor : IProcessor
13+
{
14+
[JsonProperty("field")]
15+
Field Field { get; set; }
16+
17+
[JsonProperty("processors")]
18+
IEnumerable<IProcessor> Processors { get; set; }
19+
}
20+
21+
public class ForeachProcessor : ProcessorBase, IForeachProcessor
22+
{
23+
protected override string Name => "foreach";
24+
public Field Field { get; set; }
25+
public IEnumerable<IProcessor> Processors { get; set; }
26+
}
27+
28+
public class ForeachProcessorDescriptor<T>
29+
: ProcessorDescriptorBase<ForeachProcessorDescriptor<T>, IForeachProcessor>, IForeachProcessor
30+
where T : class
31+
{
32+
protected override string Name => "foreach";
33+
34+
Field IForeachProcessor.Field { get; set; }
35+
36+
IEnumerable<IProcessor> IForeachProcessor.Processors { get; set; }
37+
38+
public ForeachProcessorDescriptor<T> Field(Field field) => Assign(a => a.Field = field);
39+
40+
public ForeachProcessorDescriptor<T> Field(Expression<Func<T, object>> objectPath) =>
41+
Assign(a => a.Field = objectPath);
42+
43+
public ForeachProcessorDescriptor<T> Processors(Func<ProcessorsDescriptor, IPromise<IList<IProcessor>>> selector) =>
44+
Assign(a => a.Processors = selector?.Invoke(new ProcessorsDescriptor())?.Value);
45+
}
46+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Linq.Expressions;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace Nest
10+
{
11+
[JsonObject(MemberSerialization.OptIn)]
12+
public interface IGrokProcessor : IProcessor
13+
{
14+
[JsonProperty("field")]
15+
Field Field { get; set; }
16+
17+
[JsonProperty("pattern")]
18+
string Pattern { get; set; }
19+
20+
[JsonProperty("pattern_definitions")]
21+
IDictionary<string, string> PatternDefinitions { get; set; }
22+
}
23+
24+
public class GrokProcessor : ProcessorBase, IGrokProcessor
25+
{
26+
protected override string Name => "grok";
27+
28+
public Field Field { get; set; }
29+
30+
public string Pattern { get; set; }
31+
32+
public IDictionary<string, string> PatternDefinitions { get; set; }
33+
}
34+
35+
public class GrokProcessorDescriptor<T>
36+
: ProcessorDescriptorBase<GrokProcessorDescriptor<T>, IGrokProcessor>, IGrokProcessor
37+
where T : class
38+
{
39+
protected override string Name => "grok";
40+
41+
Field IGrokProcessor.Field { get; set; }
42+
string IGrokProcessor.Pattern { get; set; }
43+
IDictionary<string, string> IGrokProcessor.PatternDefinitions { get; set; }
44+
45+
public GrokProcessorDescriptor<T> Field(Field field) => Assign(a => a.Field = field);
46+
47+
public GrokProcessorDescriptor<T> Field(Expression<Func<T, object>> objectPath) =>
48+
Assign(a => a.Field = objectPath);
49+
50+
public GrokProcessorDescriptor<T> Pattern(string pattern) => Assign(a => a.Pattern = pattern);
51+
52+
public GrokProcessorDescriptor<T> PatternDefinitions(Func<FluentDictionary<string, string>, FluentDictionary<string, string>> patternDefinitions) =>
53+
Assign(a => a.PatternDefinitions = patternDefinitions?.Invoke(new FluentDictionary<string, string>()));
54+
}
55+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Linq.Expressions;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace Nest
10+
{
11+
[JsonObject(MemberSerialization.OptIn)]
12+
public interface IGsubProcessor : IProcessor
13+
{
14+
[JsonProperty("field")]
15+
Field Field { get; set; }
16+
17+
[JsonProperty("pattern")]
18+
string Pattern { get; set; }
19+
20+
[JsonProperty("replacement")]
21+
string Replacement { get; set; }
22+
}
23+
24+
public class GsubProcessor : ProcessorBase, IGsubProcessor
25+
{
26+
protected override string Name => "gsub";
27+
28+
public Field Field { get; set; }
29+
30+
public string Pattern { get; set; }
31+
32+
public string Replacement { get; set; }
33+
}
34+
35+
public class GsubProcessorDescriptor<T>
36+
: ProcessorDescriptorBase<GsubProcessorDescriptor<T>, IGsubProcessor>, IGsubProcessor
37+
where T : class
38+
{
39+
protected override string Name => "gsub";
40+
41+
Field IGsubProcessor.Field { get; set; }
42+
string IGsubProcessor.Pattern { get; set; }
43+
string IGsubProcessor.Replacement { get; set; }
44+
45+
public GsubProcessorDescriptor<T> Field(Field field) => Assign(a => a.Field = field);
46+
47+
public GsubProcessorDescriptor<T> Field(Expression<Func<T, object>> objectPath) =>
48+
Assign(a => a.Field = objectPath);
49+
50+
public GsubProcessorDescriptor<T> Pattern(string pattern) => Assign(a => a.Pattern = pattern);
51+
52+
public GsubProcessorDescriptor<T> Replacement(string replacement) => Assign(a => a.Replacement = replacement);
53+
}
54+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Linq.Expressions;
6+
using System.Text;
7+
using System.Threading.Tasks;
8+
9+
namespace Nest
10+
{
11+
[JsonObject(MemberSerialization.OptIn)]
12+
public interface IJoinProcessor : IProcessor
13+
{
14+
[JsonProperty("field")]
15+
Field Field { get; set; }
16+
17+
[JsonProperty("separator")]
18+
string Separator { get; set; }
19+
}
20+
21+
public class JoinProcessor : ProcessorBase, IJoinProcessor
22+
{
23+
protected override string Name => "join";
24+
25+
public Field Field { get; set; }
26+
27+
public string Separator { get; set; }
28+
}
29+
30+
public class JoinProcessorDescriptor<T>
31+
: ProcessorDescriptorBase<JoinProcessorDescriptor<T>, IJoinProcessor>, IJoinProcessor
32+
where T : class
33+
{
34+
protected override string Name => "join";
35+
36+
Field IJoinProcessor.Field { get; set; }
37+
string IJoinProcessor.Separator { get; set; }
38+
39+
public JoinProcessorDescriptor<T> Field(Field field) => Assign(a => a.Field = field);
40+
41+
public JoinProcessorDescriptor<T> Field(Expression<Func<T, object>> objectPath) =>
42+
Assign(a => a.Field = objectPath);
43+
44+
public JoinProcessorDescriptor<T> Separator(string separator) => Assign(a => a.Separator = separator);
45+
}
46+
}

0 commit comments

Comments
 (0)