class RSpec::Core::ExampleStatusPersister

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

def self.load_from(file_name)

def self.load_from(file_name)
  return [] unless File.exist?(file_name)
  ExampleStatusParser.parse(File.read(file_name))
end

def self.persist(examples, file_name)

def self.persist(examples, file_name)
  new(examples, file_name).persist
end

def dumped_statuses

def dumped_statuses
  ExampleStatusDumper.dump(merged_statuses)
end

def initialize(examples, file_name)

def initialize(examples, file_name)
  @examples  = examples
  @file_name = file_name
end

def merged_statuses

def merged_statuses
  ExampleStatusMerger.merge(statuses_from_this_run, statuses_from_previous_runs)
end

def persist

def persist
  write dumped_statuses
end

def statuses_from_previous_runs

def statuses_from_previous_runs
  self.class.load_from(@file_name)
end

def statuses_from_this_run

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

def write(statuses)

def write(statuses)
  RSpec::Support::DirectoryMaker.mkdir_p(File.dirname(@file_name))
  File.open(@file_name, "w") { |f| f.write(statuses) }
end