Class: RSpec::ProgressTable::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec/progress_table/server.rb

Defined Under Namespace

Classes: Progress

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(output = $stdout) ⇒ Server

Returns a new instance of Server.



16
17
18
19
20
21
22
23
24
25
# File 'lib/rspec/progress_table/server.rb', line 16

def initialize(output = $stdout)
  @progresses = Concurrent::Map.new {|m, pid|
    m[pid] = Progress.new(pid, 0, 0, 0, 0)
  }
  @previous_rendered_lines = 0
  @output = output
  @queue_size = 0
  @number_of_queue_shifted = 0
  @show_total = false
end

Instance Attribute Details

#number_of_queue_shiftedObject (readonly)

Returns the value of attribute number_of_queue_shifted.



9
10
11
# File 'lib/rspec/progress_table/server.rb', line 9

def number_of_queue_shifted
  @number_of_queue_shifted
end

#outputObject (readonly)

Returns the value of attribute output.



9
10
11
# File 'lib/rspec/progress_table/server.rb', line 9

def output
  @output
end

#previous_rendered_linesObject

Returns the value of attribute previous_rendered_lines.



10
11
12
# File 'lib/rspec/progress_table/server.rb', line 10

def previous_rendered_lines
  @previous_rendered_lines
end

#progressesObject (readonly)

Returns the value of attribute progresses.



9
10
11
# File 'lib/rspec/progress_table/server.rb', line 9

def progresses
  @progresses
end

#queue_sizeObject (readonly)

Returns the value of attribute queue_size.



9
10
11
# File 'lib/rspec/progress_table/server.rb', line 9

def queue_size
  @queue_size
end

#show_totalObject (readonly)

Returns the value of attribute show_total.



9
10
11
# File 'lib/rspec/progress_table/server.rb', line 9

def show_total
  @show_total
end

Class Method Details

.start(url = DEFAULT_SERVER_URL) ⇒ Object



12
13
14
# File 'lib/rspec/progress_table/server.rb', line 12

def self.start(url = DEFAULT_SERVER_URL)
  DRb.start_service(url, new)
end

Instance Method Details

#dump(s) ⇒ Object



47
48
49
50
# File 'lib/rspec/progress_table/server.rb', line 47

def dump(s)
  puts s
  self.previous_rendered_lines = 0
end

#failed(pid) ⇒ Object



32
33
34
35
# File 'lib/rspec/progress_table/server.rb', line 32

def failed(pid)
  progresses[pid].failed += 1
  render
end

#passed(pid) ⇒ Object



27
28
29
30
# File 'lib/rspec/progress_table/server.rb', line 27

def passed(pid)
  progresses[pid].passed += 1
  render
end

#pending(pid) ⇒ Object



37
38
39
40
# File 'lib/rspec/progress_table/server.rb', line 37

def pending(pid)
  progresses[pid].pending += 1
  render
end

#queue_shiftedObject



56
57
58
# File 'lib/rspec/progress_table/server.rb', line 56

def queue_shifted
  @number_of_queue_shifted += 1
end

#renderObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/rspec/progress_table/server.rb', line 60

def render
  table = TTY::Table.new(header: %w(PID Passed Failed Pending) + (show_total ? ["Total"] : []))
  progresses.each_value do |progress|
    table << (
      [
        progress.pid,
        RSpec::Core::Formatters::ConsoleCodes.wrap(progress.passed, :success),
        RSpec::Core::Formatters::ConsoleCodes.wrap(progress.failed, :failure),
        RSpec::Core::Formatters::ConsoleCodes.wrap(progress.pending, :pending),
      ] + (show_total ? [progress.total] : [])
    )
  end

  s = table.render(:unicode, padding: [0, 1, 0, 1], alignments: [:left, :right, :right, :right, :right])
  line_count = s.lines.count

  output.write("\e[1A" * previous_rendered_lines) if previous_rendered_lines > 0
  output.puts(s)

  unless queue_size.zero?
    r = format("%.2f", number_of_queue_shifted / queue_size.to_f * 100)
    puts "Queue: #{number_of_queue_shifted} / #{queue_size} (#{r}%)"
    line_count += 1
  end
  self.previous_rendered_lines = line_count
end

#update_queue_size(n) ⇒ Object



52
53
54
# File 'lib/rspec/progress_table/server.rb', line 52

def update_queue_size(n)
  @queue_size = n
end

#update_total(pid, n) ⇒ Object



42
43
44
45
# File 'lib/rspec/progress_table/server.rb', line 42

def update_total(pid, n)
  progresses[pid].total = n
  @show_total = true if n > 0
end