Skip to content

Commit c9213a0

Browse files
authored
feat: create non generic rules engine (#169)
* refactor!: create non-generic rules engine * chore: change var style rules for C# * feat!: add APIs to create content types * chore: resolve codacy code analysis issues * chore: resolve codacy code analysis issues #2
1 parent b0de99a commit c9213a0

File tree

310 files changed

+5481
-3976
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

310 files changed

+5481
-3976
lines changed

.editorconfig

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ dotnet_code_quality_unused_parameters = all:suggestion
6666
#### C# Coding Conventions ####
6767

6868
# var preferences
69-
csharp_style_var_elsewhere = false:silent
70-
csharp_style_var_for_built_in_types = false:silent
71-
csharp_style_var_when_type_is_apparent = false:silent
69+
csharp_style_var_elsewhere = true:silent
70+
csharp_style_var_for_built_in_types = true:silent
71+
csharp_style_var_when_type_is_apparent = true:silent
7272

7373
# Expression-bodied members
7474
csharp_style_expression_bodied_accessors = true:silent
@@ -231,6 +231,7 @@ dotnet_style_namespace_match_folder = true:suggestion
231231
csharp_style_prefer_switch_expression = true:suggestion
232232
csharp_style_prefer_pattern_matching = true:silent
233233
csharp_style_prefer_not_pattern = true:suggestion
234+
csharp_style_prefer_primary_constructors = true:suggestion
234235

235236
[*.vb]
236237
visual_basic_preferred_modifier_order = Partial,Default,Private,Protected,Public,Friend,NotOverridable,Overridable,MustOverride,Overloads,Overrides,MustInherit,NotInheritable,Static,Shared,Shadows,ReadOnly,WriteOnly,Dim,Const,WithEvents,Widening,Narrowing,Custom,Async:suggestion:suggestion
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
namespace Rules.Framework.InMemory.Sample.Engine
22
{
33
using System.Collections.Generic;
4+
using global::Rules.Framework.InMemory.Sample.Enums;
45

56
internal interface IContentTypes
67
{
8+
ContentTypes ContentType { get; }
9+
710
IEnumerable<RuleSpecification> GetRulesSpecifications();
811
}
912
}

samples/Rules.Framework.InMemory.Sample/Engine/RuleSpecification.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace Rules.Framework.InMemory.Sample.Engine
22
{
33
using global::Rules.Framework;
4-
using global::Rules.Framework.Builder;
4+
using global::Rules.Framework.Builder.Generic;
55
using global::Rules.Framework.InMemory.Sample.Enums;
66

77
internal class RuleSpecification

samples/Rules.Framework.InMemory.Sample/Engine/RulesBuilder.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ namespace Rules.Framework.InMemory.Sample.Engine
22
{
33
using System.Collections.Generic;
44
using System.Threading.Tasks;
5-
using global::Rules.Framework.InMemory.Sample.Enums;
65
using global::Rules.Framework.InMemory.Sample.Exceptions;
76

87
internal class RulesBuilder
@@ -11,10 +10,12 @@ internal class RulesBuilder
1110

1211
public RulesBuilder(IEnumerable<IContentTypes> contentTypes) => this.contentTypes = contentTypes;
1312

14-
public async Task BuildAsync(RulesEngine<ContentTypes, ConditionTypes> rulesEngine)
13+
public async Task BuildAsync(IRulesEngine rulesEngine)
1514
{
1615
foreach (var contentType in contentTypes)
1716
{
17+
await rulesEngine.CreateContentTypeAsync(contentType.ContentType.ToString());
18+
1819
var rulesSpecifications = contentType.GetRulesSpecifications();
1920

2021
foreach (var ruleSpecification in rulesSpecifications)
@@ -28,7 +29,7 @@ public async Task BuildAsync(RulesEngine<ContentTypes, ConditionTypes> rulesEngi
2829
.AddRuleAsync(
2930
ruleSpecification.RuleBuilderResult.Rule,
3031
ruleSpecification.RuleAddPriorityOption
31-
).ConfigureAwait(false);
32+
);
3233

3334
if (!ruleOperationResult.IsSuccess)
3435
{

samples/Rules.Framework.InMemory.Sample/Engine/RulesEngineProvider.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,17 @@ namespace Rules.Framework.InMemory.Sample.Engine
33
using System;
44
using System.Threading;
55
using System.Threading.Tasks;
6-
using global::Rules.Framework.InMemory.Sample.Enums;
7-
using global::Rules.Framework.Providers.InMemory;
86

97
internal class RulesEngineProvider
108
{
11-
private readonly Lazy<Task<RulesEngine<ContentTypes, ConditionTypes>>> lazyRulesEngine;
9+
private readonly Lazy<Task<IRulesEngine>> lazyRulesEngine;
1210

1311
public RulesEngineProvider(RulesBuilder rulesBuilder)
1412
{
15-
lazyRulesEngine = new Lazy<Task<RulesEngine<ContentTypes, ConditionTypes>>>(async () =>
13+
lazyRulesEngine = new Lazy<Task<IRulesEngine>>(async () =>
1614
{
1715
var rulesEngine = RulesEngineBuilder
1816
.CreateRulesEngine()
19-
.WithContentType<ContentTypes>()
20-
.WithConditionType<ConditionTypes>()
2117
.SetInMemoryDataSource()
2218
.Configure(opt => opt.PriorityCriteria = PriorityCriterias.BottommostRuleWins)
2319
.Build();
@@ -28,7 +24,7 @@ public RulesEngineProvider(RulesBuilder rulesBuilder)
2824
}, LazyThreadSafetyMode.ExecutionAndPublication);
2925
}
3026

31-
public Task<RulesEngine<ContentTypes, ConditionTypes>> GetRulesEngineAsync()
27+
public Task<IRulesEngine> GetRulesEngineAsync()
3228
=> lazyRulesEngine.Value;
3329
}
3430
}

samples/Rules.Framework.InMemory.Sample/Engine/RulesService.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public async Task<T> MatchOneAsync<T>(
3131
.ConfigureAwait(false);
3232

3333
var match = await rulesEngine
34+
.MakeGeneric<ContentTypes, ConditionTypes>()
3435
.MatchOneAsync(contentType, dateTime, rulesConditions)
3536
.ConfigureAwait(false);
3637

samples/Rules.Framework.InMemory.Sample/Rules/TestNumberRules.cs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ namespace Rules.Framework.InMemory.Sample.Rules
22
{
33
using System;
44
using System.Collections.Generic;
5-
using global::Rules.Framework.Builder;
6-
using global::Rules.Framework.Core;
5+
using global::Rules.Framework.Builder.Generic;
76
using global::Rules.Framework.InMemory.Sample.Engine;
87
using global::Rules.Framework.InMemory.Sample.Enums;
98

@@ -16,6 +15,8 @@ public TestNumberRules()
1615
this.rulesSpecifications = new List<RuleSpecification>();
1716
}
1817

18+
public ContentTypes ContentType => ContentTypes.TestNumber;
19+
1920
public IEnumerable<RuleSpecification> GetRulesSpecifications()
2021
{
2122
Add(CreateRuleForCoolNumbers(), RuleAddPriorityOption.ByPriorityNumber(3));
@@ -34,17 +35,13 @@ private void Add(
3435
RuleAddPriorityOption = ruleAddPriorityOption,
3536
});
3637

37-
private RuleBuilderResult<ContentTypes, ConditionTypes> CreateDefaultRule() =>
38-
RuleBuilder
39-
.NewRule<ContentTypes, ConditionTypes>()
38+
private RuleBuilderResult<ContentTypes, ConditionTypes> CreateDefaultRule() => Rule.New<ContentTypes, ConditionTypes>()
4039
.WithName("Default rule for test number")
4140
.WithContent(ContentTypes.TestNumber, ":| default nothing special about this number")
4241
.WithDateBegin(new DateTime(2019, 01, 01))
4342
.Build();
4443

45-
private RuleBuilderResult<ContentTypes, ConditionTypes> CreateRuleForCoolNumbers() =>
46-
RuleBuilder
47-
.NewRule<ContentTypes, ConditionTypes>()
44+
private RuleBuilderResult<ContentTypes, ConditionTypes> CreateRuleForCoolNumbers() => Rule.New<ContentTypes, ConditionTypes>()
4845
.WithName("Rule for cool numbers")
4946
.WithContent(ContentTypes.TestNumber, ":D this number is so COOL!")
5047
.WithDateBegin(new DateTime(2019, 01, 01))
@@ -56,9 +53,7 @@ private RuleBuilderResult<ContentTypes, ConditionTypes> CreateRuleForCoolNumbers
5653
.Value(ConditionTypes.SumAll, Operators.StartsWith, "5"))))
5754
.Build();
5855

59-
private RuleBuilderResult<ContentTypes, ConditionTypes> CreateRuleForSosoNumbers() =>
60-
RuleBuilder
61-
.NewRule<ContentTypes, ConditionTypes>()
56+
private RuleBuilderResult<ContentTypes, ConditionTypes> CreateRuleForSosoNumbers() => Rule.New<ContentTypes, ConditionTypes>()
6257
.WithName("Rule for so so numbers")
6358
.WithContent(ContentTypes.TestNumber, ":) this number is so so")
6459
.WithDateBegin(new DateTime(2019, 01, 01))
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
namespace Rules.Framework.WebUI.Sample.Engine
22
{
33
using System.Collections.Generic;
4+
using global::Rules.Framework.WebUI.Sample.Enums;
45

56
internal interface IContentTypes
67
{
8+
ContentTypes[] ContentTypes { get; }
9+
710
IEnumerable<RuleSpecification> GetRulesSpecifications();
811
}
912
}

samples/Rules.Framework.WebUI.Sample/Engine/RuleSpecification.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace Rules.Framework.WebUI.Sample.Engine
22
{
33
using global::Rules.Framework;
4-
using global::Rules.Framework.Builder;
4+
using global::Rules.Framework.Builder.Generic;
55
using global::Rules.Framework.WebUI.Sample.Enums;
66

77
internal sealed class RuleSpecification : RuleSpecificationBase<ContentTypes, ConditionTypes>

samples/Rules.Framework.WebUI.Sample/Engine/RuleSpecificationBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
namespace Rules.Framework.WebUI.Sample.Engine
22
{
33
using global::Rules.Framework;
4-
using global::Rules.Framework.Builder;
4+
using global::Rules.Framework.Builder.Generic;
55

66
internal class RuleSpecificationBase<TContentType, TConditionType>
77
{

0 commit comments

Comments
 (0)