Module: Neospec::Report::Basic

Defined in:
lib/neospec/report/basic.rb

Class Method Summary collapse

Class Method Details

.call(results, output: $stdout) ⇒ Object



4
5
6
# File 'lib/neospec/report/basic.rb', line 4

def self.call(results, output: $stdout)
  output.puts "\n#{successes(results)}#{failures(results)}"
end

.failures(results) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/neospec/report/basic.rb', line 18

def self.failures(results)
  return if results.successful?

  output = "\n  Failures:\t#{results.failures.size}\n\n"
  output << "Failures:\n"

  results.specs.select { |spec| spec.failures.any? }.each do |spec|
    output << "  #{Neospec::Color::BLUE}== #{spec.description} ==#{Neospec::Color::RESET}\n"

    spec.failures.map do |failure|
      output << "    #{Neospec::Color::RED}-- #{failure.message} --#{Neospec::Color::RESET}\n"
      failure.stack.first(5).each do |location|
        output << "      > #{location}\n"
      end
      output << "\n"
    end
  end

  output.chomp("\n\n")
end

.formatted_duration(duration) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/neospec/report/basic.rb', line 39

def self.formatted_duration(duration)
  if duration < 1
    "#{(duration * 1000).round(2)} milliseconds"
  elsif duration < 60
    "#{duration.round(2)} seconds"
  elsif duration < 3600
    minutes = (duration / 60).to_i
    seconds = (duration % 60).to_i
    "#{minutes} minute#{"s" unless minutes == 1} #{seconds} second#{"s" unless seconds == 1}"
  elsif duration < 86400
    hours = (duration / 3600).to_i
    minutes = ((duration % 3600) / 60).to_i
    "#{hours} hour#{"s" unless hours == 1} #{minutes} minute#{"s" unless minutes == 1}"
  else
    days = (duration / 86400).to_i
    hours = ((duration % 86400) / 3600).to_i
    "#{days} day#{"s" unless days == 1} #{hours} hour#{"s" unless hours == 1}"
  end
end

.successes(results) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'lib/neospec/report/basic.rb', line 8

def self.successes(results)
  <<~STR.chomp
    Finished in #{formatted_duration(results.duration)}

    Results:
      Specs:\t#{results.specs.size}
      Expectations:\t#{results.expectations}
  STR
end