lib/leftovers.rb in leftovers-0.4.3 vs lib/leftovers.rb in leftovers-0.5.0

- old
+ new

@@ -1,12 +1,10 @@ # frozen_string_literal: true module Leftovers # rubocop:disable Metrics/ModuleLength class Error < ::StandardError; end - module_function - autoload(:AST, "#{__dir__}/leftovers/ast") autoload(:Backports, "#{__dir__}/leftovers/backports") autoload(:CLI, "#{__dir__}/leftovers/cli") autoload(:Collector, "#{__dir__}/leftovers/collector") autoload(:ConfigValidator, "#{__dir__}/leftovers/config_validator") @@ -30,126 +28,131 @@ autoload(:DynamicProcessors, "#{__dir__}/leftovers/dynamic_processors") autoload(:ValueProcessors, "#{__dir__}/leftovers/value_processors") autoload(:VERSION, "#{__dir__}/leftovers/version") class << self - attr_accessor :parallel, :progress, :reporter + attr_accessor :parallel, :progress + attr_writer :reporter alias_method :parallel?, :parallel alias_method :progress?, :progress - end - def stdout - @stdout ||= $stdout - end + def stdout + @stdout ||= $stdout + end - def stderr - @stderr ||= $stderr - end + def stderr + @stderr ||= $stderr + end - def config - @config ||= Leftovers::MergedConfig.new(load_defaults: true) - end + def config + @config ||= Leftovers::MergedConfig.new(load_defaults: true) + end - def collector - @collector ||= Leftovers::Collector.new - end + def collector + @collector ||= Leftovers::Collector.new + end - def reporter - @reporter ||= Leftovers::Reporter.new - end + def reporter + @reporter ||= Leftovers::Reporter.new + end - def leftovers - @leftovers ||= begin - collector.collect - collector.definitions.reject(&:in_collection?) + def leftovers + @leftovers ||= begin + collector.collect + collector.definitions.reject(&:in_collection?) + end end - end - def run(stdout: StringIO.new, stderr: StringIO.new) # rubocop:disable Metrics/MethodLength - @stdout = stdout - @stderr = stderr - return reporter.report_success if leftovers.empty? + def run(stdout: StringIO.new, stderr: StringIO.new) # rubocop:disable Metrics/MethodLength + @stdout = stdout + @stderr = stderr + return reporter.report_success if leftovers.empty? - only_test = [] - none = [] - leftovers.sort_by(&:location_s).each do |definition| - if !definition.test? && definition.in_test_collection? - only_test << definition - else - none << definition + only_test = [] + none = [] + leftovers.sort_by(&:location_s).each do |definition| + if !definition.test? && definition.in_test_collection? + only_test << definition + else + none << definition + end end + + reporter.report(only_test: only_test, none: none) end - reporter.report(only_test: only_test, none: none) - end + def reset # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity + remove_instance_variable(:@config) if defined?(@config) + remove_instance_variable(:@collector) if defined?(@collector) + remove_instance_variable(:@reporter) if defined?(@reporter) + remove_instance_variable(:@leftovers) if defined?(@leftovers) + remove_instance_variable(:@try_require_cache) if defined?(@try_require_cache) + remove_instance_variable(:@stdout) if defined?(@stdout) + remove_instance_variable(:@stderr) if defined?(@stderr) + remove_instance_variable(:@parallel) if defined?(@parallel) + remove_instance_variable(:@pwd) if defined?(@pwd) + end - def reset # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity - remove_instance_variable(:@config) if defined?(@config) - remove_instance_variable(:@collector) if defined?(@collector) - remove_instance_variable(:@reporter) if defined?(@reporter) - remove_instance_variable(:@leftovers) if defined?(@leftovers) - remove_instance_variable(:@try_require) if defined?(@try_require) - remove_instance_variable(:@stdout) if defined?(@stdout) - remove_instance_variable(:@stderr) if defined?(@stderr) - remove_instance_variable(:@parallel) if defined?(@parallel) - remove_instance_variable(:@pwd) if defined?(@pwd) - end + def resolution_instructions_link + "https://github.com/robotdana/leftovers/tree/v#{Leftovers::VERSION}/README.md#how_to_resolve" + end - def resolution_instructions_link - "https://github.com/robotdana/leftovers/tree/v#{Leftovers::VERSION}/README.md#how_to_resolve" - end + def warn(message) + stderr.puts("\e[2K#{message}") + end - def warn(message) - stderr.puts("\e[2K#{message}") - end + def error(message) + warn(message) + exit 1 + end - def error(message) - warn(message) - exit 1 - end + def puts(message) + stdout.puts("\e[2K#{message}") + end - def puts(message) - stdout.puts("\e[2K#{message}") - end + def print(message) + stdout.print(message) + end - def print(message) - stdout.print(message) - end + def newline + stdout.puts('') + end - def newline - stdout.puts('') - end + def pwd + @pwd ||= Pathname.new(Dir.pwd + '/') + end - def pwd - @pwd ||= Pathname.new(Dir.pwd + '/') - end + def exit(status = 0) + throw :leftovers_exit, status + end - def exit(status = 0) - throw :leftovers_exit, status - end + def try_require(requirable, message: nil) + warn message if !try_require_cache(requirable) && message + try_require_cache(requirable) + end - def try_require(requirable, message: nil) # rubocop:disable Metrics/MethodLength - @try_require ||= {} + def each_or_self(value, &block) + return enum_for(__method__, value) unless block - @try_require[requirable] = begin - if @try_require.key?(requirable) - @try_require[requirable] - else - require requirable - true + case value + when nil then nil + when Array then value.each(&block) + else yield(value) end - rescue LoadError - false end - warn message if !@try_require[requirable] && message - @try_require[requirable] - end + private - def each_or_self(value, &block) - case value - when nil then nil - when Array then value.each(&block) - else yield(value) + def try_require_cache(requirable) + @try_require_cache ||= {} + + @try_require_cache.fetch(requirable) do + begin + require requirable + @try_require_cache[requirable] = true + rescue LoadError + @try_require_cache[requirable] = false + end + end end end end