module Spec::Story::Runner

def create_story_runner

def create_story_runner
  Runner::StoryRunner.new(scenario_runner, world_creator)
end

def dry_run

def dry_run
  run_options.dry_run
end

def register_exit_hook # :nodoc:

:nodoc:
def register_exit_hook # :nodoc:
  at_exit do
    exit Runner.story_runner.run_stories unless $!
  end
end

def register_listener(listener)

Use this to register a customer output formatter.
def register_listener(listener)
  story_runner.add_listener(listener) # run_started, story_started, story_ended, #run_ended
  world_creator.add_listener(listener) # found_scenario, step_succeeded, step_failed, step_failed
  scenario_runner.add_listener(listener) # scenario_started, scenario_succeeded, scenario_pending, scenario_failed
end

def run_options # :nodoc:

:nodoc:
def run_options # :nodoc:
  Spec::Runner.options
end

def scenario_runner # :nodoc:

:nodoc:
def scenario_runner # :nodoc:
  @scenario_runner ||= ScenarioRunner.new
end

def story_runner # :nodoc:

:nodoc:
def story_runner # :nodoc:
  unless @story_runner
    @story_runner = create_story_runner
    run_options.story_formatters.each do |formatter|
      register_listener(formatter)
    end
    self.register_exit_hook
  end
  @story_runner
end

def world_creator # :nodoc:

:nodoc:
def world_creator # :nodoc:
  @world_creator ||= World
end