-
Notifications
You must be signed in to change notification settings - Fork 0
/
Condition.cs
51 lines (43 loc) · 1.26 KB
/
Condition.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
namespace HTTPConsole;
using System;
using System.Collections.Generic;
public class Condition
{
readonly Predicate<string> _condition;
public string Expected { get; private set; }
public string Command { get; private set; }
public Condition(string s)
{
string[] split = s.Split();
Command = split[0];
Expected = split[1];
bool not = split[2][0] == '!';
string method = not
? split[2][1..].ToLower()
: split[2].ToLower();
string query = string.Empty;
for (int i = 3; i < split.Length; i++) query += $"{split[i]} ";
query = query[..^1];
switch (method)
{
case "contains":
case "contain":
{
_condition = not
? (s => !s.Contains(query))
: (s => s.Contains(query));
break;
}
case "is":
case "equals":
{
_condition = not
? (s => s != query)
: (s => s == query);
break;
}
}
}
public bool Eval(string x) => _condition(x);
public bool Eval(Dictionary<string, string> dict) => Eval(dict[Expected]);
}