class RSpec::Core::ExampleStatusPersister

Persists example ids and their statuses so that we can filter to just the ones that failed the last time they ran. @private

Public Class Methods

load_from(file_name) click to toggle source
# File lib/rspec/core/example_status_persister.rb, line 9
def self.load_from(file_name)
  return [] unless File.exist?(file_name)
  ExampleStatusParser.parse(File.read(file_name))
end
new(examples, file_name) click to toggle source
# File lib/rspec/core/example_status_persister.rb, line 18
def initialize(examples, file_name)
  @examples  = examples
  @file_name = file_name
end
persist(examples, file_name) click to toggle source
# File lib/rspec/core/example_status_persister.rb, line 14
def self.persist(examples, file_name)
  new(examples, file_name).persist
end

Public Instance Methods

persist() click to toggle source
# File lib/rspec/core/example_status_persister.rb, line 23
def persist
  write dumped_statuses
end

Private Instance Methods

dumped_statuses() click to toggle source
# File lib/rspec/core/example_status_persister.rb, line 34
def dumped_statuses
  ExampleStatusDumper.dump(merged_statuses)
end
merged_statuses() click to toggle source
# File lib/rspec/core/example_status_persister.rb, line 38
def merged_statuses
  ExampleStatusMerger.merge(statuses_from_this_run, statuses_from_previous_runs)
end
statuses_from_previous_runs() click to toggle source
# File lib/rspec/core/example_status_persister.rb, line 54
def statuses_from_previous_runs
  self.class.load_from(@file_name)
end
statuses_from_this_run() click to toggle source
# File lib/rspec/core/example_status_persister.rb, line 42
def statuses_from_this_run
  @examples.map do |ex|
    result = ex.execution_result

    {
      :example_id => ex.id,
      :status     => result.status ? result.status.to_s : Configuration::UNKNOWN_STATUS,
      :run_time   => result.run_time ? Formatters::Helpers.format_duration(result.run_time) : ""
    }
  end
end
write(statuses) click to toggle source
# File lib/rspec/core/example_status_persister.rb, line 29
def write(statuses)
  RSpec::Support::DirectoryMaker.mkdir_p(File.dirname(@file_name))
  File.open(@file_name, "w") { |f| f.write(statuses) }
end