Sha256: 1c5c56e8a178bafed77e5b9ae04f846d9c4aa389fbcd5a6c24b3cd4cbf545438

Contents?: true

Size: 1.9 KB

Versions: 13

Compression:

Stored size: 1.9 KB

Contents

require "rspec/core"
require "pathname"

require "guard/rspec"

module Guard
  class RSpec < Plugin
    class Command < String
      FAILURE_EXIT_CODE = 2

      attr_accessor :paths, :options

      def initialize(paths, options = {})
        @paths = paths
        @options = options
        super(_parts.join(" "))
      end

      private

      def _parts
        parts = [options[:cmd]]
        parts << _visual_formatter
        parts << _guard_formatter
        parts << "--failure-exit-code #{FAILURE_EXIT_CODE}"
        parts << options[:cmd_additional_args] || ""

        parts << _paths(options).join(" ")
      end

      def _paths(options)
        return paths unless chdir = options[:chdir]
        paths.map { |path| path.sub(File.join(chdir, "/"), "") }
      end

      def _visual_formatter
        return if _cmd_include_formatter?
        _rspec_formatters || "-f progress"
      end

      def _rspec_formatters
        # RSpec::Core::ConfigurationOptions#parse_options method was renamed to
        # #options in rspec-core v3.0.0.beta2 so call the first one if
        # available. Fixes #249
        config = ::RSpec::Core::ConfigurationOptions.new([])
        config.parse_options if config.respond_to?(:parse_options)
        formatters = config.options[:formatters] || nil

        # RSpec's parser returns an array in the format
        #
        # [[formatter, output], ...],
        #
        # so match their format Construct a matching command line option,
        # including output target

        return formatters unless formatters
        formatters.map { |entries| "-f #{entries.join ' -o '}" }.join(" ")
      end

      def _cmd_include_formatter?
        options[:cmd] =~ /(?:^|\s)(?:-f\s*|--format(?:=|\s+))([\w:]+)/
      end

      def _guard_formatter
        dir = Pathname.new(__FILE__).dirname.dirname
        "-r #{dir + 'rspec_formatter.rb'} -f Guard::RSpecFormatter"
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 3 rubygems

Version Path
guard-rspec-4.6.5 lib/guard/rspec/command.rb
mastermind_adeybee-0.1.4 vendor/bundle/ruby/2.2.0/gems/guard-rspec-4.6.4/lib/guard/rspec/command.rb
mastermind_adeybee-0.1.3 vendor/bundle/ruby/2.2.0/gems/guard-rspec-4.6.4/lib/guard/rspec/command.rb
mastermind_adeybee-0.1.2 vendor/bundle/ruby/2.2.0/gems/guard-rspec-4.6.4/lib/guard/rspec/command.rb
mastermind_adeybee-0.1.1 vendor/bundle/ruby/2.2.0/gems/guard-rspec-4.6.4/lib/guard/rspec/command.rb
geminfo-0.1.0 path/gems/guard-rspec-4.6.4/lib/guard/rspec/command.rb
guard-rspec-4.6.4 lib/guard/rspec/command.rb
guard-rspec-4.6.3 lib/guard/rspec/command.rb
guard-rspec-4.6.2 lib/guard/rspec/command.rb
guard-rspec-4.6.1 lib/guard/rspec/command.rb
guard-rspec-4.6.0 lib/guard/rspec/command.rb
guard-rspec-4.5.2 lib/guard/rspec/command.rb
guard-rspec-4.5.1 lib/guard/rspec/command.rb