Class: Spec::Runner::CommandLine

Inherits:
Object
  • Object
show all
Defined in:
lib/spec/runner/command_line.rb

Overview

Facade to run specs without having to fork a new ruby process (using ‘spec …`)

Class Method Summary collapse

Class Method Details

.run(argv, err, out, exit = true, warn_if_no_files = true) ⇒ Object

Runs specs. argv is the commandline args as per the spec commandline API, err and out are the streams output will be written to. exit tells whether or not a system exit should be called after the specs are run and warn_if_no_files tells whether or not a warning (the help message) should be printed to err in case no files are specified.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/spec/runner/command_line.rb', line 12

def self.run(argv, err, out, exit=true, warn_if_no_files=true)
  old_context_runner = defined?($context_runner) ? $context_runner : nil
  $context_runner = OptionParser.new.create_context_runner(argv, err, out, warn_if_no_files)
  return if $context_runner.nil? # This is the case if we use --drb

  # If ARGV is a glob, it will actually each over each one of the matching files.
  argv.each do |file_or_dir|
    if File.directory?(file_or_dir)
      Dir["#{file_or_dir}/**/*.rb"].each do |file| 
        load file
      end
    elsif File.file?(file_or_dir)
      load file_or_dir
    else
      raise "File or directory not found: #{file_or_dir}"
    end
  end
  $context_runner.run(exit)
  $context_runner = old_context_runner
end