thoughtbot--shoulda-matchers/custom_plan.rb

89 lines
1.7 KiB
Ruby

require 'zeus/rails'
require_relative 'spec/support/tests/current_bundle'
class CustomPlan < Zeus::Plan
def initialize
super
@rails_plan = Zeus::Rails.new
end
def boot
ENV['BUNDLE_GEMFILE'] = File.expand_path(
"../gemfiles/#{latest_appraisal}.gemfile",
__FILE__
)
require 'bundler/setup'
$LOAD_PATH << File.expand_path('../lib', __FILE__)
$LOAD_PATH << File.expand_path('../spec', __FILE__)
require_relative 'spec/support/unit/load_environment'
end
def after_fork
# @rails_plan.reconnect_activerecord
end
def test_environment
require_relative 'spec/unit_spec_helper'
end
def rspec
ARGV.replace(file_paths_to_run)
RSpec::Core::Runner.invoke
end
private
def latest_appraisal
current_bundle.latest_appraisal
end
def current_bundle
Tests::CurrentBundle.instance
end
def file_paths_to_run
if given_file_paths.empty?
['spec/unit']
else
given_file_paths.map do |given_path|
determine_file_path_to_run(given_path)
end
end
end
def determine_file_path_to_run(given_rspec_argument)
expanded_file_path, location =
expand_rspec_argument(given_rspec_argument)
if File.exist?(expanded_file_path)
if location
expanded_file_path + location
else
expanded_file_path
end
else
given_rspec_argument
end
end
def expand_rspec_argument(rspec_argument)
match = rspec_argument.match(/\A(.+?)(:\d+|\[[\d:]+\])?\Z/)
file_path, location = match.captures
expanded_file_path = File.expand_path(
"../spec/unit/shoulda/matchers/#{file_path}",
__FILE__
)
[expanded_file_path, location]
end
def given_file_paths
ARGV
end
end
Zeus.plan = CustomPlan.new