Use warnings_logger instead of warnings_spy

`warnings_spy` was a little library I wrote to report warnings that came
up during test runs and fail the CI build. A while back I extracted it
to `warnings_logger`, so the version that exists here is obsolete.
This commit is contained in:
Elliot Winkler 2020-08-23 21:23:35 -06:00
parent ef821507b1
commit 412ea1f936
18 changed files with 24 additions and 291 deletions

View File

@ -8,6 +8,7 @@ gem 'rake', '13.0.1'
gem 'rspec', '~> 3.9'
gem 'rubocop', require: false
gem 'rubocop-rails', require: false
gem 'warnings_logger'
gem 'zeus', require: false
# YARD

View File

@ -54,6 +54,7 @@ GEM
ruby-progressbar (1.10.1)
thor (0.20.0)
unicode-display_width (1.6.0)
warnings_logger (0.1.1)
yard (0.9.20)
zeus (0.15.14)
method_source (>= 0.6.7)
@ -73,6 +74,7 @@ DEPENDENCIES
rspec (~> 3.9)
rubocop
rubocop-rails
warnings_logger
yard
zeus

View File

@ -10,6 +10,7 @@ gem "rake", "13.0.1"
gem "rspec", "~> 3.9"
gem "rubocop", require: false
gem "rubocop-rails", require: false
gem "warnings_logger"
gem "zeus", require: false
gem "fssm"
gem "pygments.rb"

View File

@ -206,6 +206,7 @@ GEM
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
unicode-display_width (1.6.0)
warnings_logger (0.1.1)
yard (0.9.20)
zeus (0.15.14)
method_source (>= 0.6.7)
@ -243,6 +244,7 @@ DEPENDENCIES
sqlite3 (~> 1.3.6)
turbolinks
uglifier (>= 1.3.0)
warnings_logger
yard
zeus

View File

@ -10,6 +10,7 @@ gem "rake", "13.0.1"
gem "rspec", "~> 3.9"
gem "rubocop", require: false
gem "rubocop-rails", require: false
gem "warnings_logger"
gem "zeus", require: false
gem "fssm"
gem "pygments.rb"

View File

@ -197,6 +197,7 @@ GEM
tzinfo (1.2.6)
thread_safe (~> 0.1)
unicode-display_width (1.6.0)
warnings_logger (0.1.1)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)
@ -235,6 +236,7 @@ DEPENDENCIES
spring-watcher-listen (~> 2.0.0)
sqlite3 (~> 1.3.6)
turbolinks (~> 5)
warnings_logger
yard
zeus

View File

@ -10,6 +10,7 @@ gem "rake", "13.0.1"
gem "rspec", "~> 3.9"
gem "rubocop", require: false
gem "rubocop-rails", require: false
gem "warnings_logger"
gem "zeus", require: false
gem "fssm"
gem "pygments.rb"

View File

@ -210,6 +210,7 @@ GEM
tzinfo (1.2.6)
thread_safe (~> 0.1)
unicode-display_width (1.6.0)
warnings_logger (0.1.1)
websocket-driver (0.6.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)
@ -251,6 +252,7 @@ DEPENDENCIES
spring-watcher-listen (~> 2.0.0)
sqlite3 (~> 1.3.6)
turbolinks (~> 5)
warnings_logger
yard
zeus

View File

@ -10,6 +10,7 @@ gem "rake", "13.0.1"
gem "rspec", "~> 3.9"
gem "rubocop", require: false
gem "rubocop-rails", require: false
gem "warnings_logger"
gem "zeus", require: false
gem "fssm"
gem "pygments.rb"

View File

@ -227,6 +227,7 @@ GEM
tzinfo (1.2.6)
thread_safe (~> 0.1)
unicode-display_width (1.6.0)
warnings_logger (0.1.1)
websocket-driver (0.7.1)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.4)
@ -270,6 +271,7 @@ DEPENDENCIES
spring-watcher-listen (~> 2.0.0)
sqlite3 (~> 1.3.6)
turbolinks (~> 5)
warnings_logger
yard
zeus

View File

@ -10,6 +10,7 @@ gem "rake", "13.0.1"
gem "rspec", "~> 3.9"
gem "rubocop", require: false
gem "rubocop-rails", require: false
gem "warnings_logger"
gem "zeus", require: false
gem "fssm"
gem "pygments.rb"

View File

@ -238,6 +238,7 @@ GEM
tzinfo (1.2.6)
thread_safe (~> 0.1)
unicode-display_width (1.6.0)
warnings_logger (0.1.1)
webdrivers (4.1.3)
nokogiri (~> 1.6)
rubyzip (>= 1.3.0)
@ -286,6 +287,7 @@ DEPENDENCIES
spring-watcher-listen (~> 2.0.0)
sqlite3 (~> 1.4)
turbolinks (~> 5)
warnings_logger
webdrivers
yard
zeus

View File

