lib/goodcheck/config_loader.rb in goodcheck-1.5.1 vs lib/goodcheck/config_loader.rb in goodcheck-1.6.0
- old
+ new
@@ -18,20 +18,32 @@
string)
let :encoding, enum(*Encoding.name_list.map {|name| literal(name) })
let :glob, object(pattern: string, encoding: optional(encoding))
- let :rule, object(
+ let :positive_rule, object(
id: string,
pattern: enum(array(pattern), pattern),
message: string,
justification: optional(enum(array(string), string)),
glob: optional(enum(array(enum(glob, string)), glob, string)),
pass: optional(enum(array(string), string)),
fail: optional(enum(array(string), string))
)
+ let :negative_rule, object(
+ id: string,
+ not: object(pattern: enum(array(pattern), pattern)),
+ message: string,
+ justification: optional(enum(array(string), string)),
+ glob: optional(enum(array(enum(glob, string)), glob, string)),
+ pass: optional(enum(array(string), string)),
+ fail: optional(enum(array(string), string))
+ )
+
+ let :rule, enum(positive_rule, negative_rule)
+
let :rules, array(rule)
let :import_target, string
let :imports, array(import_target)
let :exclude, enum(array(string), string)
@@ -97,23 +109,28 @@
def load_rule(hash)
Goodcheck.logger.debug "Loading rule: #{hash[:id]}"
id = hash[:id]
- patterns = retrieve_patterns(hash)
+ patterns, negated = retrieve_patterns(hash)
justifications = array(hash[:justification])
globs = load_globs(array(hash[:glob]))
message = hash[:message].chomp
passes = array(hash[:pass])
fails = array(hash[:fail])
- Rule.new(id: id, patterns: patterns, justifications: justifications, globs: globs, message: message, passes: passes, fails: fails)
+ Rule.new(id: id, patterns: patterns, justifications: justifications, globs: globs, message: message, passes: passes, fails: fails, negated: negated)
end
def retrieve_patterns(hash)
- array(hash[:pattern]).map do |pat|
- load_pattern(pat)
+ if hash.is_a?(Hash) && hash.key?(:not)
+ negated = true
+ hash = hash[:not]
+ else
+ negated = false
end
+
+ [array(hash[:pattern]).map {|pat| load_pattern(pat) }, negated]
end
def load_globs(globs)
globs.map do |glob|
case glob