Skip to content

Commit

Permalink
Allow rules string as a configuration alternative (#19)
Browse files Browse the repository at this point in the history
  • Loading branch information
filipesperandio authored Sep 25, 2017
1 parent 01c813b commit a427807
Showing 4 changed files with 69 additions and 13 deletions.
10 changes: 10 additions & 0 deletions fixtures/rules/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"enabled": true,
"channel": "beta",
"config": {
"rules": ["java-basic", "java-design"]
},
"include_paths": [
"Main.java"
]
}
11 changes: 11 additions & 0 deletions fixtures/rules/config.mix.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"enabled": true,
"channel": "beta",
"config": {
"file": "rules.xml",
"rules": ["java-basic", "java-design"]
},
"include_paths": [
"Main.java"
]
}
43 changes: 33 additions & 10 deletions src/Config.groovy
Original file line number Diff line number Diff line change
@@ -22,16 +22,15 @@ class Config {
}

def ruleSet() {
if(parsedConfig.config) {
def configFile = parsedConfig.config instanceof String ? parsedConfig.config : parsedConfig.config.file

def specifiedRules = new File(appContext.codeFolder, configFile)
if(specifiedRules.exists()) {
return specifiedRules.absolutePath
} else {
System.err.println "Config file ${configFile} not found"
System.exit(1)
}
def config = parsedConfig.config

switch(config) {
case String:
return specifiedRules(config)
break
case Map:
return rulesOrFile(config)
break
}

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

private def rulesOrFile(config) {
validate(config)
if(config.rules) {
return config.rules.join(",")
}
return specifiedRules(config.file)
}

private def validate(config) {
if(config.file && config.rules) {
throw new IllegalArgumentException("Config should contain 'file' OR 'rules'")
}
}

private def specifiedRules(configFile) {
def rules = new File(appContext.codeFolder, configFile)
if(rules.exists()) {
return rules.absolutePath
} else {
System.err.println "Config file ${configFile} not found"
System.exit(1)
}
}

private def filesToAnalyze() {
def includePaths = parsedConfig.include_paths?.join(" ")
def codeFolder = new File(appContext.codeFolder)
18 changes: 15 additions & 3 deletions test/ConfigTest.groovy
Original file line number Diff line number Diff line change
@@ -5,18 +5,30 @@ class ConfigTest {
@Test
public void defaultRuleSet() {
def config = new Config([configFile: "/usr/src/app/fixtures/default/config.json", codeFolder: "/usr/src/app/fixtures/default"])
assertEquals config.ruleSet(), "/usr/src/app/ruleset.xml"
assertEquals "/usr/src/app/ruleset.xml", config.ruleSet()
}

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

@Test
public void honorPresentRules() {
def config = new Config([configFile: "/usr/src/app/fixtures/ruleset_default_file/config.json", codeFolder: "/usr/src/app/fixtures/ruleset_default_file"])
assertEquals config.ruleSet(), "/usr/src/app/fixtures/ruleset_default_file/ruleset.xml"
assertEquals "/usr/src/app/fixtures/ruleset_default_file/ruleset.xml", config.ruleSet()
}

@Test(expected = IllegalArgumentException.class)
public void doesNotAllowToMixRulesAndFile() {
def config = new Config([configFile: "/usr/src/app/fixtures/rules/config.mix.json", codeFolder: "/usr/src/app/fixtures/rules"])
config.ruleSet()
}

@Test
public void acceptRulesSimpleNames() {
def config = new Config([configFile: "/usr/src/app/fixtures/rules/config.json", codeFolder: "/usr/src/app/fixtures/rules"])
assertEquals "java-basic,java-design", config.ruleSet()
}
}

0 comments on commit a427807

Please sign in to comment.