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

# File rspec-core/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
# File rspec-core/lib/rspec/core/example_status_persister.rb, line 18
def initialize(examples, file_name)
  @examples  = examples
  @file_name = file_name
end
# File rspec-core/lib/rspec/core/example_status_persister.rb, line 14
def self.persist(examples, file_name)
  new(examples, file_name).persist
end

Public Instance Methods

# File rspec-core/lib/rspec/core/example_status_persister.rb, line 23
def persist
  RSpec::Support::DirectoryMaker.mkdir_p(File.dirname(@file_name))
  File.open(@file_name, File::RDWR | File::CREAT) do |f|
    # lock the file while reading / persisting to avoid a race
    # condition where parallel or unrelated spec runs race to
    # update the same file
    f.flock(File::LOCK_EX)
    unparsed_previous_runs = f.read
    f.rewind
    f.write(dump_statuses(unparsed_previous_runs))
    f.flush
    f.truncate(f.pos)
  end
end