mirror of
https://github.com/thoughtbot/shoulda-matchers.git
synced 2022-11-09 12:01:38 -05:00
65 lines
1.5 KiB
Ruby
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
|