Sha256: 3afe91062197f65e3a1f7e62bde4139d01dfc97316d188844e30255ad311c89f

Contents?: true

Size: 1.4 KB

Versions: 6

Compression:

Stored size: 1.4 KB

Contents

# https://raw.githubusercontent.com/metric_fu/metric_fu/master/spec/capture_warnings.rb
require "tempfile"
require "fileutils"

class CaptureWarnings
  def initialize(fail_on_warnings = true)
    @fail_on_warnings = fail_on_warnings
    @stderr_file = Tempfile.new("app.stderr")
    @app_root ||= Dir.pwd
    @output_dir = File.join(app_root, "tmp")
    FileUtils.mkdir_p(output_dir)
    @bundle_dir = File.join(app_root, "bundle")
  end

  def before_tests
    $stderr.reopen(stderr_file.path)
    $VERBOSE = true
    at_exit { $stderr.reopen(STDERR) }
  end

  def after_tests
    stderr_file.rewind
    lines = stderr_file.read.split("\n")
    stderr_file.close!

    $stderr.reopen(STDERR)

    app_warnings, other_warnings = lines.partition { |line|
      line.include?(app_root) && !line.include?(bundle_dir)
    }

    if app_warnings.any?
      puts <<-WARNINGS
#{'-' * 30} app warnings: #{'-' * 30}

#{app_warnings.join("\n")}

#{'-' * 75}
      WARNINGS
    end

    if other_warnings.any?
      File.write(File.join(output_dir, "warnings.txt"), other_warnings.join("\n") << "\n")
      puts
      puts "Non-app warnings written to tmp/warnings.txt"
      puts
    end

    # fail the build...
    if fail_on_warnings && app_warnings.any?
      abort "Failing build due to app warnings: #{app_warnings.inspect}"
    end
  end

  private
  attr_reader :stderr_file, :app_root, :output_dir, :bundle_dir, :fail_on_warnings
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
cheap_ams-0.10.5 test/capture_warnings.rb
cheap_ams-0.10.4 test/capture_warnings.rb
cheap_ams-0.10.3 test/capture_warnings.rb
cheap_ams-0.10.2 test/capture_warnings.rb
cheap_ams-0.10.1 test/capture_warnings.rb
cheap_ams-0.10.0.rc2 test/capture_warnings.rb