Skip to content
This repository was archived by the owner on Jul 6, 2023. It is now read-only.

Commit 8b1bb92

Browse files
committed
refactoring pattern matching
1 parent e871b67 commit 8b1bb92

File tree

2 files changed

+34
-21
lines changed

2 files changed

+34
-21
lines changed

cypher-shell/src/main/java/org/neo4j/shell/commands/Param.java

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import javax.annotation.Nonnull;
88
import java.util.Collections;
99
import java.util.List;
10+
import java.util.function.BiFunction;
1011
import java.util.regex.Matcher;
1112
import java.util.regex.Pattern;
1213

@@ -63,30 +64,42 @@ public List<String> getAliases() {
6364
public void execute(@Nonnull final String argString) throws CommandException {
6465
Matcher lambdaMapMatcher = lambdaMapPattern.matcher(argString);
6566
if (lambdaMapMatcher.matches()) {
66-
throw new CommandException(AnsiFormattedText.from("Incorrect number of arguments.\nusage: ")
67+
throw new CommandException(AnsiFormattedText.from("Incorrect usage.\nusage: ")
6768
.bold().append(COMMAND_NAME).boldOff().append(" ").append(getUsage()));
6869
}
69-
Matcher lambdaMatcher = lambdaPattern.matcher(argString);
70-
if (lambdaMatcher.matches()) {
71-
variableHolder.set(lambdaMatcher.group("key"), lambdaMatcher.group("value"));
72-
return;
73-
}
74-
Matcher alphanumericMatcher = argPattern.matcher(argString);
75-
if (alphanumericMatcher.matches()) {
76-
variableHolder.set(alphanumericMatcher.group("key"), alphanumericMatcher.group("value"));
77-
return;
78-
}
79-
Matcher backtickLambdaMatcher = backtickLambdaPattern.matcher(argString);
80-
if (argString.trim().startsWith("`") && backtickLambdaMatcher.matches() && backtickLambdaMatcher.group("key").length() > 2) {
81-
variableHolder.set(backtickLambdaMatcher.group("key"), backtickLambdaMatcher.group("value"));
82-
return;
70+
if (!validParameterAssignment(argString)) {
71+
throw new CommandException(AnsiFormattedText.from("Incorrect number of arguments.\nusage: ")
72+
.bold().append(COMMAND_NAME).boldOff().append(" ").append(getUsage()));
8373
}
84-
Matcher matcher = backtickPattern.matcher(argString);
85-
if (argString.trim().startsWith("`") && matcher.matches() && matcher.group("key").length() > 2) {
74+
}
75+
76+
private boolean validParameterAssignment(@Nonnull String argString) throws CommandException {
77+
return setParameterIfItMatchesPattern(argString, lambdaPattern, validParameterAssignment())
78+
|| setParameterIfItMatchesPattern(argString, argPattern, validParameterAssignment())
79+
|| setParameterIfItMatchesPattern(argString, backtickLambdaPattern, backTickMatchPattern())
80+
|| setParameterIfItMatchesPattern(argString, backtickPattern, backTickMatchPattern());
81+
}
82+
83+
private boolean setParameterIfItMatchesPattern(@Nonnull String argString, Pattern pattern,
84+
BiFunction<String, Matcher, Boolean> matchingFunction) throws CommandException {
85+
Matcher matcher = pattern.matcher(argString);
86+
if (matchingFunction.apply(argString, matcher)) {
8687
variableHolder.set(matcher.group("key"), matcher.group("value"));
87-
return;
88+
return true;
89+
} else {
90+
return false;
8891
}
89-
throw new CommandException(AnsiFormattedText.from("Incorrect number of arguments.\nusage: ")
90-
.bold().append(COMMAND_NAME).boldOff().append(" ").append(getUsage()));
92+
}
93+
94+
private BiFunction<String, Matcher, Boolean> validParameterAssignment() {
95+
return (argString, matcher) -> matcher.matches();
96+
}
97+
98+
private BiFunction<String, Matcher, Boolean> backTickMatchPattern() {
99+
return (argString, backtickLambdaMatcher) -> {
100+
return argString.trim().startsWith("`")
101+
&& backtickLambdaMatcher.matches()
102+
&& backtickLambdaMatcher.group("key").length() > 2;
103+
};
91104
}
92105
}

cypher-shell/src/test/java/org/neo4j/shell/commands/ParamTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public void shouldFailForVariablesWithoutEscaping() throws CommandException {
9999
@Test
100100
public void shouldFailForVariablesMixingMapStyleAssignmentAndLambdas() throws CommandException {
101101
thrown.expect(CommandException.class);
102-
thrown.expectMessage(containsString("Incorrect number of arguments"));
102+
thrown.expectMessage(containsString("Incorrect usage"));
103103

104104
cmd.execute("bob: => 9");
105105

0 commit comments

Comments
 (0)