module Crabfarm::Utils::RSpecRunner

Public Instance Methods

run_single_spec_for(_target, _tag=nil) click to toggle source
# File lib/crabfarm/utils/rspec_runner.rb, line 14
def run_single_spec_for(_target, _tag=nil)
  setup_rspec_once

  begin
    configuration.reset

    runner = ::RSpec::Core::Runner.new config_options(_target)
    runner.setup $stderr, $stdout
    example = skip_all_but_one _tag
    runner.run_specs(world.ordered_example_groups)

    example
  ensure
    ::RSpec.clear_examples
  end
end

Private Instance Methods

config_options(_target) click to toggle source
# File lib/crabfarm/utils/rspec_runner.rb, line 48
def config_options(_target)
  ::RSpec::Core::ConfigurationOptions.new [
      _target,
      '-f','Crabfarm::Utils::RSpecRunner::SilentFormatter'
  ]
end
configuration() click to toggle source
# File lib/crabfarm/utils/rspec_runner.rb, line 37
def configuration
  ::RSpec.configuration
end
is_better_example?(_new, _old, _tag) click to toggle source
# File lib/crabfarm/utils/rspec_runner.rb, line 69
def is_better_example?(_new, _old, _tag)
  return true if _old.nil?

  if _tag
    new_tagged = !!(_new.metadata[_tag])
    old_tagged = !!(_old.metadata[_tag])

    # preffer tagged
    return new_tagged if new_tagged != old_tagged
  end

  # preffer higher line number
  return _new.metadata[:line_number] > _old.metadata[:line_number]
end
setup_rspec_once() click to toggle source
# File lib/crabfarm/utils/rspec_runner.rb, line 41
def setup_rspec_once
  unless @ready
    ::RSpec::Core::Formatters.register SilentFormatter
    @ready = true
  end
end
skip_all_but_one(_tag) click to toggle source
# File lib/crabfarm/utils/rspec_runner.rb, line 55
def skip_all_but_one(_tag)
  best_example = world.all_examples.inject(nil) do |best, example|
    example.metadata[:skip] = true
    if is_better_example? example, best, _tag
      example
    else
      best
    end
  end

  best_example.metadata[:skip] = false if best_example
  best_example
end
world() click to toggle source
# File lib/crabfarm/utils/rspec_runner.rb, line 33
def world
  ::RSpec.world
end