lib/respec/app.rb in respec-0.0.1 vs lib/respec/app.rb in respec-0.0.2
- old
+ new
@@ -7,20 +7,29 @@
else
@args = args
@raw_args = []
end
@formatter = 'progress'
- @output_failures = true
+ @selected_failures = false
+ @update_failures = true
process_args
end
def command
- @command ||= ['rspec'] + formatter_args + generated_args + raw_args
+ @command ||= bundler_args + ['rspec'] + formatter_args + generated_args + raw_args
end
+ def bundler_args
+ if File.exist?(ENV['BUNDLE_GEMFILE'] || 'Gemfile')
+ ['bundle', 'exec']
+ else
+ []
+ end
+ end
+
def formatter_args
- if @output_failures
+ if @update_failures
formatter_path = File.expand_path('formatter.rb', File.dirname(__FILE__))
['--require', formatter_path, '--format', 'Respec::Formatter', '--out', failures_path, '--format', @formatter]
else
[]
end
@@ -76,10 +85,11 @@
abort "No specs failed!"
else
failures.each do |line|
args << line.strip
end
+ @selected_failures = true
end
else
warn "no fail file - ignoring 'f' argument"
end
elsif arg == 's'
@@ -88,18 +98,22 @@
args << '--diff' << 'context'
elsif arg =~ /\A\d+\z/
i = Integer(arg)
if (failure = failures[i - 1])
args << failure
- @output_failures = false
+ @selected_failures = true
+ @update_failures = false
else
warn "invalid failure: #{i} for (1..#{failures.size})"
end
else
args << '--example' << arg.gsub(/[$]/, '\\\\\\0')
end
end
- @generated_args = args + files
+ # If we selected individual failures to rerun, don't give the
+ # files to rspec, as those files will be run in entirety.
+ @generated_args = args
+ @generated_args.concat(files) unless @selected_failures
end
def failures_path
self.class.failures_path
end