spool 0.0.1 → 0.1.1
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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +2 -1
- data/bin/spool +1 -0
- data/lib/spool/configuration.rb +51 -5
- data/lib/spool/dsl.rb +26 -2
- data/lib/spool/pool.rb +30 -8
- data/lib/spool/version.rb +1 -1
- data/lib/spool.rb +1 -0
- data/spec/dsl_spec.rb +13 -1
- data/spec/loop_pool_config.rb +4 -0
- data/spec/pool_spec.rb +79 -7
- data/spec/sample_config.rb +7 -1
- data/spool.gemspec +2 -1
- metadata +41 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0548f5c405ead7e5fa0f5b61fe9d715b289385c3
|
4
|
+
data.tar.gz: ae94274bf5d724f65ba0128d9e1ecbe68e306de9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c7b0bec7c5d9aa71f97a3026819df40d0e7bb809c903388bc1d3ccca9361f25b86b48fdf3955590eb0b755d27fd73adeaae5771511af223c64c9b7c5b70712e
|
7
|
+
data.tar.gz: 2c4f1770e103ae67b8e2ad504d1a573054937f7310e58fce96834bd2cc769f37ba4853fa735ef79373e8e5f4767f84d3c8f41a6fb3bf00528004e16b658f6f30
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ruby 2.
|
1
|
+
ruby 2.0
|
data/.travis.yml
CHANGED
data/bin/spool
CHANGED
data/lib/spool/configuration.rb
CHANGED
@@ -1,13 +1,23 @@
|
|
1
1
|
module Spool
|
2
2
|
class Configuration
|
3
3
|
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :name,
|
5
|
+
:processes,
|
5
6
|
:env,
|
6
7
|
:dir,
|
7
8
|
:command,
|
8
|
-
:
|
9
|
+
:pid_file,
|
9
10
|
:restart_condition,
|
10
|
-
:source_file
|
11
|
+
:source_file,
|
12
|
+
:stop_signal,
|
13
|
+
:kill_signal,
|
14
|
+
:log_file,
|
15
|
+
:log_level,
|
16
|
+
:log_formatter
|
17
|
+
|
18
|
+
def name
|
19
|
+
@name ||= 'SPOOL'
|
20
|
+
end
|
11
21
|
|
12
22
|
def env
|
13
23
|
@env ||= {}
|
@@ -17,8 +27,44 @@ module Spool
|
|
17
27
|
@dir ||= source_file ? File.dirname(source_file) : Dir.pwd
|
18
28
|
end
|
19
29
|
|
20
|
-
def
|
21
|
-
@
|
30
|
+
def pid_file
|
31
|
+
@pid_file ||= File.join(dir, (source_file ? "#{File.basename(source_file, '.*')}.pid" : 'pool.pid'))
|
32
|
+
end
|
33
|
+
|
34
|
+
def restart_condition
|
35
|
+
@restart_condition ||= Proc.new do |p|
|
36
|
+
false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def stop_signal
|
41
|
+
@stop_signal ||= :QUIT
|
42
|
+
end
|
43
|
+
|
44
|
+
def kill_signal
|
45
|
+
@kill_signal ||= :KILL
|
46
|
+
end
|
47
|
+
|
48
|
+
def log_file
|
49
|
+
@log_file ||= '/dev/null'
|
50
|
+
end
|
51
|
+
|
52
|
+
def log_formatter
|
53
|
+
@log_formatter ||= Proc.new do |s,d,p,m|
|
54
|
+
"#{d} - #{name} - #{s.to_s.ljust(5,' ')} - #{p.to_s.upcase} ##{::Process.pid} - #{m}\n"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def log_level
|
59
|
+
@log_level ||= 'INFO'
|
60
|
+
end
|
61
|
+
|
62
|
+
def logger
|
63
|
+
@logger ||= MonoLogger.new(log_file).tap do |logger|
|
64
|
+
logger.level = MonoLogger.const_get log_level
|
65
|
+
logger.formatter = log_formatter
|
66
|
+
Datacenter.logger = logger
|
67
|
+
end
|
22
68
|
end
|
23
69
|
|
24
70
|
end
|
data/lib/spool/dsl.rb
CHANGED
@@ -20,6 +20,10 @@ module Spool
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
def name(name)
|
24
|
+
configuration.name = name
|
25
|
+
end
|
26
|
+
|
23
27
|
def processes(count)
|
24
28
|
configuration.processes = count
|
25
29
|
end
|
@@ -36,13 +40,33 @@ module Spool
|
|
36
40
|
configuration.command = command
|
37
41
|
end
|
38
42
|
|
39
|
-
def
|
40
|
-
configuration.
|
43
|
+
def pid_file(pid_file)
|
44
|
+
configuration.pid_file = pid_file
|
41
45
|
end
|
42
46
|
|
43
47
|
def restart_when(&block)
|
44
48
|
configuration.restart_condition = block
|
45
49
|
end
|
46
50
|
|
51
|
+
def stop_signal(signal)
|
52
|
+
configuration.stop_signal = signal.to_sym
|
53
|
+
end
|
54
|
+
|
55
|
+
def kill_signal(signal)
|
56
|
+
configuration.kill_signal = signal.to_sym
|
57
|
+
end
|
58
|
+
|
59
|
+
def log_file(filename)
|
60
|
+
configuration.log_file = filename
|
61
|
+
end
|
62
|
+
|
63
|
+
def log_level(level)
|
64
|
+
configuration.log_level = level.to_s.upcase
|
65
|
+
end
|
66
|
+
|
67
|
+
def log_formatter(&block)
|
68
|
+
configuration.log_formatter = block
|
69
|
+
end
|
70
|
+
|
47
71
|
end
|
48
72
|
end
|
data/lib/spool/pool.rb
CHANGED
@@ -32,11 +32,12 @@ module Spool
|
|
32
32
|
|
33
33
|
handle_signals
|
34
34
|
|
35
|
-
File.write configuration.
|
35
|
+
File.write configuration.pid_file, Process.pid if configuration.pid_file
|
36
36
|
|
37
37
|
configuration.processes.times.map do
|
38
38
|
processes << Spawner.spawn(configuration)
|
39
39
|
end
|
40
|
+
logger.info(self.class) { "SPOOL START childrens: #{processes.map(&:pid)}" }
|
40
41
|
|
41
42
|
while @started
|
42
43
|
check_status
|
@@ -45,18 +46,22 @@ module Spool
|
|
45
46
|
end
|
46
47
|
|
47
48
|
def stop(timeout=0)
|
48
|
-
|
49
|
+
logger.info(self.class) { "SPOOL STOP" }
|
50
|
+
stop_processes processes
|
49
51
|
Timeout.timeout(timeout) { wait_for_stopped processes }
|
50
52
|
rescue Timeout::Error
|
53
|
+
logger.error(self.class) { "ERROR IN SPOOL STOP. Timeout error" }
|
51
54
|
ensure
|
52
55
|
stop!
|
53
56
|
end
|
54
57
|
|
55
58
|
def stop!
|
56
|
-
processes.each(&:kill)
|
57
|
-
processes.clear
|
58
|
-
File.delete configuration.pidfile if File.exists? configuration.pidfile
|
59
59
|
@started = false
|
60
|
+
logger.info(self.class) { "SPOOL STOP! kill this children (#{processes.map(&:pid)})" }
|
61
|
+
processes.each { |p| p.send_signal configuration.kill_signal}
|
62
|
+
wait_for_stopped processes
|
63
|
+
processes.clear
|
64
|
+
File.delete configuration.pid_file if File.exists? configuration.pid_file
|
60
65
|
end
|
61
66
|
|
62
67
|
def incr(count=1)
|
@@ -72,7 +77,8 @@ module Spool
|
|
72
77
|
end
|
73
78
|
|
74
79
|
def restart
|
75
|
-
|
80
|
+
logger.info(self.class) { "RESTART" }
|
81
|
+
stop_processes processes
|
76
82
|
end
|
77
83
|
|
78
84
|
private
|
@@ -86,32 +92,48 @@ module Spool
|
|
86
92
|
def check_status
|
87
93
|
return if stopped?
|
88
94
|
|
89
|
-
processes.select(&configuration.restart_condition)
|
95
|
+
stop_processes processes.select(&configuration.restart_condition)
|
90
96
|
processes.delete_if { |p| !p.alive? }
|
91
97
|
|
98
|
+
return if stopped?
|
92
99
|
if configuration.processes > processes.count
|
100
|
+
logger.info(self.class) { "Initialize new children: #{processes.map(&:pid)}" }
|
101
|
+
|
93
102
|
(configuration.processes - processes.count).times do
|
94
103
|
processes << Spawner.spawn(configuration)
|
95
104
|
end
|
96
105
|
|
106
|
+
logger.info(self.class) { "new children: #{processes.map(&:pid)}" }
|
107
|
+
|
97
108
|
elsif configuration.processes < processes.count
|
109
|
+
logger.info(self.class) { "Kill childrens: #{processes.map(&:pid)}" }
|
110
|
+
|
98
111
|
list = processes.take(processes.count - configuration.processes)
|
99
|
-
list
|
112
|
+
stop_processes list
|
100
113
|
wait_for_stopped list
|
101
114
|
list.each { |p| processes.delete p }
|
102
115
|
|
116
|
+
logger.info(self.class) { "After kill childrens: #{processes.map(&:pid)}" }
|
103
117
|
end
|
104
118
|
|
105
119
|
rescue
|
106
120
|
retry
|
107
121
|
end
|
108
122
|
|
123
|
+
def stop_processes(processes_list)
|
124
|
+
processes_list.each { |p| p.send_signal configuration.stop_signal }
|
125
|
+
end
|
126
|
+
|
109
127
|
def wait_for_stopped(processes)
|
110
128
|
while processes.any?(&:alive?)
|
111
129
|
sleep 0.01
|
112
130
|
end
|
113
131
|
end
|
114
132
|
|
133
|
+
def logger
|
134
|
+
configuration.logger
|
135
|
+
end
|
136
|
+
|
115
137
|
end
|
116
138
|
|
117
139
|
end
|
data/lib/spool/version.rb
CHANGED
data/lib/spool.rb
CHANGED
data/spec/dsl_spec.rb
CHANGED
@@ -6,12 +6,18 @@ describe Spool::DSL do
|
|
6
6
|
|
7
7
|
it 'Configure from block' do
|
8
8
|
config = Spool::DSL.configure do
|
9
|
+
name 'Process pool'
|
9
10
|
processes 10
|
10
11
|
env VAR_1: 1, VAR_2: 2
|
11
12
|
dir '/tmp'
|
12
13
|
command 'tailf file.log'
|
13
|
-
|
14
|
+
pid_file '/tailf.pid'
|
14
15
|
restart_when { |p| p.memory > 512 }
|
16
|
+
stop_signal :TERM
|
17
|
+
kill_signal :INT
|
18
|
+
log_file 'test.log'
|
19
|
+
log_level :INFO
|
20
|
+
log_formatter { |s,d,p,m| "#{s},#{d},#{p},#{m}" }
|
15
21
|
end
|
16
22
|
|
17
23
|
assert_configuration config
|
@@ -26,12 +32,18 @@ describe Spool::DSL do
|
|
26
32
|
end
|
27
33
|
|
28
34
|
def assert_configuration(config)
|
35
|
+
config.name.must_equal 'Process pool'
|
29
36
|
config.processes.must_equal 10
|
30
37
|
config.env.must_equal VAR_1: 1, VAR_2: 2
|
31
38
|
config.dir.must_equal '/tmp'
|
32
39
|
config.command.must_equal 'tailf file.log'
|
33
40
|
config.restart_condition.call(MockProcess.new(600)).must_equal true
|
34
41
|
config.restart_condition.call(MockProcess.new(100)).must_equal false
|
42
|
+
config.stop_signal.must_equal :TERM
|
43
|
+
config.kill_signal.must_equal :INT
|
44
|
+
config.log_file.must_equal 'test.log'
|
45
|
+
config.log_level.must_equal 'INFO'
|
46
|
+
config.log_formatter.call('1','2','3','4').must_equal '1,2,3,4'
|
35
47
|
end
|
36
48
|
|
37
49
|
end
|
data/spec/pool_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe Spool::Pool do
|
|
5
5
|
after do
|
6
6
|
@pool.stop! if @pool
|
7
7
|
machine = Datacenter::Machine.new
|
8
|
-
machine.processes('ruby -e').each
|
8
|
+
machine.processes('ruby -e').each {|p| p.send_signal :KILL}
|
9
9
|
end
|
10
10
|
|
11
11
|
def start_pool(&block)
|
@@ -29,6 +29,7 @@ describe Spool::Pool do
|
|
29
29
|
pool = start_pool do
|
30
30
|
processes 1
|
31
31
|
command 'ruby -e "loop do; sleep 1; end"'
|
32
|
+
stop_signal :TERM
|
32
33
|
end
|
33
34
|
|
34
35
|
pool.must_be :started?
|
@@ -44,6 +45,25 @@ describe Spool::Pool do
|
|
44
45
|
process.wont_be :alive?
|
45
46
|
end
|
46
47
|
|
48
|
+
it 'Start and force stop' do
|
49
|
+
pool = start_pool do
|
50
|
+
processes 1
|
51
|
+
command 'ruby -e "loop do; sleep 1; end"'
|
52
|
+
end
|
53
|
+
|
54
|
+
pool.must_be :started?
|
55
|
+
pool.processes.count.must_equal 1
|
56
|
+
pool.processes[0].must_be :alive?
|
57
|
+
|
58
|
+
process = pool.processes[0]
|
59
|
+
|
60
|
+
pool.stop!
|
61
|
+
|
62
|
+
pool.must_be :stopped?
|
63
|
+
pool.processes.must_be_empty
|
64
|
+
process.wont_be :alive?
|
65
|
+
end
|
66
|
+
|
47
67
|
it 'Recover killed process' do
|
48
68
|
pool = start_pool do
|
49
69
|
processes 1
|
@@ -51,7 +71,7 @@ describe Spool::Pool do
|
|
51
71
|
end
|
52
72
|
|
53
73
|
original_process = pool.processes[0]
|
54
|
-
original_process.
|
74
|
+
original_process.send_signal :KILL
|
55
75
|
|
56
76
|
original_process.wont_be :alive?
|
57
77
|
|
@@ -61,10 +81,30 @@ describe Spool::Pool do
|
|
61
81
|
pool.processes[0].must_be :alive?
|
62
82
|
end
|
63
83
|
|
84
|
+
it 'Restart processes' do
|
85
|
+
pool = start_pool do
|
86
|
+
processes 2
|
87
|
+
command 'ruby -e "loop do; sleep 1; end"'
|
88
|
+
stop_signal :TERM
|
89
|
+
end
|
90
|
+
|
91
|
+
pool.processes.count.must_equal 2
|
92
|
+
|
93
|
+
original_pids = pool.processes.map(&:pid)
|
94
|
+
|
95
|
+
pool.restart
|
96
|
+
|
97
|
+
until pool.processes.count == 2 && pool.processes[0].pid != original_pids[0] && pool.processes[1].pid != original_pids[1]; end
|
98
|
+
|
99
|
+
pool.processes.count.must_equal 2
|
100
|
+
pool.processes.each { |p| p.must_be :alive?}
|
101
|
+
end
|
102
|
+
|
64
103
|
it 'Stop with timeout' do
|
65
104
|
pool = start_pool do
|
66
105
|
processes 1
|
67
|
-
command 'ruby -e "Signal.trap(:
|
106
|
+
command 'ruby -e "Signal.trap(:QUIT) { puts :quit; sleep 5; exit 0 }; loop { sleep 1 }"'
|
107
|
+
stop_signal :QUIT
|
68
108
|
end
|
69
109
|
|
70
110
|
process = pool.processes[0]
|
@@ -93,6 +133,7 @@ describe Spool::Pool do
|
|
93
133
|
pool = start_pool do
|
94
134
|
processes 3
|
95
135
|
command 'ruby -e "loop do; sleep 1; end"'
|
136
|
+
stop_signal :TERM
|
96
137
|
end
|
97
138
|
|
98
139
|
pool.processes.count.must_equal 3
|
@@ -103,21 +144,52 @@ describe Spool::Pool do
|
|
103
144
|
end
|
104
145
|
|
105
146
|
it 'Change process when satisfied stop condition' do
|
147
|
+
file_name = File.expand_path 'used_memory.log'
|
148
|
+
ruby_command = "require 'datacenter'; Signal.trap(:TERM) { File.write('#{file_name}', Datacenter::Process.new(Process.pid).memory); exit 0 }; a = 50_000_000.times.to_a; loop do; end"
|
149
|
+
|
106
150
|
pool = start_pool do
|
107
151
|
processes 1
|
108
|
-
command
|
152
|
+
command "ruby -e \"#{ruby_command}\""
|
109
153
|
restart_when { |p| p.memory > 300 }
|
154
|
+
stop_signal :TERM
|
110
155
|
end
|
111
156
|
|
112
157
|
memory = 0
|
113
158
|
process = pool.processes[0]
|
114
|
-
while
|
115
|
-
|
159
|
+
while !File.exists?(file_name)
|
160
|
+
sleep 0.5
|
116
161
|
end
|
117
162
|
|
118
|
-
memory
|
163
|
+
memory = File.read(file_name).to_i
|
164
|
+
File.delete(file_name)
|
165
|
+
|
166
|
+
memory.must_be :>=, 300
|
119
167
|
pool.processes.count.must_equal 1
|
120
168
|
pool.processes[0].pid.wont_equal process.pid
|
121
169
|
end
|
122
170
|
|
171
|
+
it 'Reload config' do
|
172
|
+
config_file = File.expand_path('../loop_pool_config.rb', __FILE__)
|
173
|
+
config = Spool::DSL.configure config_file
|
174
|
+
|
175
|
+
pool = Spool::Pool.new(config).tap do |pool|
|
176
|
+
t = Thread.new { pool.start }
|
177
|
+
t.abort_on_exception = true
|
178
|
+
while pool.processes.count < pool.configuration.processes
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
pool.processes.count.must_equal 1
|
183
|
+
|
184
|
+
pool.incr 1
|
185
|
+
|
186
|
+
assert_with_timeout(1) { pool.processes.count == 2 }
|
187
|
+
|
188
|
+
pool.reload
|
189
|
+
|
190
|
+
assert_with_timeout(1) { pool.processes.count == 1 }
|
191
|
+
|
192
|
+
pool.stop!
|
193
|
+
end
|
194
|
+
|
123
195
|
end
|
data/spec/sample_config.rb
CHANGED
@@ -1,6 +1,12 @@
|
|
1
|
+
name 'Process pool'
|
1
2
|
processes 10
|
2
3
|
env VAR_1: 1, VAR_2: 2
|
3
4
|
dir '/tmp'
|
4
5
|
command 'tailf file.log'
|
5
|
-
|
6
|
+
pid_file '/tailf.pid'
|
6
7
|
restart_when { |p| p.memory > 512 }
|
8
|
+
stop_signal 'TERM'
|
9
|
+
kill_signal 'INT'
|
10
|
+
log_file 'test.log'
|
11
|
+
log_level 'INFO'
|
12
|
+
log_formatter { |s,d,p,m| "#{s},#{d},#{p},#{m}" }
|
data/spool.gemspec
CHANGED
@@ -18,7 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
|
-
spec.add_dependency 'datacenter', '~> 0.
|
21
|
+
spec.add_dependency 'datacenter', '~> 0.2.0'
|
22
|
+
spec.add_dependency 'mono_logger'
|
22
23
|
|
23
24
|
spec.add_development_dependency 'bundler', '~> 1.5'
|
24
25
|
spec.add_development_dependency 'rake'
|
metadata
CHANGED
@@ -1,111 +1,125 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spool
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabriel Naiman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: datacenter
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.2.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mono_logger
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
|
-
- -
|
45
|
+
- - ~>
|
32
46
|
- !ruby/object:Gem::Version
|
33
47
|
version: '1.5'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
|
-
- -
|
52
|
+
- - ~>
|
39
53
|
- !ruby/object:Gem::Version
|
40
54
|
version: '1.5'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
|
-
- -
|
59
|
+
- - '>='
|
46
60
|
- !ruby/object:Gem::Version
|
47
61
|
version: '0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
|
-
- -
|
66
|
+
- - '>='
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: minitest
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- -
|
73
|
+
- - ~>
|
60
74
|
- !ruby/object:Gem::Version
|
61
75
|
version: '4.7'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- -
|
80
|
+
- - ~>
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '4.7'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: turn
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
|
-
- -
|
87
|
+
- - ~>
|
74
88
|
- !ruby/object:Gem::Version
|
75
89
|
version: '0.9'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
|
-
- -
|
94
|
+
- - ~>
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0.9'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: simplecov
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- -
|
101
|
+
- - '>='
|
88
102
|
- !ruby/object:Gem::Version
|
89
103
|
version: '0'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- -
|
108
|
+
- - '>='
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: pry-nav
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - '>='
|
102
116
|
- !ruby/object:Gem::Version
|
103
117
|
version: '0'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - '>='
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
description: ''
|
@@ -116,11 +130,11 @@ executables:
|
|
116
130
|
extensions: []
|
117
131
|
extra_rdoc_files: []
|
118
132
|
files:
|
119
|
-
-
|
120
|
-
-
|
121
|
-
-
|
122
|
-
-
|
123
|
-
-
|
133
|
+
- .coveralls.yml
|
134
|
+
- .gitignore
|
135
|
+
- .ruby-gemset
|
136
|
+
- .ruby-version
|
137
|
+
- .travis.yml
|
124
138
|
- Gemfile
|
125
139
|
- LICENSE.txt
|
126
140
|
- README.md
|
@@ -134,6 +148,7 @@ files:
|
|
134
148
|
- lib/spool/version.rb
|
135
149
|
- spec/coverage_helper.rb
|
136
150
|
- spec/dsl_spec.rb
|
151
|
+
- spec/loop_pool_config.rb
|
137
152
|
- spec/minitest_helper.rb
|
138
153
|
- spec/pool_spec.rb
|
139
154
|
- spec/sample_config.rb
|
@@ -149,12 +164,12 @@ require_paths:
|
|
149
164
|
- lib
|
150
165
|
required_ruby_version: !ruby/object:Gem::Requirement
|
151
166
|
requirements:
|
152
|
-
- -
|
167
|
+
- - '>='
|
153
168
|
- !ruby/object:Gem::Version
|
154
169
|
version: '0'
|
155
170
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
171
|
requirements:
|
157
|
-
- -
|
172
|
+
- - '>='
|
158
173
|
- !ruby/object:Gem::Version
|
159
174
|
version: '0'
|
160
175
|
requirements: []
|
@@ -166,6 +181,7 @@ summary: Manage and keep alive pool of processes
|
|
166
181
|
test_files:
|
167
182
|
- spec/coverage_helper.rb
|
168
183
|
- spec/dsl_spec.rb
|
184
|
+
- spec/loop_pool_config.rb
|
169
185
|
- spec/minitest_helper.rb
|
170
186
|
- spec/pool_spec.rb
|
171
187
|
- spec/sample_config.rb
|