Class Spec::Runner::Options
In: lib/spec/runner/options.rb
Parent: Object

Methods

Constants

BUILT_IN_FORMATTERS = { 'specdoc' => Formatter::SpecdocFormatter, 's' => Formatter::SpecdocFormatter, 'html' => Formatter::HtmlFormatter, 'h' => Formatter::HtmlFormatter, 'rdoc' => Formatter::RdocFormatter, 'r' => Formatter::RdocFormatter, 'progress' => Formatter::ProgressBarFormatter, 'p' => Formatter::ProgressBarFormatter, 'failing_examples' => Formatter::FailingExamplesFormatter, 'e' => Formatter::FailingExamplesFormatter, 'failing_behaviours' => Formatter::FailingBehavioursFormatter, 'b' => Formatter::FailingBehavioursFormatter

Attributes

backtrace_tweaker  [RW] 
behaviour_runner  [RW] 
colour  [RW] 
context_lines  [RW] 
diff_format  [RW] 
differ_class  [RW] 
dry_run  [RW] 
examples  [RW] 
failure_file  [RW] 
formatters  [RW] 
generate  [RW] 
heckle_runner  [RW] 
line_number  [RW] 
loadby  [RW] 
reporter  [RW] 
reverse  [RW] 
runner_arg  [RW] 
timeout  [RW] 
verbose  [RW] 

Public Class methods

[Source]

    # File lib/spec/runner/options.rb, line 41
41:       def initialize(err, out)
42:         @err, @out = err, out
43:         @backtrace_tweaker = QuietBacktraceTweaker.new
44:         @examples = []
45:         @formatters = []
46:         @colour = false
47:         @dry_run = false
48:       end

Public Instance methods

[Source]

    # File lib/spec/runner/options.rb, line 50
50:       def configure
51:         configure_formatters
52:         create_reporter
53:         configure_differ
54:         create_behaviour_runner
55:       end

[Source]

    # File lib/spec/runner/options.rb, line 79
79:       def configure_differ
80:         if @differ_class
81:           Spec::Expectations.differ = @differ_class.new(@diff_format, @context_lines, @colour)
82:         end
83:       end

[Source]

    # File lib/spec/runner/options.rb, line 68
68:       def configure_formatters
69:         @formatters.each do |formatter|
70:           formatter.colour = @colour if formatter.respond_to?(:colour=)
71:           formatter.dry_run = @dry_run if formatter.respond_to?(:dry_run=)
72:         end
73:       end

[Source]

    # File lib/spec/runner/options.rb, line 57
57:       def create_behaviour_runner
58:         return nil if @generate
59:         @behaviour_runner = if @runner_arg
60:           klass_name, arg = split_at_colon(@runner_arg)
61:           runner_type = load_class(klass_name, 'behaviour runner', '--runner')
62:           runner_type.new(self, arg)
63:         else
64:           BehaviourRunner.new(self)
65:         end
66:       end

[Source]

    # File lib/spec/runner/options.rb, line 75
75:       def create_reporter
76:         @reporter = Reporter.new(@formatters, @backtrace_tweaker)
77:       end

[Source]

     # File lib/spec/runner/options.rb, line 156
156:       def load_class(name, kind, option)
157:         if name =~ /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/
158:           arg = $2 == "" ? nil : $2
159:           [$1, arg]
160:         else
161:           m = "#{name.inspect} is not a valid class name"
162:           @err.puts m
163:           raise m
164:         end
165:         begin
166:           eval(name, binding, __FILE__, __LINE__)
167:         rescue NameError => e
168:           @err.puts "Couldn't find #{kind} class #{name}"
169:           @err.puts "Make sure the --require option is specified *before* #{option}"
170:           if $_spec_spec ; raise e ; else exit(1) ; end
171:         end
172:       end

[Source]

     # File lib/spec/runner/options.rb, line 85
 85:       def parse_diff(format)
 86:         @context_lines = 3
 87:         case format
 88:           when :context, 'context', 'c'
 89:             @diff_format  = :context
 90:           when :unified, 'unified', 'u', '', nil
 91:             @diff_format  = :unified
 92:         end
 93: 
 94:         if [:context,:unified].include? @diff_format
 95:           require 'spec/expectations/differs/default'
 96:           @differ_class = Spec::Expectations::Differs::Default
 97:         else
 98:           @diff_format  = :custom
 99:           @differ_class = load_class(format, 'differ', '--diff')
100:         end
101:       end

[Source]

     # File lib/spec/runner/options.rb, line 103
103:       def parse_example(example)
104:         if(File.file?(example))
105:           @examples = File.open(example).read.split("\n")
106:         else
107:           @examples = [example]
108:         end
109:       end

[Source]

     # File lib/spec/runner/options.rb, line 111
111:       def parse_format(format_arg)
112:         format, where = split_at_colon(format_arg)
113:         # This funky regexp checks whether we have a FILE_NAME or not
114:         if where.nil?
115:           raise "When using several --format options only one of them can be without a file" if @out_used
116:           where = @out
117:           @out_used = true
118:         end
119: 
120:         formatter_type = BUILT_IN_FORMATTERS[format] || load_class(format, 'formatter', '--format')
121:         @formatters << formatter_type.new(where)
122:       end

[Source]

     # File lib/spec/runner/options.rb, line 134
134:       def parse_generate_options(options_file, args_copy, out_stream)
135:         # Remove the --generate-options option and the argument before writing to file
136:         index = args_copy.index("-G") || args_copy.index("--generate-options")
137:         args_copy.delete_at(index)
138:         args_copy.delete_at(index)
139:         File.open(options_file, 'w') do |io|
140:           io.puts args_copy.join("\n")
141:         end
142:         out_stream.puts "\nOptions written to #{options_file}. You can now use these options with:"
143:         out_stream.puts "spec --options #{options_file}"
144:         @generate = true
145:       end

[Source]

     # File lib/spec/runner/options.rb, line 128
128:       def parse_heckle(heckle)
129:         heckle_require = [/mswin/, /java/].detect{|p| p =~ RUBY_PLATFORM} ? 'spec/runner/heckle_runner_unsupported' : 'spec/runner/heckle_runner'
130:         require heckle_require
131:         @heckle_runner = HeckleRunner.new(heckle)
132:       end

[Source]

     # File lib/spec/runner/options.rb, line 124
124:       def parse_require(req)
125:         req.split(",").each{|file| require file}
126:       end

[Source]

     # File lib/spec/runner/options.rb, line 147
147:       def split_at_colon(s)
148:         if s =~ /([a-zA-Z_]+(?:::[a-zA-Z_]+)*):?(.*)/
149:           arg = $2 == "" ? nil : $2
150:           [$1, arg]
151:         else
152:           raise "Couldn't parse #{s.inspect}"
153:         end
154:       end

[Validate]