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 'rspec', '~> 3.9'
|
||||||
gem 'rubocop', require: false
|
gem 'rubocop', require: false
|
||||||
gem 'rubocop-rails', require: false
|
gem 'rubocop-rails', require: false
|
||||||
|
gem 'warnings_logger'
|
||||||
gem 'zeus', require: false
|
gem 'zeus', require: false
|
||||||
|
|
||||||
# YARD
|
# YARD
|
||||||
|
|
|
@ -54,6 +54,7 @@ GEM
|
||||||
ruby-progressbar (1.10.1)
|
ruby-progressbar (1.10.1)
|
||||||
thor (0.20.0)
|
thor (0.20.0)
|
||||||
unicode-display_width (1.6.0)
|
unicode-display_width (1.6.0)
|
||||||
|
warnings_logger (0.1.1)
|
||||||
yard (0.9.20)
|
yard (0.9.20)
|
||||||
zeus (0.15.14)
|
zeus (0.15.14)
|
||||||
method_source (>= 0.6.7)
|
method_source (>= 0.6.7)
|
||||||
|
@ -73,6 +74,7 @@ DEPENDENCIES
|
||||||
rspec (~> 3.9)
|
rspec (~> 3.9)
|
||||||
rubocop
|
rubocop
|
||||||
rubocop-rails
|
rubocop-rails
|
||||||
|
warnings_logger
|
||||||
yard
|
yard
|
||||||
zeus
|
zeus
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ gem "rake", "13.0.1"
|
||||||
gem "rspec", "~> 3.9"
|
gem "rspec", "~> 3.9"
|
||||||
gem "rubocop", require: false
|
gem "rubocop", require: false
|
||||||
gem "rubocop-rails", require: false
|
gem "rubocop-rails", require: false
|
||||||
|
gem "warnings_logger"
|
||||||
gem "zeus", require: false
|
gem "zeus", require: false
|
||||||
gem "fssm"
|
gem "fssm"
|
||||||
gem "pygments.rb"
|
gem "pygments.rb"
|
||||||
|
|
|
@ -206,6 +206,7 @@ GEM
|
||||||
uglifier (4.2.0)
|
uglifier (4.2.0)
|
||||||
execjs (>= 0.3.0, < 3)
|
execjs (>= 0.3.0, < 3)
|
||||||
unicode-display_width (1.6.0)
|
unicode-display_width (1.6.0)
|
||||||
|
warnings_logger (0.1.1)
|
||||||
yard (0.9.20)
|
yard (0.9.20)
|
||||||
zeus (0.15.14)
|
zeus (0.15.14)
|
||||||
method_source (>= 0.6.7)
|
method_source (>= 0.6.7)
|
||||||
|
@ -243,6 +244,7 @@ DEPENDENCIES
|
||||||
sqlite3 (~> 1.3.6)
|
sqlite3 (~> 1.3.6)
|
||||||
turbolinks
|
turbolinks
|
||||||
uglifier (>= 1.3.0)
|
uglifier (>= 1.3.0)
|
||||||
|
warnings_logger
|
||||||
yard
|
yard
|
||||||
zeus
|
zeus
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ gem "rake", "13.0.1"
|
||||||
gem "rspec", "~> 3.9"
|
gem "rspec", "~> 3.9"
|
||||||
gem "rubocop", require: false
|
gem "rubocop", require: false
|
||||||
gem "rubocop-rails", require: false
|
gem "rubocop-rails", require: false
|
||||||
|
gem "warnings_logger"
|
||||||
gem "zeus", require: false
|
gem "zeus", require: false
|
||||||
gem "fssm"
|
gem "fssm"
|
||||||
gem "pygments.rb"
|
gem "pygments.rb"
|
||||||
|
|
|
@ -197,6 +197,7 @@ GEM
|
||||||
tzinfo (1.2.6)
|
tzinfo (1.2.6)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
unicode-display_width (1.6.0)
|
unicode-display_width (1.6.0)
|
||||||
|
warnings_logger (0.1.1)
|
||||||
websocket-driver (0.6.5)
|
websocket-driver (0.6.5)
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.4)
|
websocket-extensions (0.1.4)
|
||||||
|
@ -235,6 +236,7 @@ DEPENDENCIES
|
||||||
spring-watcher-listen (~> 2.0.0)
|
spring-watcher-listen (~> 2.0.0)
|
||||||
sqlite3 (~> 1.3.6)
|
sqlite3 (~> 1.3.6)
|
||||||
turbolinks (~> 5)
|
turbolinks (~> 5)
|
||||||
|
warnings_logger
|
||||||
yard
|
yard
|
||||||
zeus
|
zeus
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ gem "rake", "13.0.1"
|
||||||
gem "rspec", "~> 3.9"
|
gem "rspec", "~> 3.9"
|
||||||
gem "rubocop", require: false
|
gem "rubocop", require: false
|
||||||
gem "rubocop-rails", require: false
|
gem "rubocop-rails", require: false
|
||||||
|
gem "warnings_logger"
|
||||||
gem "zeus", require: false
|
gem "zeus", require: false
|
||||||
gem "fssm"
|
gem "fssm"
|
||||||
gem "pygments.rb"
|
gem "pygments.rb"
|
||||||
|
|
|
@ -210,6 +210,7 @@ GEM
|
||||||
tzinfo (1.2.6)
|
tzinfo (1.2.6)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
unicode-display_width (1.6.0)
|
unicode-display_width (1.6.0)
|
||||||
|
warnings_logger (0.1.1)
|
||||||
websocket-driver (0.6.5)
|
websocket-driver (0.6.5)
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.4)
|
websocket-extensions (0.1.4)
|
||||||
|
@ -251,6 +252,7 @@ DEPENDENCIES
|
||||||
spring-watcher-listen (~> 2.0.0)
|
spring-watcher-listen (~> 2.0.0)
|
||||||
sqlite3 (~> 1.3.6)
|
sqlite3 (~> 1.3.6)
|
||||||
turbolinks (~> 5)
|
turbolinks (~> 5)
|
||||||
|
warnings_logger
|
||||||
yard
|
yard
|
||||||
zeus
|
zeus
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ gem "rake", "13.0.1"
|
||||||
gem "rspec", "~> 3.9"
|
gem "rspec", "~> 3.9"
|
||||||
gem "rubocop", require: false
|
gem "rubocop", require: false
|
||||||
gem "rubocop-rails", require: false
|
gem "rubocop-rails", require: false
|
||||||
|
gem "warnings_logger"
|
||||||
gem "zeus", require: false
|
gem "zeus", require: false
|
||||||
gem "fssm"
|
gem "fssm"
|
||||||
gem "pygments.rb"
|
gem "pygments.rb"
|
||||||
|
|
|
@ -227,6 +227,7 @@ GEM
|
||||||
tzinfo (1.2.6)
|
tzinfo (1.2.6)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
unicode-display_width (1.6.0)
|
unicode-display_width (1.6.0)
|
||||||
|
warnings_logger (0.1.1)
|
||||||
websocket-driver (0.7.1)
|
websocket-driver (0.7.1)
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.4)
|
websocket-extensions (0.1.4)
|
||||||
|
@ -270,6 +271,7 @@ DEPENDENCIES
|
||||||
spring-watcher-listen (~> 2.0.0)
|
spring-watcher-listen (~> 2.0.0)
|
||||||
sqlite3 (~> 1.3.6)
|
sqlite3 (~> 1.3.6)
|
||||||
turbolinks (~> 5)
|
turbolinks (~> 5)
|
||||||
|
warnings_logger
|
||||||
yard
|
yard
|
||||||
zeus
|
zeus
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ gem "rake", "13.0.1"
|
||||||
gem "rspec", "~> 3.9"
|
gem "rspec", "~> 3.9"
|
||||||
gem "rubocop", require: false
|
gem "rubocop", require: false
|
||||||
gem "rubocop-rails", require: false
|
gem "rubocop-rails", require: false
|
||||||
|
gem "warnings_logger"
|
||||||
gem "zeus", require: false
|
gem "zeus", require: false
|
||||||
gem "fssm"
|
gem "fssm"
|
||||||
gem "pygments.rb"
|
gem "pygments.rb"
|
||||||
|
|
|
@ -238,6 +238,7 @@ GEM
|
||||||
tzinfo (1.2.6)
|
tzinfo (1.2.6)
|
||||||
thread_safe (~> 0.1)
|
thread_safe (~> 0.1)
|
||||||
unicode-display_width (1.6.0)
|
unicode-display_width (1.6.0)
|
||||||
|
warnings_logger (0.1.1)
|
||||||
webdrivers (4.1.3)
|
webdrivers (4.1.3)
|
||||||
nokogiri (~> 1.6)
|
nokogiri (~> 1.6)
|
||||||
rubyzip (>= 1.3.0)
|
rubyzip (>= 1.3.0)
|
||||||
|
@ -286,6 +287,7 @@ DEPENDENCIES
|
||||||
spring-watcher-listen (~> 2.0.0)
|
spring-watcher-listen (~> 2.0.0)
|
||||||
sqlite3 (~> 1.4)
|
sqlite3 (~> 1.4)
|
||||||
turbolinks (~> 5)
|
turbolinks (~> 5)
|
||||||
|
warnings_logger
|
||||||
webdrivers
|
webdrivers
|
||||||
yard
|
yard
|
||||||
zeus
|
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')
|
WarningsLogger.enable
|
||||||
warnings_spy.capture_warnings
|
|
||||||
warnings_spy.report_warnings_at_exit
|
|
||||||
|
|
|
@ -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