Sha256: bf518ee942dd015157723fa13258aad69457c9a17d3223503933b63105d33f63

Contents?: true

Size: 1.71 KB

Versions: 101

Compression:

Stored size: 1.71 KB

Contents

require 'guard'
require 'guard/guard'

module Guard
  class RSpec < Guard
    autoload :Runner,    'guard/rspec/runner'
    autoload :Inspector, 'guard/rspec/inspector'

    def initialize(watchers = [], options = {})
      super
      @options = {
        :all_after_pass => true,
        :all_on_start   => true,
        :keep_failed    => true,
        :spec_paths     => ["spec"],
        :run_all        => {}
      }.merge(options)
      @last_failed  = false
      @failed_paths = []

      @inspector = Inspector.new(@options)
      @runner    = Runner.new(@options)
    end

    # Call once when guard starts
    def start
      UI.info "Guard::RSpec is running, with RSpec #{@runner.rspec_version}!"
      run_all if @options[:all_on_start]
    end

    def run_all
      passed = @runner.run(@options[:spec_paths], @options[:run_all].merge(:message => 'Running all specs'))

      unless @last_failed = !passed
        @failed_paths = []
      else
        throw :task_has_failed
      end
    end

    def reload
      @failed_paths = []
    end

    def run_on_change(paths)
      paths += @failed_paths if @options[:keep_failed]
      paths  = @inspector.clean(paths)

      if passed = @runner.run(paths)
        remove_failed(paths)

        # run all the specs if the run before this one failed
        if @last_failed && @options[:all_after_pass]
          @last_failed = false
          run_all
        end
      else
        @last_failed = true
        add_failed(paths)

        throw :task_has_failed
      end
    end

  private

    def remove_failed(paths)
      @failed_paths -= paths if @options[:keep_failed]
    end

    def add_failed(paths)
      @failed_paths += paths if @options[:keep_failed]
    end

  end
end

Version data entries

101 entries across 55 versions & 3 rubygems

Version Path
classiccms-0.7.5 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb
classiccms-0.7.5 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.7.4 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb
classiccms-0.7.4 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.7.3 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.7.3 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb
classiccms-0.7.2 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.7.2 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb
classiccms-0.7.1 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.7.1 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb
classiccms-0.7.0 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.7.0 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb
classiccms-0.6.9 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.6.9 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb
classiccms-0.6.8 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.6.8 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb
classiccms-0.6.7 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.6.7 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb
classiccms-0.6.6 vendor/bundle/gems/guard-rspec-0.7.0/lib/guard/rspec.rb
classiccms-0.6.6 vendor/bundle/gems/guard-rspec-0.7.2/lib/guard/rspec.rb