guard-rails 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +5 -0
- data/Gemfile +10 -4
- data/README.md +2 -0
- data/Rakefile +17 -16
- data/lib/guard/rails.rb +5 -3
- data/lib/guard/rails/runner.rb +33 -15
- data/lib/guard/rails/version.rb +1 -1
- data/spec/lib/guard/rails/runner_spec.rb +8 -0
- data/spec/lib/guard/rails_spec.rb +3 -3
- metadata +26 -7
data/.travis.yml
ADDED
data/Gemfile
CHANGED
@@ -2,12 +2,18 @@ source "http://rubygems.org"
|
|
2
2
|
|
3
3
|
# Specify your gem's dependencies in guard-rails.gemspec
|
4
4
|
gemspec
|
5
|
-
gem 'rake'
|
5
|
+
gem 'rake'
|
6
6
|
gem 'fakefs', :require => nil
|
7
7
|
gem 'guard'
|
8
8
|
gem 'guard-rspec'
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
gem 'rb-fsevent'
|
10
|
+
require 'rbconfig'
|
11
|
+
if Config::CONFIG['target_os'] =~ /darwin/i
|
12
|
+
gem 'rb-fsevent', '>= 0.3.9'
|
13
|
+
gem 'growl', '~> 1.0.3'
|
14
|
+
end
|
15
|
+
if Config::CONFIG['target_os'] =~ /linux/i
|
16
|
+
gem 'rb-inotify', '>= 0.5.1'
|
17
|
+
gem 'libnotify', '~> 0.1.3'
|
18
|
+
end
|
13
19
|
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -1,24 +1,25 @@
|
|
1
|
+
include Rake::DSL if defined?(Rake::DSL)
|
2
|
+
|
1
3
|
require 'bundler'
|
2
4
|
Bundler::GemHelper.install_tasks
|
5
|
+
require 'rspec/core/rake_task'
|
6
|
+
|
7
|
+
desc 'Push everywhere!'
|
8
|
+
task :push_everywhere do
|
9
|
+
system %{git push origin master}
|
10
|
+
system %{git push guard master}
|
11
|
+
end
|
12
|
+
|
13
|
+
RSpec::Core::RakeTask.new(:spec)
|
3
14
|
|
4
15
|
namespace :spec do
|
5
16
|
desc "Run on three Rubies"
|
6
17
|
task :platforms do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
puts "Switching to #{version}"
|
12
|
-
system %{rvm #{version}}
|
13
|
-
system %{bundle exec rspec spec}
|
14
|
-
if $?.exitstatus != 0
|
15
|
-
fail = true
|
16
|
-
break
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
system %{rvm #{current}}
|
21
|
-
|
22
|
-
exit (fail ? 1 : 0)
|
18
|
+
prefix = "rvm 1.8.7,1.9.2,ree ruby"
|
19
|
+
system %{#{prefix} bundle}
|
20
|
+
system %{#{prefix} bundle exec rake spec}
|
21
|
+
exit $?.exitstatus
|
23
22
|
end
|
24
23
|
end
|
24
|
+
|
25
|
+
task :default => 'spec:platforms'
|
data/lib/guard/rails.rb
CHANGED
@@ -12,7 +12,8 @@ module Guard
|
|
12
12
|
:environment => 'development',
|
13
13
|
:start_on_start => true,
|
14
14
|
:force_run => false,
|
15
|
-
:timeout => 20
|
15
|
+
:timeout => 20,
|
16
|
+
:server => nil
|
16
17
|
}
|
17
18
|
|
18
19
|
def initialize(watchers = [], options = {})
|
@@ -23,7 +24,8 @@ module Guard
|
|
23
24
|
end
|
24
25
|
|
25
26
|
def start
|
26
|
-
|
27
|
+
server = options[:server] ? "#{options[:server]} and " : ""
|
28
|
+
UI.info "Guard::Rails will now restart your app on port #{options[:port]} using #{server}#{options[:environment]} environment."
|
27
29
|
run_all if options[:start_on_start]
|
28
30
|
end
|
29
31
|
|
@@ -35,7 +37,7 @@ module Guard
|
|
35
37
|
Notifier.notify("Rails restarted on port #{options[:port]}.", :title => "Rails restarted!", :image => :success)
|
36
38
|
else
|
37
39
|
UI.info "Rails NOT restarted, check your log files."
|
38
|
-
Notifier.notify("Rails NOT restarted, check your log files.", :title => "Rails NOT restarted!", :image => :
|
40
|
+
Notifier.notify("Rails NOT restarted, check your log files.", :title => "Rails NOT restarted!", :image => :failed)
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
data/lib/guard/rails/runner.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
1
3
|
module Guard
|
2
4
|
class RailsRunner
|
3
5
|
MAX_WAIT_COUNT = 10
|
@@ -11,17 +13,14 @@ module Guard
|
|
11
13
|
def start
|
12
14
|
kill_unmanaged_pid! if options[:force_run]
|
13
15
|
run_rails_command!
|
14
|
-
|
15
|
-
while !has_pid? && count < MAX_WAIT_COUNT
|
16
|
-
wait_for_pid_action
|
17
|
-
count += 1
|
18
|
-
end
|
19
|
-
!(count == MAX_WAIT_COUNT)
|
16
|
+
wait_for_pid
|
20
17
|
end
|
21
18
|
|
22
19
|
def stop
|
23
20
|
if File.file?(pid_file)
|
24
|
-
system %{kill -
|
21
|
+
system %{kill -KILL #{File.read(pid_file).strip}}
|
22
|
+
wait_for_no_pid if $?.exitstatus == 0
|
23
|
+
FileUtils.rm pid_file
|
25
24
|
end
|
26
25
|
end
|
27
26
|
|
@@ -38,6 +37,7 @@ module Guard
|
|
38
37
|
]
|
39
38
|
|
40
39
|
rails_options << '-d' if options[:daemon]
|
40
|
+
rails_options << options[:server] if options[:server]
|
41
41
|
|
42
42
|
%{sh -c 'cd #{Dir.pwd} && rails s #{rails_options.join(' ')} &'}
|
43
43
|
end
|
@@ -69,20 +69,38 @@ module Guard
|
|
69
69
|
|
70
70
|
def kill_unmanaged_pid!
|
71
71
|
if pid = unmanaged_pid
|
72
|
-
system %{kill -
|
72
|
+
system %{kill -KILL #{pid}}
|
73
|
+
FileUtils.rm pid_file
|
74
|
+
wait_for_no_pid
|
73
75
|
end
|
74
76
|
end
|
75
77
|
|
76
78
|
def unmanaged_pid
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
}
|
83
|
-
end
|
79
|
+
%x{lsof -n -i TCP:#{options[:port]}}.each_line { |line|
|
80
|
+
if line["*:#{options[:port]} "]
|
81
|
+
return line.split("\s")[1]
|
82
|
+
end
|
83
|
+
}
|
84
84
|
nil
|
85
85
|
end
|
86
|
+
|
87
|
+
private
|
88
|
+
def wait_for_pid
|
89
|
+
wait_for_pid_loop
|
90
|
+
end
|
91
|
+
|
92
|
+
def wait_for_no_pid
|
93
|
+
wait_for_pid_loop(false)
|
94
|
+
end
|
95
|
+
|
96
|
+
def wait_for_pid_loop(check_for_existince = true)
|
97
|
+
count = 0
|
98
|
+
while !(check_for_existince ? has_pid? : !has_pid?) && count < MAX_WAIT_COUNT
|
99
|
+
wait_for_pid_action
|
100
|
+
count += 1
|
101
|
+
end
|
102
|
+
!(count == MAX_WAIT_COUNT)
|
103
|
+
end
|
86
104
|
end
|
87
105
|
end
|
88
106
|
|
data/lib/guard/rails/version.rb
CHANGED
@@ -46,6 +46,14 @@ describe Guard::RailsRunner do
|
|
46
46
|
runner.build_rails_command.should match(%r{ -d})
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
context 'custom server' do
|
51
|
+
let(:options) { default_options.merge(:server => 'thin') }
|
52
|
+
|
53
|
+
it "should have the server name" do
|
54
|
+
runner.build_rails_command.should match(%r{thin})
|
55
|
+
end
|
56
|
+
end
|
49
57
|
end
|
50
58
|
|
51
59
|
describe '#start' do
|
@@ -41,7 +41,7 @@ describe Guard::Rails do
|
|
41
41
|
|
42
42
|
before do
|
43
43
|
Guard::UI.expects(:info).with('Restarting Rails...')
|
44
|
-
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails restarting/),
|
44
|
+
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails restarting/), has_entry(:image => :pending))
|
45
45
|
Guard::RailsRunner.any_instance.stubs(:pid).returns(pid)
|
46
46
|
end
|
47
47
|
|
@@ -54,7 +54,7 @@ describe Guard::Rails do
|
|
54
54
|
|
55
55
|
it "should restart and show the pid file" do
|
56
56
|
Guard::UI.expects(:info).with(regexp_matches(/#{pid}/))
|
57
|
-
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails restarted/),
|
57
|
+
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails restarted/), has_entry(:image => :success))
|
58
58
|
|
59
59
|
guard.run_all
|
60
60
|
end
|
@@ -68,7 +68,7 @@ describe Guard::Rails do
|
|
68
68
|
it "should restart and show the pid file" do
|
69
69
|
Guard::UI.expects(:info).with(regexp_matches(/#{pid}/)).never
|
70
70
|
Guard::UI.expects(:info).with(regexp_matches(/Rails NOT restarted/))
|
71
|
-
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails NOT restarted/),
|
71
|
+
Guard::Notifier.expects(:notify).with(regexp_matches(/Rails NOT restarted/), has_entry(:image => :failed))
|
72
72
|
|
73
73
|
guard.run_all
|
74
74
|
end
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
4
5
|
prerelease:
|
5
|
-
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- John Bintz
|
@@ -10,41 +15,54 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2011-
|
18
|
+
date: 2011-08-04 00:00:00 -04:00
|
14
19
|
default_executable:
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
17
22
|
name: guard
|
23
|
+
prerelease: false
|
18
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
19
25
|
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 19
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 2
|
33
|
+
- 2
|
23
34
|
version: 0.2.2
|
24
35
|
type: :runtime
|
25
|
-
prerelease: false
|
26
36
|
version_requirements: *id001
|
27
37
|
- !ruby/object:Gem::Dependency
|
28
38
|
name: rspec
|
39
|
+
prerelease: false
|
29
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
41
|
none: false
|
31
42
|
requirements:
|
32
43
|
- - ~>
|
33
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 23
|
46
|
+
segments:
|
47
|
+
- 2
|
48
|
+
- 6
|
49
|
+
- 0
|
34
50
|
version: 2.6.0
|
35
51
|
type: :development
|
36
|
-
prerelease: false
|
37
52
|
version_requirements: *id002
|
38
53
|
- !ruby/object:Gem::Dependency
|
39
54
|
name: mocha
|
55
|
+
prerelease: false
|
40
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
57
|
none: false
|
42
58
|
requirements:
|
43
59
|
- - ">="
|
44
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 3
|
62
|
+
segments:
|
63
|
+
- 0
|
45
64
|
version: "0"
|
46
65
|
type: :development
|
47
|
-
prerelease: false
|
48
66
|
version_requirements: *id003
|
49
67
|
description: Restart Rails when things change in your app
|
50
68
|
email:
|
@@ -57,6 +75,7 @@ extra_rdoc_files: []
|
|
57
75
|
|
58
76
|
files:
|
59
77
|
- .gitignore
|
78
|
+
- .travis.yml
|
60
79
|
- Gemfile
|
61
80
|
- Guardfile
|
62
81
|
- README.md
|
@@ -84,7 +103,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
84
103
|
requirements:
|
85
104
|
- - ">="
|
86
105
|
- !ruby/object:Gem::Version
|
87
|
-
hash:
|
106
|
+
hash: 3
|
88
107
|
segments:
|
89
108
|
- 0
|
90
109
|
version: "0"
|
@@ -93,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
112
|
requirements:
|
94
113
|
- - ">="
|
95
114
|
- !ruby/object:Gem::Version
|
96
|
-
hash:
|
115
|
+
hash: 3
|
97
116
|
segments:
|
98
117
|
- 0
|
99
118
|
version: "0"
|