guard-process 1.0.1 → 1.0.2
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 +1 -0
- data/README.md +3 -1
- data/guard-process.gemspec +3 -1
- data/lib/guard/process.rb +14 -9
- data/test/guard/process_test.rb +35 -15
- data/test/run_me.rb +10 -1
- data/test/test_helper.rb +2 -0
- metadata +40 -20
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@ Guard::Process [ to
|
|
10
10
|
|
11
11
|
There is also an exellent screencast available on [Railscasts](http://railscasts.com/episodes/264-guard)
|
12
12
|
|
13
|
+
Additionally there is a great introductory article on [Intridea Blog](http://intridea.com/2011/8/25/hire-a-guard-for-your-project) mentioning Guard::Process.
|
14
|
+
|
13
15
|
Guardfile
|
14
16
|
---------
|
15
17
|
You can add as many process Guards as you want, an example Guardfile:
|
data/guard-process.gemspec
CHANGED
@@ -4,7 +4,7 @@ require 'rbconfig' unless defined?(RbConfig)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "guard-process"
|
7
|
-
s.version = "1.0.
|
7
|
+
s.version = "1.0.2"
|
8
8
|
s.authors = ["Mark Kremer"]
|
9
9
|
s.email = ["mark@socialreferral.com"]
|
10
10
|
s.homepage = ""
|
@@ -19,6 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
s.add_dependency('guard', '>= 0.4.2')
|
22
|
+
s.add_dependency('spoon', '~> 0.0.1')
|
23
|
+
s.add_dependency('ffi', '~> 1.0.9')
|
22
24
|
s.add_development_dependency('minitest')
|
23
25
|
s.add_development_dependency('mocha')
|
24
26
|
s.add_development_dependency('guard-minitest')
|
data/lib/guard/process.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'guard'
|
2
2
|
require 'guard/guard'
|
3
|
+
require 'spoon'
|
3
4
|
|
4
5
|
module Guard
|
5
6
|
class Process < Guard
|
6
7
|
def initialize(watchers = [], options = {})
|
7
|
-
@process = nil
|
8
8
|
@pid = nil
|
9
|
-
@command = options.fetch(:command).split
|
10
|
-
@env = options[:env]
|
9
|
+
@command = options.fetch(:command).split(" ")
|
10
|
+
@env = options[:env] || {}
|
11
11
|
@name = options[:name]
|
12
12
|
@stop_signal = options[:stop_signal] || "TERM"
|
13
13
|
super
|
@@ -23,18 +23,23 @@ module Guard
|
|
23
23
|
|
24
24
|
def start
|
25
25
|
UI.info("Starting process #{@name}")
|
26
|
-
|
27
|
-
@
|
26
|
+
original_env = {}
|
27
|
+
@env.each_pair do |key, value|
|
28
|
+
original_env[key] = ENV[key]
|
29
|
+
ENV[key] = value
|
30
|
+
end
|
31
|
+
@pid = Spoon.spawnp(*@command)
|
32
|
+
original_env.each_pair do |key, value|
|
33
|
+
ENV[key] = value
|
34
|
+
end
|
28
35
|
UI.info("Started process #{@name}")
|
29
|
-
@pid = @process.pid
|
30
36
|
end
|
31
37
|
|
32
38
|
def stop
|
33
|
-
if @
|
39
|
+
if @pid
|
34
40
|
UI.info("Stopping process #{@name}")
|
35
|
-
::Process.kill(@stop_signal, @
|
41
|
+
::Process.kill(@stop_signal, @pid)
|
36
42
|
::Process.waitpid(@pid) rescue Errno::ESRCH
|
37
|
-
@process.close
|
38
43
|
@pid = nil
|
39
44
|
UI.info("Stopped process #{@name}")
|
40
45
|
end
|
data/test/guard/process_test.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
require_relative '../test_helper'
|
2
|
+
require 'timeout'
|
2
3
|
|
3
4
|
class GuardProcessTest < MiniTest::Unit::TestCase
|
4
5
|
def setup
|
5
6
|
ENV['GUARD_ENV'] = 'test'
|
6
|
-
@command = "#{
|
7
|
+
@command = "ruby #{TEST_ROOT}/run_me.rb"
|
7
8
|
@name = "RunMe"
|
8
9
|
@options = {:command => @command, :name => @name}
|
9
10
|
@guard = Guard::Process.new([], @options)
|
@@ -23,13 +24,6 @@ class GuardProcessTest < MiniTest::Unit::TestCase
|
|
23
24
|
@guard.run_on_change("")
|
24
25
|
end
|
25
26
|
|
26
|
-
def test_env_is_passed_to_io_popen_if_given
|
27
|
-
@options[:env] = {'VAR1' => 'VALUE 1', 'VAR2' => 'VALUE 2'}
|
28
|
-
IO.expects(:popen).with([@options[:env], @command]).returns(stub_everything)
|
29
|
-
@guard = Guard::Process.new([], @options)
|
30
|
-
@guard.start
|
31
|
-
end
|
32
|
-
|
33
27
|
def test_start_runs_command_and_stop_stops_it
|
34
28
|
Guard::UI.expects(:info).with("Starting process #{@name}")
|
35
29
|
Guard::UI.expects(:info).with("Started process #{@name}")
|
@@ -48,17 +42,43 @@ class GuardProcessTest < MiniTest::Unit::TestCase
|
|
48
42
|
assert @guard.process_running?
|
49
43
|
end
|
50
44
|
|
51
|
-
def
|
52
|
-
|
53
|
-
@env
|
45
|
+
def test_start_sets_env_properly
|
46
|
+
ENV['VAR1'] = 'VALUE A'
|
47
|
+
@options[:env] = {'VAR1' => 'VALUE 1', 'VAR3' => 'VALUE 2'}
|
54
48
|
|
55
|
-
|
56
|
-
|
49
|
+
environment_file = "#{TEST_ROOT}/test_environment.txt"
|
50
|
+
File.delete(environment_file) if File.exists?(environment_file)
|
57
51
|
|
58
52
|
@guard = Guard::Process.new([], @options)
|
59
|
-
@guard.start
|
53
|
+
@guard.start
|
54
|
+
|
55
|
+
# Check the environment
|
56
|
+
assert_equal ENV['VAR1'], 'VALUE A'
|
57
|
+
assert_nil ENV['VAR2']
|
58
|
+
assert_nil ENV['VAR3']
|
59
|
+
|
60
|
+
# Wait for run_me.rb to write the environment details to file
|
61
|
+
Timeout.timeout(30) do
|
62
|
+
until File.exist?("#{TEST_ROOT}/test_environment.txt") do
|
63
|
+
sleep 0.5
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Read the written environment and convert it to a Hash, and get rid of the file
|
68
|
+
written_env = Hash[File.read("#{TEST_ROOT}/test_environment.txt").split("\n").map {|l| l.split(" = ")}]
|
69
|
+
File.delete("#{TEST_ROOT}/test_environment.txt")
|
70
|
+
|
71
|
+
# Verify that the written environment matches what was set in options[:env]
|
72
|
+
assert_equal 'VALUE 1', written_env['VAR1']
|
73
|
+
assert_equal nil, written_env['VAR2']
|
74
|
+
assert_equal 'VALUE 2', written_env['VAR3']
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_commands_are_formatted_properly_for_spoon
|
78
|
+
@options = {:command => 'echo test test', :name => 'EchoProcess', :env => {"VAR1" => "VALUE 1"}}
|
79
|
+
::Process.stubs(:kill).returns(true)
|
60
80
|
|
61
|
-
|
81
|
+
Spoon.expects(:spawnp).with("echo", "test", "test").returns(stub_everything)
|
62
82
|
|
63
83
|
@guard = Guard::Process.new([], @options)
|
64
84
|
@guard.start and @guard.stop
|
data/test/run_me.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
file_name = "#{File.expand_path(File.dirname(__FILE__))}/test_environment.txt"
|
4
|
+
|
5
|
+
File.open(file_name, 'w') do |file|
|
6
|
+
file.write("VAR1 = #{ENV['VAR1']}\n")
|
7
|
+
file.write("VAR2 = #{ENV['VAR2']}\n")
|
8
|
+
file.write("VAR3 = #{ENV['VAR3']}\n")
|
9
|
+
end
|
10
|
+
|
2
11
|
loop do
|
3
|
-
puts "#{Time.now}: running..."
|
4
12
|
sleep 1
|
5
13
|
end
|
14
|
+
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard-process
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
13
|
-
default_executable:
|
12
|
+
date: 2011-10-13 00:00:00.000000000Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: guard
|
17
|
-
requirement: &
|
16
|
+
requirement: &8618500 !ruby/object:Gem::Requirement
|
18
17
|
none: false
|
19
18
|
requirements:
|
20
19
|
- - ! '>='
|
@@ -22,10 +21,32 @@ dependencies:
|
|
22
21
|
version: 0.4.2
|
23
22
|
type: :runtime
|
24
23
|
prerelease: false
|
25
|
-
version_requirements: *
|
24
|
+
version_requirements: *8618500
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: spoon
|
27
|
+
requirement: &8617860 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.0.1
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *8617860
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: ffi
|
38
|
+
requirement: &8617120 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.0.9
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *8617120
|
26
47
|
- !ruby/object:Gem::Dependency
|
27
48
|
name: minitest
|
28
|
-
requirement: &
|
49
|
+
requirement: &8616540 !ruby/object:Gem::Requirement
|
29
50
|
none: false
|
30
51
|
requirements:
|
31
52
|
- - ! '>='
|
@@ -33,10 +54,10 @@ dependencies:
|
|
33
54
|
version: '0'
|
34
55
|
type: :development
|
35
56
|
prerelease: false
|
36
|
-
version_requirements: *
|
57
|
+
version_requirements: *8616540
|
37
58
|
- !ruby/object:Gem::Dependency
|
38
59
|
name: mocha
|
39
|
-
requirement: &
|
60
|
+
requirement: &8615820 !ruby/object:Gem::Requirement
|
40
61
|
none: false
|
41
62
|
requirements:
|
42
63
|
- - ! '>='
|
@@ -44,10 +65,10 @@ dependencies:
|
|
44
65
|
version: '0'
|
45
66
|
type: :development
|
46
67
|
prerelease: false
|
47
|
-
version_requirements: *
|
68
|
+
version_requirements: *8615820
|
48
69
|
- !ruby/object:Gem::Dependency
|
49
70
|
name: guard-minitest
|
50
|
-
requirement: &
|
71
|
+
requirement: &8615140 !ruby/object:Gem::Requirement
|
51
72
|
none: false
|
52
73
|
requirements:
|
53
74
|
- - ! '>='
|
@@ -55,10 +76,10 @@ dependencies:
|
|
55
76
|
version: '0'
|
56
77
|
type: :development
|
57
78
|
prerelease: false
|
58
|
-
version_requirements: *
|
79
|
+
version_requirements: *8615140
|
59
80
|
- !ruby/object:Gem::Dependency
|
60
81
|
name: guard-bundler
|
61
|
-
requirement: &
|
82
|
+
requirement: &8614520 !ruby/object:Gem::Requirement
|
62
83
|
none: false
|
63
84
|
requirements:
|
64
85
|
- - ! '>='
|
@@ -66,10 +87,10 @@ dependencies:
|
|
66
87
|
version: '0'
|
67
88
|
type: :development
|
68
89
|
prerelease: false
|
69
|
-
version_requirements: *
|
90
|
+
version_requirements: *8614520
|
70
91
|
- !ruby/object:Gem::Dependency
|
71
92
|
name: rake
|
72
|
-
requirement: &
|
93
|
+
requirement: &8613900 !ruby/object:Gem::Requirement
|
73
94
|
none: false
|
74
95
|
requirements:
|
75
96
|
- - ! '>='
|
@@ -77,10 +98,10 @@ dependencies:
|
|
77
98
|
version: '0'
|
78
99
|
type: :development
|
79
100
|
prerelease: false
|
80
|
-
version_requirements: *
|
101
|
+
version_requirements: *8613900
|
81
102
|
- !ruby/object:Gem::Dependency
|
82
103
|
name: rb-inotify
|
83
|
-
requirement: &
|
104
|
+
requirement: &8613120 !ruby/object:Gem::Requirement
|
84
105
|
none: false
|
85
106
|
requirements:
|
86
107
|
- - ! '>='
|
@@ -88,7 +109,7 @@ dependencies:
|
|
88
109
|
version: '0'
|
89
110
|
type: :development
|
90
111
|
prerelease: false
|
91
|
-
version_requirements: *
|
112
|
+
version_requirements: *8613120
|
92
113
|
description: Guard extension to run cli processes
|
93
114
|
email:
|
94
115
|
- mark@socialreferral.com
|
@@ -109,7 +130,6 @@ files:
|
|
109
130
|
- test/guard/process_test.rb
|
110
131
|
- test/run_me.rb
|
111
132
|
- test/test_helper.rb
|
112
|
-
has_rdoc: true
|
113
133
|
homepage: ''
|
114
134
|
licenses: []
|
115
135
|
post_install_message:
|
@@ -130,10 +150,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
150
|
version: '0'
|
131
151
|
segments:
|
132
152
|
- 0
|
133
|
-
hash:
|
153
|
+
hash: 3990963759899305213
|
134
154
|
requirements: []
|
135
155
|
rubyforge_project:
|
136
|
-
rubygems_version: 1.
|
156
|
+
rubygems_version: 1.8.10
|
137
157
|
signing_key:
|
138
158
|
specification_version: 3
|
139
159
|
summary: Guard extension to run cli processes
|