class RSpecLive::Suite

Public Class Methods

new(runner, file_watcher) click to toggle source
# File lib/rspec-live/suite.rb, line 5
def initialize(runner, file_watcher)
  @runner = runner
  @file_watcher = file_watcher
  @examples = {}
end

Public Instance Methods

activity_status() click to toggle source
# File lib/rspec-live/suite.rb, line 38
def activity_status
  run_count = stale_example_names.count
  run_count.zero? ? "watching for updates..." : "running #{example_count run_count}"
end
example_count(number) click to toggle source
# File lib/rspec-live/suite.rb, line 50
def example_count(number)
  "#{number} example" + (number == 1 ? "" : "s")
end
ordered_example_names() click to toggle source
# File lib/rspec-live/suite.rb, line 62
def ordered_example_names
  example_names.sort_by do |name|
    file, line = name.split(":")
    line = line.rjust(8, "0")
    [file, line].join(":")
  end
end
ordered_examples() click to toggle source
# File lib/rspec-live/suite.rb, line 54
def ordered_examples
  ordered_example_names.map { |name| @examples[name] }
end
process_updates() click to toggle source
# File lib/rspec-live/suite.rb, line 11
def process_updates
  any_processed = need_inventory = false
  @file_watcher.updated.each do |path|
    @examples.values.each { |example| example.file_touched path }
    @examples.delete_if { |name, example| example.in_file? path }
    any_processed = need_inventory = true
  end
  @file_watcher.removed.each do |path|
    @examples.delete_if { |name, example| example.in_file? path }
    any_processed = true
  end
  if @examples.empty? || @file_watcher.added.any?
    any_processed = need_inventory = true
  end
  @runner.request_inventory(need_inventory)
  @runner.request_results stale_example_names
  @runner.results.each do |result|
    update_or_create_example result
    any_processed = true
  end
  any_processed
end
reset() click to toggle source
# File lib/rspec-live/suite.rb, line 58
def reset
  @examples = {}
end
stale_example_names() click to toggle source
# File lib/rspec-live/suite.rb, line 34
def stale_example_names
  @examples.values.select(&:stale?).map(&:name)
end
summary() click to toggle source
# File lib/rspec-live/suite.rb, line 43
def summary
  passed = ordered_examples.select(&:passed?).length
  total = ordered_examples.length
  percent = total.zero? ? 0 : (100*passed/total.to_f).round
  "#{passed} of #{example_count total} passed (#{percent}%)"
end

Private Instance Methods

example_names() click to toggle source
# File lib/rspec-live/suite.rb, line 79
def example_names
  @examples.keys
end
update_or_create_example(data) click to toggle source
# File lib/rspec-live/suite.rb, line 72
def update_or_create_example(data)
  name = data["name"]
  @examples[name] ||= Example.new
  @examples[name].update data
  @examples[name]
end