@ -1,7 +1,8 @@
require File.expand_path('../warnings_spy', __FILE__)
require 'warnings_logger'
# Adapted from <http://myronmars.to/n/dev-blog/2011/08/making-your-gem-warning-free>
WarningsLogger.configure do |config|
config.project_name = 'shoulda-matchers'
config.project_directory = Pathname.new('..').expand_path(__dir__)
end
warnings_spy = WarningsSpy.new('shoulda-matchers')
warnings_spy.capture_warnings
warnings_spy.report_warnings_at_exit
WarningsLogger.enable

View File

@ -1,64 +0,0 @@
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

View File

@ -1,45 +0,0 @@
require 'fileutils'
class WarningsSpy
class Filesystem
PROJECT_DIR = File.expand_path('../../..', __FILE__)
TEMP_DIR = File.join(PROJECT_DIR, 'tmp')
def initialize
@files_by_name = Hash.new do |hash, name|
FileUtils.mkdir_p(TEMP_DIR)
hash[name] = file_for(name)
end
end
def warnings_file
files_by_name['all_warnings']
end
def irrelevant_warnings_file
files_by_name['irrelevant_warnings']
end
def relevant_warnings_file
files_by_name['relevant_warnings']
end
def project_dir
PROJECT_DIR
end
protected
attr_reader :files_by_name
private
def path_for(name)
File.join(TEMP_DIR, "#{name}.txt")
end
def file_for(name)
File.open(path_for(name), 'w+')
end
end
end

View File

@ -1,36 +0,0 @@
require 'forwardable'
class WarningsSpy
class Partitioner
extend Forwardable
attr_reader :relevant_warning_groups, :irrelevant_warning_groups
def initialize(reader, filesystem)
@reader = reader
@search_text = filesystem.project_dir
end
def partition
@relevant_warning_groups, @irrelevant_warning_groups =
warning_groups.partition { |group| relevant_warnings?(group) }
end
protected
attr_reader :reader, :search_text
private
def_delegators :reader, :warning_groups
def relevant_warnings?(group)
first_line = group[0]
first_line.start_with?("#{project_root}/lib")
end
def project_root
File.expand_path('../../..')
end
end
end

View File

@ -1,53 +0,0 @@
class WarningsSpy
class Reader
attr_reader :warning_groups
def initialize(filesystem)
@warnings_file = filesystem.warnings_file
@current_group = []
@warning_groups = []
end
def read
warnings_file.rewind
warnings_file.each_line do |line|
process_line(line)
end
add_group(current_group)
end
protected
attr_reader :warnings_file, :current_group
private
def process_line(line)
if start_of_group?(line)
add_group(current_group)
@current_group = []
end
current_group << line
end
def start_of_group?(line)
line =~ /^\S/
end
def add_group(group)
unless group.empty? || group_already_added?(group)
warning_groups << group
end
end
def group_already_added?(group_to_be_added)
warning_groups.any? do |group|
group == group_to_be_added
end
end
end
end

View File

@ -1,88 +0,0 @@
require 'forwardable'
class WarningsSpy
class Reporter
extend Forwardable
def initialize(partitioner, filesystem, project_name)
@partitioner = partitioner
@warnings_file = filesystem.warnings_file
@relevant_warnings_file = filesystem.relevant_warnings_file
@irrelevant_warnings_file = filesystem.irrelevant_warnings_file
@project_name = project_name
end
def report
reporting_all_groups do
report_relevant_warning_groups
report_irrelevant_warning_groups
end
end
protected
attr_reader :partitioner, :warnings_file, :relevant_warnings_file,
:irrelevant_warnings_file, :project_name
private
def_delegators :partitioner, :relevant_warning_groups,
:irrelevant_warning_groups
def report_relevant_warning_groups
if relevant_warning_groups.any?
print_divider('-', 75, header: " #{project_name} warnings:")
relevant_warning_groups.each do |group|
group.each do |line|
relevant_warnings_file.puts(line)
puts line
end
end
print_divider('-', 75)
puts "#{project_name} warnings written to #{relevant_warnings_file.path}."
end
end
def report_irrelevant_warning_groups
if irrelevant_warning_groups.any?
irrelevant_warning_groups.each do |group|
group.each do |line|
irrelevant_warnings_file.puts(line)
end
end
puts "Non #{project_name} warnings were raised during the test run. These have been written to #{irrelevant_warnings_file.path}."
end
end
def reporting_all_groups
if relevant_warning_groups.any? || irrelevant_warning_groups.any?
puts
yield
puts "All warnings were written to #{warnings_file.path}."
puts
end
end
def print_divider(character, count, options = {})
puts
if options[:header]
first_count = 10
second_count = options[:header].length - first_count
string =
horizontal_rule(character, first_count) +
options[:header] +
horizontal_rule(character, second_count)
puts string
else
puts horizontal_rule(character, count)
end
puts
end
def horizontal_rule(character, count)
character * count
end
end
end