2014-06-27 18:39:39 -04:00
|
|
|
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
|
2014-10-22 01:00:24 -04:00
|
|
|
fail_build_if_there_are_any_warnings
|
2014-06-27 18:39:39 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
def fail_build_if_there_are_any_warnings
|
|
|
|
if relevant_warning_groups.any?
|
|
|
|
exit(1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def printing_exceptions
|
|
|
|
begin
|
|
|
|
yield
|
|
|
|
rescue => error
|
|
|
|
puts "\n--- ERROR IN AT_EXIT --------------------------------"
|
|
|
|
puts "#{error.class}: #{error.message}"
|
|
|
|
puts error.backtrace.join("\n")
|
|
|
|
puts "-----------------------------------------------------"
|
|
|
|
raise error
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|