Skip to content

Commit a427807

Browse files
Allow rules string as a configuration alternative (#19)
1 parent 01c813b commit a427807

File tree

4 files changed

+69
-13
lines changed

4 files changed

+69
-13
lines changed

fixtures/rules/config.json

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"enabled": true,
3+
"channel": "beta",
4+
"config": {
5+
"rules": ["java-basic", "java-design"]
6+
},
7+
"include_paths": [
8+
"Main.java"
9+
]
10+
}

fixtures/rules/config.mix.json

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"enabled": true,
3+
"channel": "beta",
4+
"config": {
5+
"file": "rules.xml",
6+
"rules": ["java-basic", "java-design"]
7+
},
8+
"include_paths": [
9+
"Main.java"
10+
]
11+
}

src/Config.groovy

+33-10
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,15 @@ class Config {
2222
}
2323

2424
def ruleSet() {
25-
if(parsedConfig.config) {
26-
def configFile = parsedConfig.config instanceof String ? parsedConfig.config : parsedConfig.config.file
27-
28-
def specifiedRules = new File(appContext.codeFolder, configFile)
29-
if(specifiedRules.exists()) {
30-
return specifiedRules.absolutePath
31-
} else {
32-
System.err.println "Config file ${configFile} not found"
33-
System.exit(1)
34-
}
25+
def config = parsedConfig.config
26+
27+
switch(config) {
28+
case String:
29+
return specifiedRules(config)
30+
break
31+
case Map:
32+
return rulesOrFile(config)
33+
break
3534
}
3635

3736
def defaultFile = new File(appContext.codeFolder, "ruleset.xml")
@@ -46,6 +45,30 @@ class Config {
4645
filesList.absolutePath
4746
}
4847

48+
private def rulesOrFile(config) {
49+
validate(config)
50+
if(config.rules) {
51+
return config.rules.join(",")
52+
}
53+
return specifiedRules(config.file)
54+
}
55+
56+
private def validate(config) {
57+
if(config.file && config.rules) {
58+
throw new IllegalArgumentException("Config should contain 'file' OR 'rules'")
59+
}
60+
}
61+
62+
private def specifiedRules(configFile) {
63+
def rules = new File(appContext.codeFolder, configFile)
64+
if(rules.exists()) {
65+
return rules.absolutePath
66+
} else {
67+
System.err.println "Config file ${configFile} not found"
68+
System.exit(1)
69+
}
70+
}
71+
4972
private def filesToAnalyze() {
5073
def includePaths = parsedConfig.include_paths?.join(" ")
5174
def codeFolder = new File(appContext.codeFolder)

test/ConfigTest.groovy

+15-3
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,30 @@ class ConfigTest {
55
@Test
66
public void defaultRuleSet() {
77
def config = new Config([configFile: "/usr/src/app/fixtures/default/config.json", codeFolder: "/usr/src/app/fixtures/default"])
8-
assertEquals config.ruleSet(), "/usr/src/app/ruleset.xml"
8+
assertEquals "/usr/src/app/ruleset.xml", config.ruleSet()
99
}
1010

1111
@Test
1212
public void specifiedRuleSetFile() {
1313
def config = new Config([configFile: "/usr/src/app/fixtures/specified_file/config.new.json", codeFolder: "/usr/src/app/fixtures/specified_file"])
14-
assertEquals config.ruleSet(), "/usr/src/app/fixtures/specified_file/rules.xml"
14+
assertEquals "/usr/src/app/fixtures/specified_file/rules.xml", config.ruleSet()
1515
}
1616

1717
@Test
1818
public void honorPresentRules() {
1919
def config = new Config([configFile: "/usr/src/app/fixtures/ruleset_default_file/config.json", codeFolder: "/usr/src/app/fixtures/ruleset_default_file"])
20-
assertEquals config.ruleSet(), "/usr/src/app/fixtures/ruleset_default_file/ruleset.xml"
20+
assertEquals "/usr/src/app/fixtures/ruleset_default_file/ruleset.xml", config.ruleSet()
21+
}
22+
23+
@Test(expected = IllegalArgumentException.class)
24+
public void doesNotAllowToMixRulesAndFile() {
25+
def config = new Config([configFile: "/usr/src/app/fixtures/rules/config.mix.json", codeFolder: "/usr/src/app/fixtures/rules"])
26+
config.ruleSet()
27+
}
28+
29+
@Test
30+
public void acceptRulesSimpleNames() {
31+
def config = new Config([configFile: "/usr/src/app/fixtures/rules/config.json", codeFolder: "/usr/src/app/fixtures/rules"])
32+
assertEquals "java-basic,java-design", config.ruleSet()
2133
}
2234
}

0 commit comments

Comments
 (0)