lib/brakeman/codeclimate/engine_configuration.rb
require 'pathname'
module Brakeman
module Codeclimate
class EngineConfiguration
def initialize(engine_config = {})
@engine_config = engine_config
end
def options
default_options.merge(configured_options)
end
private
attr_reader :engine_config
def default_options
@default_options = {
:output_format => :codeclimate,
:quiet => true,
:pager => false,
:app_path => Dir.pwd
}
if system("test -w /dev/stdout")
@default_options[:output_files] = ["/dev/stdout"]
end
@default_options
end
def configured_options
@configured_options = {}
# ATM this gets parsed as a string instead of bool: "config":{ "debug":"true" }
if brakeman_configuration["debug"] && brakeman_configuration["debug"].to_s.downcase == "true"
@configured_options[:debug] = true
@configured_options[:report_progress] = false
end
if active_include_paths
@configured_options[:only_files] = active_include_paths
end
if brakeman_configuration["app_path"]
@configured_options[:path_prefix] = brakeman_configuration["app_path"]
path = Pathname.new(Dir.pwd) + brakeman_configuration["app_path"]
@configured_options[:app_path] = path.to_s
end
@configured_options
end
def brakeman_configuration
if engine_config["config"]
engine_config["config"]
else
{}
end
end
def active_include_paths
@active_include_paths ||=
if brakeman_configuration["app_path"]
stripped_include_paths(brakeman_configuration["app_path"])
else
engine_config["include_paths"] && engine_config["include_paths"].compact
end
end
def stripped_include_paths(prefix)
subprefixes = path_subprefixes(prefix)
engine_config["include_paths"] && engine_config["include_paths"].map do |path|
next unless path
stripped_include_path(prefix, subprefixes, path)
end.compact
end
def path_subprefixes(path)
Pathname.new(path).each_filename.inject([]) do |memo, piece|
memo <<
if memo.any?
File.join(memo.last, piece)
else
File.join(piece)
end
end
end
def stripped_include_path(prefix, subprefixes, path)
if path.start_with?(prefix)
path.sub(%r{^#{prefix}/?}, "/")
elsif subprefixes.any? { |subprefix| path =~ %r{^#{subprefix}/?$} }
"/"
end
end
end
end
end