File Manager
Viewing File: reporters.rb
require "inspec/reporters/base"
require "inspec/reporters/cli"
require "inspec/reporters/json"
require "inspec/reporters/json_automate"
require "inspec/reporters/junit"
require "inspec/reporters/automate"
require "inspec/reporters/yaml"
module Inspec::Reporters
# rubocop:disable Metrics/CyclomaticComplexity
def self.render(reporter, run_data)
name, config = reporter.dup
config[:run_data] = run_data
case name
when "cli"
reporter = Inspec::Reporters::CLI.new(config)
when "json"
reporter = Inspec::Reporters::Json.new(config)
# This reporter is only used for Chef internal. We reserve the
# right to introduce breaking changes to this reporter at any time.
when "json-automate"
reporter = Inspec::Reporters::JsonAutomate.new(config)
when "junit"
reporter = Inspec::Reporters::Junit.new(config)
when "automate"
reporter = Inspec::Reporters::Automate.new(config)
when "yaml"
reporter = Inspec::Reporters::Yaml.new(config)
else
# If we made it here, it must be a plugin, and we know it exists (because we validated it in config.rb)
activator = Inspec::Plugin::V2::Registry.instance.find_activator(plugin_type: :reporter, activator_name: name.to_sym)
activator.activate!
reporter = activator.implementation_class.new(config)
end
# optional send_report method on reporter
return reporter.send_report if defined?(reporter.send_report)
reporter.render
output = reporter.rendered_output
if config["file"]
# create destination directory if it does not exist
dirname = File.dirname(config["file"])
FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
File.write(config["file"], output)
elsif config["stdout"] == true
print output
$stdout.flush
end
end
def self.report(reporter, run_data)
name, config = reporter.dup
config[:run_data] = run_data
case name
when "json"
reporter = Inspec::Reporters::Json.new(config)
when "json-automate"
reporter = Inspec::Reporters::JsonAutomate.new(config)
when "yaml"
reporter = Inspec::Reporters::Yaml.new(config)
else
# If we made it here, it might be a plugin
begin
activator = Inspec::Plugin::V2::Registry.instance.find_activator(plugin_type: :reporter, activator_name: name.to_sym)
activator.activate!
reporter = activator.implementation_class.new(config)
unless reporter.respond_to(:report?)
return run_data
end
rescue Inspec::Plugin::V2::LoadError
# Must not have been a plugin - just return the run_data
return run_data
end
end
reporter.report
end
end