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:
parent
ef821507b1
commit
412ea1f936
1
Gemfile
1
Gemfile
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue