Compare commits

..

No commits in common. "master" and "linux-support" have entirely different histories.

9 changed files with 57 additions and 95 deletions

1
.gitignore vendored
View File

@ -2,4 +2,3 @@
.bundle .bundle
Gemfile.lock Gemfile.lock
pkg/* pkg/*
.rvmrc

View File

@ -2,17 +2,17 @@ source "http://rubygems.org"
# Specify your gem's dependencies in guard-rails.gemspec # Specify your gem's dependencies in guard-rails.gemspec
gemspec gemspec
gem 'rake' gem 'rake', '0.8.7'
gem 'fakefs', :require => nil gem 'fakefs', :require => nil
gem 'guard' gem 'guard', :git => 'https://github.com/guard/guard.git'
gem 'guard-rspec' gem 'guard-rspec'
require 'rbconfig' require 'rbconfig'
if RbConfig::CONFIG['target_os'] =~ /darwin/i if Config::CONFIG['target_os'] =~ /darwin/i
gem 'rb-fsevent', '>= 0.3.9' gem 'rb-fsevent', '>= 0.3.9'
gem 'growl', '~> 1.0.3' gem 'growl', '~> 1.0.3'
end end
if RbConfig::CONFIG['target_os'] =~ /linux/i if Config::CONFIG['target_os'] =~ /linux/i
gem 'rb-inotify', '>= 0.5.1' gem 'rb-inotify', '>= 0.5.1'
gem 'libnotify', '~> 0.1.3' gem 'libnotify', '~> 0.1.3'
end end

View File

@ -1,5 +1,3 @@
_This fork is no longer maintained. Visit [https://github.com/ranmocy/guard-rails](https://github.com/ranmocy/guard-rails) for the current official fork._
[![Build Status](http://travis-ci.org/johnbintz/guard-rails.png)](http://travis-ci.org/johnbintz/guard-rails) [![Build Status](http://travis-ci.org/johnbintz/guard-rails.png)](http://travis-ci.org/johnbintz/guard-rails)
Want to restart your Rails development server whilst you work? Now you can! Want to restart your Rails development server whilst you work? Now you can!
@ -16,9 +14,7 @@ Lots of fun options!
* `:start_on_start` will start the server when starting Guard (default `true`) * `:start_on_start` will start the server when starting Guard (default `true`)
* `:force_run` kills any process that's holding open the listen port before attempting to (re)start Rails (default `false`). * `:force_run` kills any process that's holding open the listen port before attempting to (re)start Rails (default `false`).
* `:daemon` runs the server as a daemon, without any output to the terminal that ran `guard` (default `false`). * `:daemon` runs the server as a daemon, without any output to the terminal that ran `guard` (default `false`).
* `:debugger` runs the server with the debugger enabled (default `false`). Required ruby-debug gem.
* `:timeout` waits this number of seconds when restarting the Rails server before reporting there's a problem (default `20`). * `:timeout` waits this number of seconds when restarting the Rails server before reporting there's a problem (default `20`).
* `:server` lets you specify the webserver engine to use (try `:server => :thin`).
This is super-alpha, but it works for me! Only really hand-tested in Mac OS X. Feel free to fork'n'fix for other This is super-alpha, but it works for me! Only really hand-tested in Mac OS X. Feel free to fork'n'fix for other
OSes, and to add some more real tests. OSes, and to add some more real tests.

View File

@ -15,10 +15,23 @@ RSpec::Core::RakeTask.new(:spec)
namespace :spec do namespace :spec do
desc "Run on three Rubies" desc "Run on three Rubies"
task :platforms do task :platforms do
prefix = "rvm 1.8.7,1.9.2,ree,1.9.3 do" current = %x{rvm-prompt v}
system %{#{prefix} bundle}
system %{#{prefix} bundle exec rake spec} fail = false
exit $?.exitstatus if $?.exitstatus != 0 %w{1.8.7 1.9.2 ree}.each do |version|
puts "Switching to #{version}"
Bundler.with_clean_env do
system %{bash -c 'source ~/.rvm/scripts/rvm && rvm #{version} && bundle exec rake spec'}
end
if $?.exitstatus != 0
fail = true
break
end
end
system %{rvm #{current}}
exit (fail ? 1 : 0)
end end
end end

View File

@ -12,9 +12,7 @@ module Guard
:environment => 'development', :environment => 'development',
:start_on_start => true, :start_on_start => true,
:force_run => false, :force_run => false,
:timeout => 30, :timeout => 20
:server => nil,
:debugger => false
} }
def initialize(watchers = [], options = {}) def initialize(watchers = [], options = {})
@ -25,21 +23,19 @@ module Guard
end end
def start def start
server = options[:server] ? "#{options[:server]} and " : "" UI.info "Guard::Rails will now restart your app on port #{options[:port]} using #{options[:environment]} environment."
UI.info "Guard::Rails will now restart your app on port #{options[:port]} using #{server}#{options[:environment]} environment." run_all if options[:start_on_start]
reload("start") if options[:start_on_start]
end end
def reload(action = "restart") def run_all
action_cap = action.capitalize UI.info "Restarting Rails..."
UI.info "#{action_cap}ing Rails..." Notifier.notify("Rails restarting on port #{options[:port]} in #{options[:environment]} environment...", :title => "Restarting Rails...", :image => :pending)
Notifier.notify("Rails #{action}ing on port #{options[:port]} in #{options[:environment]} environment...", :title => "#{action_cap}ing Rails...", :image => :pending)
if runner.restart if runner.restart
UI.info "Rails #{action}ed, pid #{runner.pid}" UI.info "Rails restarted, pid #{runner.pid}"
Notifier.notify("Rails #{action}ed on port #{options[:port]}.", :title => "Rails #{action}ed!", :image => :success) Notifier.notify("Rails restarted on port #{options[:port]}.", :title => "Rails restarted!", :image => :success)
else else
UI.info "Rails NOT #{action}ed, check your log files." UI.info "Rails NOT restarted, check your log files."
Notifier.notify("Rails NOT #{action}ed, check your log files.", :title => "Rails NOT #{action}ed!", :image => :failed) Notifier.notify("Rails NOT restarted, check your log files.", :title => "Rails NOT restarted!", :image => :failed)
end end
end end
@ -48,11 +44,9 @@ module Guard
runner.stop runner.stop
end end
def run_on_changes(paths) def run_on_change(paths)
reload run_all
end end
alias :run_on_change :run_on_changes
end end
end end

View File

@ -18,12 +18,12 @@ module Guard
def stop def stop
if File.file?(pid_file) if File.file?(pid_file)
system %{kill -SIGINT #{File.read(pid_file).strip}} system %{kill -KILL #{File.read(pid_file).strip}}
wait_for_no_pid if $?.exitstatus == 0 wait_for_no_pid if $?.exitstatus == 0
FileUtils.rm pid_file, :force => true FileUtils.rm pid_file
end end
end end
def restart def restart
stop stop
start start
@ -37,10 +37,8 @@ module Guard
] ]
rails_options << '-d' if options[:daemon] rails_options << '-d' if options[:daemon]
rails_options << '-u' if options[:debugger]
rails_options << options[:server] if options[:server]
%{sh -c 'cd #{Dir.pwd} && RAILS_ENV=#{options[:environment]} rails s #{rails_options.join(' ')} &'} %{sh -c 'cd #{Dir.pwd} && rails s #{rails_options.join(' ')} &'}
end end
def pid_file def pid_file

View File

@ -1,4 +1,4 @@
module GuardRails module GuardRails
VERSION = '0.1.1' VERSION = '0.0.3'
end end

View File

@ -17,7 +17,6 @@ describe Guard::RailsRunner do
let(:pid) { 12345 } let(:pid) { 12345 }
before do before do
FileUtils.mkdir_p File.split(runner.pid_file).first
File.open(runner.pid_file, 'w') { |fh| fh.print pid } File.open(runner.pid_file, 'w') { |fh| fh.print pid }
end end
@ -47,22 +46,6 @@ describe Guard::RailsRunner do
runner.build_rails_command.should match(%r{ -d}) runner.build_rails_command.should match(%r{ -d})
end end
end end
context 'debugger' do
let(:options) { default_options.merge(:debugger => true) }
it "should have a debugger switch" do
runner.build_rails_command.should match(%r{ -u})
end
end
context 'custom server' do
let(:options) { default_options.merge(:server => 'thin') }
it "should have the server name" do
runner.build_rails_command.should match(%r{thin})
end
end
end end
describe '#start' do describe '#start' do

View File

@ -19,7 +19,7 @@ describe Guard::Rails do
context 'start on start' do context 'start on start' do
it "should show the right message and run startup" do it "should show the right message and run startup" do
guard.expects(:reload).once guard.expects(:run_all).once
ui_expectation ui_expectation
guard.start guard.start
end end
@ -29,73 +29,52 @@ describe Guard::Rails do
let(:options) { { :start_on_start => false } } let(:options) { { :start_on_start => false } }
it "should show the right message and not run startup" do it "should show the right message and not run startup" do
guard.expects(:reload).never guard.expects(:run_all).never
ui_expectation ui_expectation
guard.start guard.start
end end
end end
end end
describe '#reload' do describe '#run_all' do
let(:pid) { '12345' } let(:pid) { '12345' }
before do before do
Guard::UI.expects(:info).with('Restarting Rails...')
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails restarting/), has_entry(:image => :pending))
Guard::RailsRunner.any_instance.stubs(:pid).returns(pid) Guard::RailsRunner.any_instance.stubs(:pid).returns(pid)
end end
let(:runner_stub) { Guard::RailsRunner.any_instance.stubs(:restart) } let(:runner_stub) { Guard::RailsRunner.any_instance.stubs(:restart) }
context 'at start' do context 'with pid file' do
before do before do
Guard::UI.expects(:info).with('Starting Rails...')
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails starting/), has_entry(:image => :pending))
runner_stub.returns(true) runner_stub.returns(true)
end end
it "should start and show the pid file" do it "should restart and show the pid file" do
Guard::UI.expects(:info).with(regexp_matches(/#{pid}/)) Guard::UI.expects(:info).with(regexp_matches(/#{pid}/))
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails started/), has_entry(:image => :success)) Guard::Notifier.expects(:notify).with(regexp_matches(/Rails restarted/), has_entry(:image => :success))
guard.reload("start") guard.run_all
end end
end end
context 'after start' do context 'no pid file' do
before do before do
Guard::RailsRunner.any_instance.stubs(:pid).returns(pid) runner_stub.returns(false)
Guard::UI.expects(:info).with('Restarting Rails...')
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails restarting/), has_entry(:image => :pending))
end end
context 'with pid file' do it "should restart and show the pid file" do
before do Guard::UI.expects(:info).with(regexp_matches(/#{pid}/)).never
runner_stub.returns(true) Guard::UI.expects(:info).with(regexp_matches(/Rails NOT restarted/))
end Guard::Notifier.expects(:notify).with(regexp_matches(/Rails NOT restarted/), has_entry(:image => :failed))
it "should restart and show the pid file" do guard.run_all
Guard::UI.expects(:info).with(regexp_matches(/#{pid}/))
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails restarted/), has_entry(:image => :success))
guard.reload
end
end
context 'no pid file' do
before do
runner_stub.returns(false)
end
it "should restart and show the pid file" do
Guard::UI.expects(:info).with(regexp_matches(/#{pid}/)).never
Guard::UI.expects(:info).with(regexp_matches(/Rails NOT restarted/))
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails NOT restarted/), has_entry(:image => :failed))
guard.reload
end
end end
end end
end end
describe '#stop' do describe '#stop' do
it "should stop correctly" do it "should stop correctly" do
Guard::Notifier.expects(:notify).with('Until next time...', anything) Guard::Notifier.expects(:notify).with('Until next time...', anything)
@ -104,8 +83,8 @@ describe Guard::Rails do
end end
describe '#run_on_change' do describe '#run_on_change' do
it "should reload on change" do it "should run on change" do
guard.expects(:reload).once guard.expects(:run_all).once
guard.run_on_change([]) guard.run_on_change([])
end end
end end