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