class SleepingKingStudios::Tasks::Ci::RSpecEachTask
Defines a Thor task for running the full RSpec test suite.
Public Class Methods
description()
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 16 def self.description 'Runs each spec file as an individual RSpec process.' end
task_name()
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 20 def self.task_name 'rspec_each' end
Public Instance Methods
call(*groups)
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 38 def call *groups mute! if quiet? files = files_list(groups) say "Running #{files.count} spec files..." say "\n" results = run_files(files) report_pending results report_failing results report_errored results report_totals results raw? ? results.to_h : results end
Private Instance Methods
aggregate_results(file, results, totals)
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 58 def aggregate_results file, results, totals if results.errored? totals['errored_files'] << file elsif results.failing? totals['failing_files'] << file elsif results.pending? totals['pending_files'] << file end # if-else totals['file_count'] += 1 end
build_totals()
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 70 def build_totals { 'pending_files' => [], 'failing_files' => [], 'errored_files' => [], 'file_count' => 0 } # end results end
default_format()
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 79 def default_format SleepingKingStudios::Tasks.configuration.ci.rspec_each. fetch(:format, :documentation) end
files_list(groups)
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 84 def files_list groups groups = %w[spec] if groups.empty? groups.map do |group_or_file| if File.extname(group_or_file).empty? Dir[File.join group_or_file, pattern] else [group_or_file] end # if-else end. # map flatten. uniq end
pattern()
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 98 def pattern '**{,/*/**}/*_spec.rb' end
report_errored(results)
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 102 def report_errored results return unless results.errored? say "\nErrored:\n\n" results.errored_files.each { |file| say " #{file}", :red } end
report_failing(results)
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 110 def report_failing results return unless results.failing? say "\nFailures:\n\n" results.failing_files.each { |file| say " #{file}", :red } end
report_pending(results)
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 118 def report_pending results return unless results.pending? say "\nPending:\n\n" results.pending_files.each { |file| say " #{file}", :yellow } end
report_totals(results)
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 126 def report_totals results say "\nFinished in #{results.duration.round(2)} seconds" if results.failing? || results.errored? say results.to_s, :red elsif results.pending? || results.empty? say results.to_s, :yellow else say results.to_s, :green end # if-elsif-else end
rspec_runner()
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 138 def rspec_runner RSpecRunner.new(:env => { :coverage => false }) end
run_file(file)
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 142 def run_file file opts = [] format = options.fetch('format', default_format) if format && !quiet? opts = %w[--color --tty] opts << "--format=#{format}" end # if results = rspec_runner.call(:files => [file], :options => opts) results = RSpecResults.new(results) say "#{set_color results_state(results), results_color(results)} #{file}" results end
run_files(files)
click to toggle source
# File lib/sleeping_king_studios/tasks/ci/rspec_each_task.rb, line 159 def run_files files start = Time.now totals = build_totals files.each { |file| aggregate_results(file, run_file(file), totals) } totals['duration'] = Time.now - start RSpecEachResults.new(totals) end