module Inspec::Reporters

Public Class Methods

render(reporter, run_data) click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

# File lib/inspec/reporters.rb, line 10
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 "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
report(reporter, run_data) click to toggle source
# File lib/inspec/reporters.rb, line 51
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