class Spec::Runner::Reporter

def backtrace_tweaker

def backtrace_tweaker
  @options.backtrace_tweaker
end

def dump

Dumps the summary and returns the total number of failures
def dump
  formatters.each{|f| f.start_dump}
  dump_pending
  dump_failures
  formatters.each do |f|
    f.dump_summary(duration, @example_count, @failures.length, @pending_count)
    f.close
  end
  @failures.length
end

def dump_failures

def dump_failures
  return if @failures.empty?
  @failures.inject(1) do |index, failure|
    formatters.each{|f| f.dump_failure(index, failure)}
    index + 1
  end
end

def dump_pending

def dump_pending
  formatters.each{|f| f.dump_pending}
end

def duration

def duration
  return @end_time - @start_time unless (@end_time.nil? or @start_time.nil?)
  return "0.0"
end

def end

def end
  @end_time = Time.new
end

def example_failed(example, error)

def example_failed(example, error)
  backtrace_tweaker.tweak_backtrace(error)
  failure = Failure.new(@example_group.description, example.description, error)
  @failures << failure
  formatters.each do |f|
    f.example_failed(example, @failures.length, failure)
  end
end

def example_finished(example, error=nil)

def example_finished(example, error=nil)
  @example_count += 1
  
  if error.nil?
    example_passed(example)
  elsif Spec::Example::ExamplePendingError === error
    example_pending(example, example.location, error.message)
  else
    example_failed(example, error)
  end
end

def example_group_started(example_group)

def example_group_started(example_group)
  @example_group = example_group
  formatters.each do |f|
    f.example_group_started(example_group)
  end
end

def example_passed(example)

def example_passed(example)
  formatters.each{|f| f.example_passed(example)}
end

def example_pending(example, ignore, message="Not Yet Implemented")

def example_pending(example, ignore, message="Not Yet Implemented")
  @pending_count += 1
  formatters.each do |formatter|
    if formatter_uses_deprecated_example_pending_method?(formatter)
      Spec.warn EXAMPLE_PENDING_DEPRECATION_WARNING
      formatter.example_pending(example, message, example.location)
    else
      formatter.example_pending(example, message)
    end
  end
end

def example_started(example)

def example_started(example)
  formatters.each{|f| f.example_started(example)}
end

def formatter_uses_deprecated_example_pending_method?(formatter)

def formatter_uses_deprecated_example_pending_method?(formatter)
  formatter.method(:example_pending).arity == 3
end

def formatters

def formatters
  @options.formatters
end

def initialize(options)

def initialize(options)
  @options = options
  @options.reporter = self
  @failures = []
  @pending_count = 0
  @example_count = 0
  @start_time = nil
  @end_time = nil
end

def start(number_of_examples)

def start(number_of_examples)
  @start_time = Time.new
  formatters.each{|f| f.start(number_of_examples)}
end