# frozen_string_literal: true desc 'Runs rspec for recently changed files' task quick_rspec: :environment do
dry = ENV['DRY'].present? QuickRspec.load_stats changed = [] specs = [] files = `git diff --name-only`.split("\n") files.select! { |file| file =~ %r{^(app|lib|config|spec)\/.*\.rb}i } files.each do |file| if file =~ %r{^spec\/}i specs << file else changed << file end end run_all = false specs += files.map do |file| files = QuickRspec.where_tested(file) run_all ||= files.empty? files end.flatten.compact specs.uniq! puts "Changed files:\n#{changed.map { |file| " #{file}" }.join("\n")}\n" if run_all puts "It requires to run all tests\n\n" system('rspec') unless dry else puts "Run specs:\n#{specs.map { |file| " #{file}" }.join("\n")}\n\n" system("rspec #{specs.join(' ')}") unless dry end
end