77 lines
2.0 KiB
Ruby
77 lines
2.0 KiB
Ruby
#!/usr/bin/env ruby
|
|
#
|
|
# warmsnake.rb
|
|
#
|
|
# This is a first attempt at making a hydra binary.
|
|
#
|
|
# Currently, all it does is run the files you pass into it. When you
|
|
# press Enter it will run them again, maintaining your rails environment.
|
|
# When you type 'r' and hit Enter it will reboot the rails environment.
|
|
#
|
|
# It is extremely specific about its behavior and only works in rails.
|
|
#
|
|
# It is not really ready for any kind of release, but it is useful, so
|
|
# it's included.
|
|
#
|
|
require 'rubygems'
|
|
require 'hydra'
|
|
|
|
@files = ARGV.inject([]){|memo,f| memo += Dir.glob f}
|
|
|
|
if @files.empty?
|
|
puts "You must specify a list of files to run"
|
|
puts "If you specify a pattern, it must be in quotes"
|
|
puts %{USAGE: #{$0} test/unit/my_test.rb "test/functional/**/*_test.rb"}
|
|
exit(1)
|
|
end
|
|
|
|
Signal.trap("TERM", "KILL") do
|
|
puts "Warm Snake says bye bye"
|
|
exit(0)
|
|
end
|
|
|
|
bold_yellow = "\033[1;33m"
|
|
reset = "\033[0m"
|
|
|
|
|
|
loop do
|
|
env_proc = Process.fork do
|
|
puts "#{bold_yellow}Booting Environment#{reset}"
|
|
start = Time.now
|
|
ENV['RAILS_ENV']='test'
|
|
require 'config/environment'
|
|
require 'test/test_helper'
|
|
finish = Time.now
|
|
puts "#{bold_yellow}Environment Booted (#{finish-start})#{reset}"
|
|
|
|
loop do
|
|
puts "#{bold_yellow}Running#{reset} [#{@files.inspect}]"
|
|
start = Time.now
|
|
Hydra::Master.new(
|
|
:files => @files.dup,
|
|
:listeners => Hydra::Listener::ProgressBar.new(STDOUT),
|
|
:workers => [{:type => :local, :runners => 4}]
|
|
)
|
|
finish = Time.now
|
|
puts "#{bold_yellow}Tests finished#{reset} (#{finish-start})"
|
|
|
|
puts ""
|
|
|
|
$stdout.write "Press #{bold_yellow}ENTER#{reset} to retest. Type #{bold_yellow}r#{reset} then hit enter to reboot environment. #{bold_yellow}CTRL-C#{reset} to quit\n> "
|
|
begin
|
|
command = $stdin.gets
|
|
rescue Interrupt
|
|
exit(0)
|
|
end
|
|
break if !command.nil? and command.chomp == "r"
|
|
end
|
|
end
|
|
begin
|
|
Process.wait env_proc
|
|
rescue Interrupt
|
|
puts "\n#{bold_yellow}SSsssSsssSSssSs#{reset}"
|
|
break
|
|
end
|
|
end
|
|
|