Sha256: 24c20ce7cc96e7a4f135f5c087784260208c14b6a510deeada54fa424120824d

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

require 'forwardable'

require File.expand_path('../warnings_spy/filesystem', __FILE__)
require File.expand_path('../warnings_spy/reader', __FILE__)
require File.expand_path('../warnings_spy/partitioner', __FILE__)
require File.expand_path('../warnings_spy/reporter', __FILE__)

class WarningsSpy
  extend Forwardable

  def initialize(project_name)
    filesystem = Filesystem.new
    @warnings_file = filesystem.warnings_file
    @reader = Reader.new(filesystem)
    @partitioner = Partitioner.new(reader, filesystem)
    @reporter = Reporter.new(partitioner, filesystem, project_name)
  end

  def capture_warnings
    $stderr.reopen(warnings_file.path)
  end

  def report_warnings_at_exit
    at_exit do
      printing_exceptions do
        report_and_exit
      end
    end
  end

  protected

  attr_reader :warnings_file, :reader, :partitioner, :reporter

  private

  def_delegators :partitioner, :relevant_warning_groups,
    :irrelevant_warning_groups

  def report_and_exit
    reader.read
    partitioner.partition
    reporter.report
    fail_build_if_there_are_any_warnings
  end

  def fail_build_if_there_are_any_warnings
    if relevant_warning_groups.any?
      exit(1)
    end
  end

  def printing_exceptions
    yield
  rescue => error
    puts "\n--- ERROR IN AT_EXIT --------------------------------"
    puts "#{error.class}: #{error.message}"
    puts error.backtrace.join("\n")
    puts '-----------------------------------------------------'
    raise error
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shoulda-3.6.0 test/warnings_spy.rb