thoughtbot--shoulda-matchers/spec/warnings_spy.rb

65 lines
1.5 KiB
Ruby

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
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