mirror of
https://github.com/TracksApp/tracks.git
synced 2025-09-22 05:50:47 +02:00
117 lines
3.3 KiB
Text
117 lines
3.3 KiB
Text
![]() |
#!/usr/bin/env ruby
|
||
|
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../vendor/plugins/rspec/lib' # For rspec installed as plugin
|
||
|
require 'rubygems'
|
||
|
require 'drb/drb'
|
||
|
require 'rbconfig'
|
||
|
require 'spec'
|
||
|
require 'optparse'
|
||
|
|
||
|
# This is based on Florian Weber's TDDMate
|
||
|
module Spec
|
||
|
module Runner
|
||
|
class RailsSpecServer
|
||
|
def run(argv, stderr, stdout)
|
||
|
$stdout = stdout
|
||
|
$stderr = stderr
|
||
|
|
||
|
base = ActiveRecord::Base
|
||
|
def base.clear_reloadable_connections!
|
||
|
active_connections.each do |name, conn|
|
||
|
if conn.requires_reloading?
|
||
|
conn.disconnect!
|
||
|
active_connections.delete(name)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if ActionController.const_defined?(:Dispatcher)
|
||
|
dispatcher = ::ActionController::Dispatcher.new($stdout)
|
||
|
dispatcher.cleanup_application
|
||
|
elsif ::Dispatcher.respond_to?(:reset_application!)
|
||
|
::Dispatcher.reset_application!
|
||
|
else
|
||
|
raise "Application reloading failed"
|
||
|
end
|
||
|
if Object.const_defined?(:Fixtures) && Fixtures.respond_to?(:reset_cache)
|
||
|
Fixtures.reset_cache
|
||
|
end
|
||
|
|
||
|
::Dependencies.mechanism = :load
|
||
|
require_dependency('application.rb') unless Object.const_defined?(:ApplicationController)
|
||
|
load File.dirname(__FILE__) + '/../spec/spec_helper.rb'
|
||
|
|
||
|
if in_memory_database?
|
||
|
load "#{RAILS_ROOT}/db/schema.rb" # use db agnostic schema by default
|
||
|
ActiveRecord::Migrator.up('db/migrate') # use migrations
|
||
|
end
|
||
|
|
||
|
::Spec::Runner::CommandLine.run(
|
||
|
::Spec::Runner::OptionParser.parse(
|
||
|
argv,
|
||
|
$stderr,
|
||
|
$stdout
|
||
|
)
|
||
|
)
|
||
|
end
|
||
|
|
||
|
def in_memory_database?
|
||
|
ENV["RAILS_ENV"] == "test" and
|
||
|
::ActiveRecord::Base.connection.class.to_s == "ActiveRecord::ConnectionAdapters::SQLite3Adapter" and
|
||
|
::Rails::Configuration.new.database_configuration['test']['database'] == ':memory:'
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
puts "Loading Rails environment"
|
||
|
|
||
|
ENV["RAILS_ENV"] = "test"
|
||
|
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
|
||
|
require 'dispatcher'
|
||
|
|
||
|
def restart_test_server
|
||
|
puts "restarting"
|
||
|
config = ::Config::CONFIG
|
||
|
ruby = File::join(config['bindir'], config['ruby_install_name']) + config['EXEEXT']
|
||
|
command_line = [ruby, $0, ARGV].flatten.join(' ')
|
||
|
exec(command_line)
|
||
|
end
|
||
|
|
||
|
def daemonize(pid_file = nil)
|
||
|
return yield if $DEBUG
|
||
|
pid = Process.fork{
|
||
|
Process.setsid
|
||
|
Dir.chdir(RAILS_ROOT)
|
||
|
trap("SIGINT"){ exit! 0 }
|
||
|
trap("SIGTERM"){ exit! 0 }
|
||
|
trap("SIGHUP"){ restart_test_server }
|
||
|
File.open("/dev/null"){|f|
|
||
|
STDERR.reopen f
|
||
|
STDIN.reopen f
|
||
|
STDOUT.reopen f
|
||
|
}
|
||
|
yield
|
||
|
}
|
||
|
puts "spec_server launched. (PID: %d)" % pid
|
||
|
File.open(pid_file,"w"){|f| f.puts pid } if pid_file
|
||
|
exit! 0
|
||
|
end
|
||
|
|
||
|
options = Hash.new
|
||
|
opts = OptionParser.new
|
||
|
opts.on("-d", "--daemon"){|v| options[:daemon] = true }
|
||
|
opts.on("-p", "--pid PIDFILE"){|v| options[:pid] = v }
|
||
|
opts.parse!(ARGV)
|
||
|
|
||
|
puts "Ready"
|
||
|
exec_server = lambda {
|
||
|
trap("USR2") { restart_test_server } if Signal.list.has_key?("USR2")
|
||
|
DRb.start_service("druby://127.0.0.1:8989", Spec::Runner::RailsSpecServer.new)
|
||
|
DRb.thread.join
|
||
|
}
|
||
|
|
||
|
if options[:daemon]
|
||
|
daemonize(options[:pid], &exec_server)
|
||
|
else
|
||
|
exec_server.call
|
||
|
end
|