diff --git a/pom.xml b/pom.xml index 64eafc2..cecb7ed 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.ironoc.rules.engine simple-rules-engine - 2.4-SNAPSHOT + 2.5-SNAPSHOT UTF-8 diff --git a/src/main/java/net/ironoc/rules/engine/ApiApplication.java b/src/main/java/net/ironoc/rules/engine/ApiApplication.java index 6001de2..ee670be 100644 --- a/src/main/java/net/ironoc/rules/engine/ApiApplication.java +++ b/src/main/java/net/ironoc/rules/engine/ApiApplication.java @@ -25,6 +25,6 @@ static void main(String... args) { @EventListener public void processPostDeploy(PostDeployEvent event) { - runtimeService.startProcessInstanceByKey("loanApproval"); + runtimeService.startProcessInstanceByKey("Rules_matcher"); } } diff --git a/src/main/java/net/ironoc/rules/engine/delegate/FeatureDelegate.java b/src/main/java/net/ironoc/rules/engine/delegate/CountryDelegate.java similarity index 89% rename from src/main/java/net/ironoc/rules/engine/delegate/FeatureDelegate.java rename to src/main/java/net/ironoc/rules/engine/delegate/CountryDelegate.java index 27f4838..37f8e45 100644 --- a/src/main/java/net/ironoc/rules/engine/delegate/FeatureDelegate.java +++ b/src/main/java/net/ironoc/rules/engine/delegate/CountryDelegate.java @@ -9,9 +9,9 @@ import java.util.Objects; @Component -public class FeatureDelegate implements JavaDelegate { +public class CountryDelegate implements JavaDelegate { - private static final Logger LOGGER = LoggerFactory.getLogger(FeatureDelegate.class); + private static final Logger LOGGER = LoggerFactory.getLogger(CountryDelegate.class); public static final String VAR_COUNTRY = "country"; @@ -21,4 +21,4 @@ public void execute(DelegateExecution execution) { String country = Objects.toString(execution.getVariable(VAR_COUNTRY), "").trim(); LOGGER.info("Country captured='{}' (matching is performed in RulesAggregatorDelegate via RulesService).", country); } -} \ No newline at end of file +} diff --git a/src/main/java/net/ironoc/rules/engine/delegate/RulesAggregatorDelegate.java b/src/main/java/net/ironoc/rules/engine/delegate/RulesAggregatorDelegate.java index 7326fd5..bbc07a6 100644 --- a/src/main/java/net/ironoc/rules/engine/delegate/RulesAggregatorDelegate.java +++ b/src/main/java/net/ironoc/rules/engine/delegate/RulesAggregatorDelegate.java @@ -49,7 +49,7 @@ public void execute(DelegateExecution execution) { if (skip || !featureEnabled) { matchedRules = new ArrayList<>(); } else { - String country = Objects.toString(execution.getVariable(FeatureDelegate.VAR_COUNTRY), "").trim(); + String country = Objects.toString(execution.getVariable(CountryDelegate.VAR_COUNTRY), "").trim(); String appVersion = Objects.toString(execution.getVariable(AppVersionDelegate.VAR_APP_VERSION), "").trim(); String tier = Objects.toString(execution.getVariable(TierDelegate.VAR_TIER), "").trim(); @@ -73,4 +73,4 @@ public void execute(DelegateExecution execution) { throw new IllegalStateException("Failed to serialize matched rules to JSON", e); } } -} \ No newline at end of file +} diff --git a/src/main/java/net/ironoc/rules/engine/enums/FeatureType.java b/src/main/java/net/ironoc/rules/engine/enums/FeatureFlag.java similarity index 73% rename from src/main/java/net/ironoc/rules/engine/enums/FeatureType.java rename to src/main/java/net/ironoc/rules/engine/enums/FeatureFlag.java index 21a5639..079327d 100644 --- a/src/main/java/net/ironoc/rules/engine/enums/FeatureType.java +++ b/src/main/java/net/ironoc/rules/engine/enums/FeatureFlag.java @@ -1,6 +1,6 @@ package net.ironoc.rules.engine.enums; -public enum FeatureType { +public enum FeatureFlag { TIER, APPVERSION, COUNTRY } diff --git a/src/main/java/net/ironoc/rules/engine/service/RulesService.java b/src/main/java/net/ironoc/rules/engine/service/RulesService.java index 201b2cd..d42f8e6 100644 --- a/src/main/java/net/ironoc/rules/engine/service/RulesService.java +++ b/src/main/java/net/ironoc/rules/engine/service/RulesService.java @@ -6,7 +6,7 @@ import net.ironoc.rules.engine.domain.ApiResponse; import net.ironoc.rules.engine.dto.Feature; import net.ironoc.rules.engine.dto.Rule; -import net.ironoc.rules.engine.enums.FeatureType; +import net.ironoc.rules.engine.enums.FeatureFlag; import net.ironoc.rules.engine.enums.RuleGroup; import net.ironoc.rules.engine.enums.RuleOperator; import org.camunda.bpm.engine.delegate.DelegateExecution; @@ -93,16 +93,16 @@ protected List rulesMatcher(String country, String appVersion, String tier Rule rule = this.objectMapper.convertValue(ruleMap, Rule.class); RuleOperator ruleOperator = RuleOperator.fromStr(rule.op()); // validate features (check for matching rules) - validateStringMatch(country, rule, ruleOperator, ruleMatch, FeatureType.COUNTRY); + validateStringMatch(country, rule, ruleOperator, ruleMatch, FeatureFlag.COUNTRY); validateAppVersionMatch(appVersion, rule, ruleOperator, ruleMatch); - validateStringMatch(tier, rule, ruleOperator, ruleMatch, FeatureType.TIER); + validateStringMatch(tier, rule, ruleOperator, ruleMatch, FeatureFlag.TIER); } } return ruleMatch; } private void validateStringMatch(String inputStr, Rule rule, RuleOperator ruleOperator, List ruleMatch, - FeatureType featureType) { + FeatureFlag featureType) { if (rule.attr().equalsIgnoreCase(featureType.name())) { switch (ruleOperator) { case RuleOperator.IN: @@ -119,7 +119,7 @@ private void validateStringMatch(String inputStr, Rule rule, RuleOperator ruleOp } private void validateAppVersionMatch(String appVersion, Rule rule, RuleOperator ruleOperator, List ruleMatch) { - if (rule.attr().equalsIgnoreCase(FeatureType.APPVERSION.name())) { + if (rule.attr().equalsIgnoreCase(FeatureFlag.APPVERSION.name())) { switch (ruleOperator) { case RuleOperator.GTE: case RuleOperator.GT: diff --git a/src/main/resources/processes/rules-matcher.bpmn b/src/main/resources/processes/rules-matcher.bpmn index 8f9e0f1..2f1d41d 100644 --- a/src/main/resources/processes/rules-matcher.bpmn +++ b/src/main/resources/processes/rules-matcher.bpmn @@ -40,7 +40,7 @@ Flow_03tvbfd - + Flow_03tvbfd Flow_0df9t6r @@ -303,4 +303,4 @@ - \ No newline at end of file + diff --git a/src/test/java/net/ironoc/rules/engine/controller/FlagControllerTest.java b/src/test/java/net/ironoc/rules/engine/controller/FlagControllerTest.java index cb999b2..65584d0 100644 --- a/src/test/java/net/ironoc/rules/engine/controller/FlagControllerTest.java +++ b/src/test/java/net/ironoc/rules/engine/controller/FlagControllerTest.java @@ -6,7 +6,7 @@ import net.ironoc.rules.engine.domain.ApiResponse; import net.ironoc.rules.engine.dto.Feature; import net.ironoc.rules.engine.dto.RuleGroups; -import net.ironoc.rules.engine.enums.FeatureType; +import net.ironoc.rules.engine.enums.FeatureFlag; import net.ironoc.rules.engine.service.FeatureDetailService; import net.ironoc.rules.engine.service.RulesService; import org.camunda.bpm.engine.RuntimeService; @@ -111,7 +111,7 @@ void evaluateFlags_matchesFromAllAndAny_returnsOkAndCombinedList() { assertNotNull(response.getBody()); assertEquals(2, response.getBody().rules().size()); - assertTrue(response.getBody().rules().stream().anyMatch(r -> FeatureType.COUNTRY.name().equalsIgnoreCase(r.attr()))); - assertTrue(response.getBody().rules().stream().anyMatch(r -> FeatureType.TIER.name().equalsIgnoreCase(r.attr()))); + assertTrue(response.getBody().rules().stream().anyMatch(r -> FeatureFlag.COUNTRY.name().equalsIgnoreCase(r.attr()))); + assertTrue(response.getBody().rules().stream().anyMatch(r -> FeatureFlag.TIER.name().equalsIgnoreCase(r.attr()))); } -} \ No newline at end of file +} diff --git a/src/test/java/net/ironoc/rules/engine/service/RulesServiceTest.java b/src/test/java/net/ironoc/rules/engine/service/RulesServiceTest.java index f6e6e13..08a1628 100644 --- a/src/test/java/net/ironoc/rules/engine/service/RulesServiceTest.java +++ b/src/test/java/net/ironoc/rules/engine/service/RulesServiceTest.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import net.ironoc.rules.engine.dto.Rule; -import net.ironoc.rules.engine.enums.FeatureType; +import net.ironoc.rules.engine.enums.FeatureFlag; import net.ironoc.rules.engine.enums.RuleOperator; import org.junit.jupiter.api.Test; import org.springframework.core.env.Environment; @@ -37,7 +37,7 @@ void rulesMatcher_countryIn_matches() { List matches = service.rulesMatcher("ES", "10", "FREE", rules); assertEquals(1, matches.size()); - assertEquals(FeatureType.COUNTRY.name(), matches.getFirst().attr()); + assertEquals(FeatureFlag.COUNTRY.name(), matches.getFirst().attr()); assertEquals(RuleOperator.IN.name(), matches.getFirst().op()); } @@ -56,7 +56,7 @@ void rulesMatcher_appVersionGte_matches() { List matches = service.rulesMatcher("ES", "12", "FREE", rules); assertEquals(1, matches.size()); - assertEquals(FeatureType.APPVERSION.name(), matches.getFirst().attr()); + assertEquals(FeatureFlag.APPVERSION.name(), matches.getFirst().attr()); assertEquals(RuleOperator.GTE.name(), matches.getFirst().op()); } @@ -76,4 +76,4 @@ void rulesMatcher_countryWithUnsupportedOperator_doesNotMatch() { assertTrue(matches.isEmpty()); } -} \ No newline at end of file +}