svutil 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -19,6 +19,7 @@ $hoe = Hoe.spec('svutil') do |p|
19
19
  p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
20
20
  p.rsync_args = '-av --delete --ignore-errors'
21
21
  p.readme_file = "README.rdoc"
22
+ p.require_ruby_version(">= 1.9.0")
22
23
  end
23
24
 
24
25
  require 'newgem/tasks' # load /tasks/*.rake
data/lib/svutil.rb CHANGED
@@ -6,5 +6,5 @@ require 'svutil/log'
6
6
  require 'svutil/process_manager'
7
7
 
8
8
  module SVUtil
9
- VERSION = '0.9.1'
9
+ VERSION = '0.9.2'
10
10
  end
data/lib/svutil/config.rb CHANGED
@@ -4,11 +4,9 @@ require 'ostruct'
4
4
  require 'pp'
5
5
 
6
6
  module SVUtil
7
- def self.config
8
- Config.config_class
9
- end
10
-
11
7
  class Defaults
8
+ attr_reader :attrs
9
+
12
10
  def initialize
13
11
  @attrs = {}
14
12
  end
@@ -27,41 +25,38 @@ module SVUtil
27
25
  end
28
26
 
29
27
  class Config
30
-
31
- class << self
32
- attr_writer :config_file
33
- attr_reader :attrs
34
- attr_reader :defaults
35
- # Used mainly for testing
36
- attr_accessor :option_source
28
+ attr_writer :config_file
29
+ attr_reader :attrs
37
30
 
38
- attr_accessor :cli_options
39
- attr_accessor :cli_option_handlers
40
-
41
- def config_class
42
- subclasses_of(self).first || self
31
+ def initialize
32
+ @cli_options = {}
33
+ @attrs = if self.class.defaults
34
+ self.class.defaults.attrs.clone
35
+ else
36
+ {}
43
37
  end
38
+ end
44
39
 
45
- def set(options = {})
46
- @attrs ||= {}
47
- if block_given?
48
- yield self
49
- end
50
- self.validate
40
+ def set(options = {})
41
+ if block_given?
42
+ yield self
51
43
  end
44
+ self.validate
45
+ end
52
46
 
53
- def defaults(&block)
54
- @defaults ||= Defaults.new
55
- yield @defaults
56
- end
47
+ def config_file
48
+ @config_file ||= "settings"
49
+ end
57
50
 
58
- def config_file
59
- @config_file ||= "settings"
60
- end
51
+ # TODO: Put in module and extend
52
+ class << self
53
+ attr_reader :cli_option_handlers
54
+ attr_reader :validate_block
61
55
 
62
- def set_cli_option(option, value)
63
- @cli_options ||= {}
64
- @cli_options[option.to_s] = value
56
+ def defaults
57
+ @defaults ||= Defaults.new
58
+ yield @defaults if block_given?
59
+ return @defaults
65
60
  end
66
61
 
67
62
  def handle_options(&block)
@@ -72,102 +67,101 @@ module SVUtil
72
67
  def validator(&block)
73
68
  @validate_block = block
74
69
  end
70
+ end
75
71
 
76
- def validate
77
- # TODO: Check file perms
78
- if ((pid_file.nil? or pid_file.empty? or File.directory?(pid_file)) && self.daemon)
79
- err("PID file must be a writable file")
80
- end
81
- # TODO: Validate the writability of the log file
82
- @validate_block.call(self) unless @validate_block.nil?
83
- true
84
- end
72
+ def set_cli_option(option, value)
73
+ @cli_options ||= {}
74
+ @cli_options[option.to_s] = value
75
+ end
85
76
 
86
- def init
87
- set do |c|
88
- self.config_provided_on_cli = false
89
- OptionParser.new do |opts|
90
- opts.on("-f", "--config [filename]", "Config file to use (default 'settings')") do |filename|
91
- self.config_file = filename.strip
92
- self.config_provided_on_cli = true
93
- end
94
- opts.on("-d", "--daemon", "Run in the background as a daemon") do
95
- set_cli_option(:daemon, true)
96
- end
97
- opts.on("-l", "--debug-log [log-file]", "Debug Log File") do |log|
98
- set_cli_option(:log_file, log)
99
- end
100
- opts.on("-T", "--trace", "Display backtrace on errors") do
101
- set_cli_option(:trace, true)
102
- end
103
- opts.on("-P", "--pid [pid-file]", "PID File") do |pid|
104
- set_cli_option(:pid_file, pid)
105
- end
106
- # Handle CLI passed options
107
- (cli_option_handlers || []).each do |handler|
108
- handler.call(opts)
109
- end
110
- end.parse!(self.option_source || ARGV)
77
+ def validate
78
+ # TODO: Check file perms
79
+ if ((pid_file.nil? or pid_file.empty? or File.directory?(pid_file)) && self.daemon)
80
+ err("PID file must be a writable file")
81
+ end
82
+ # TODO: Validate the writability of the log file
83
+ self.instance_exec(self, &self.class.validate_block) unless self.class.validate_block.nil?
84
+ true
85
+ end
111
86
 
112
- # Process the config file
113
- if (self.config_file && File.exists?(self.config_file)) || self.config_provided_on_cli
114
- load_config_file
87
+ def init(test_options = nil)
88
+ set do |c|
89
+ self.config_provided_on_cli = false
90
+ OptionParser.new do |opts|
91
+ opts.on("-f", "--config [filename]", "Config file to use (default 'settings')") do |filename|
92
+ self.config_file = filename.strip
93
+ self.config_provided_on_cli = true
115
94
  end
116
-
117
- # Finally apply any CLI options
118
- (cli_options || {}).each do |(k,v)|
119
- c.send("#{k}=", v)
95
+ opts.on("-d", "--daemon", "Run in the background as a daemon") do
96
+ set_cli_option(:daemon, true)
97
+ end
98
+ opts.on("-l", "--debug-log [log-file]", "Debug Log File") do |log|
99
+ set_cli_option(:log_file, log)
100
+ end
101
+ opts.on("-T", "--trace", "Display backtrace on errors") do
102
+ set_cli_option(:trace, true)
103
+ end
104
+ opts.on("-P", "--pid [pid-file]", "PID File") do |pid|
105
+ set_cli_option(:pid_file, pid)
106
+ end
107
+ # Handle CLI passed options
108
+ (self.class.cli_option_handlers || []).each do |handler|
109
+ self.instance_exec(opts, &handler)
120
110
  end
111
+ end.parse!(test_options || ARGV)
112
+
113
+
114
+ # Process the config file
115
+ if (self.config_file && File.exists?(self.config_file)) || self.config_provided_on_cli
116
+ load_config_file
117
+ end
118
+
119
+ # Finally apply any CLI options
120
+ (@cli_options || {}).each do |(k,v)|
121
+ @attrs[k.to_s] = v
121
122
  end
122
123
  end
124
+ end
123
125
 
124
- private
125
- def method_missing(method_id, *args)
126
- @defaults ||= Defaults.new
127
- @attrs ||= {}
128
- if method_id.to_s =~ /=$/
129
- @attrs[method_id.to_s[0...-1]] = args.first
130
- else
131
- value = @attrs[method_id.to_s]
132
- if !value && @defaults
133
- @defaults.default_for(method_id.to_s)
134
- else
135
- value
136
- end
137
- end
126
+ private
127
+ def method_missing(method_id, *args)
128
+ if method_id.to_s =~ /=$/
129
+ @attrs[method_id.to_s[0...-1]] = args.first
130
+ else
131
+ value = @attrs[method_id.to_s]
138
132
  end
133
+ end
139
134
 
140
- def load_config_file
141
- contents = ""
142
- File.open(config_file, "r") { |file| contents << file.read }
143
- contents.split("\n").each_with_index do |line, index|
144
- pair = line.split("=")
145
- if pair.size != 2
146
- err("Invalid config file '#{config_file}'. Syntax error at line #{index + 1}")
147
- end
148
- self.send("#{pair[0].strip}=", pair[1].strip)
135
+ def load_config_file
136
+ contents = ""
137
+ File.open(config_file, "r") { |file| contents << file.read }
138
+ contents.split("\n").each_with_index do |line, index|
139
+ pair = line.split("=")
140
+ if pair.size != 2
141
+ err("Invalid config file '#{config_file}'. Syntax error at line #{index + 1}")
149
142
  end
143
+ self.send("#{pair[0].strip}=", pair[1].strip)
150
144
  end
145
+ end
151
146
 
152
- # TODO: This should be moved out to a Validator class
153
- def err(message)
154
- STDERR.puts(message)
155
- exit 1
156
- end
147
+ # TODO: This should be moved out to a Validator class
148
+ def err(message)
149
+ STDERR.puts(message)
150
+ exit 1
151
+ end
157
152
 
158
- def subclasses_of(*superclasses) #:nodoc:
159
- subclasses = []
160
- superclasses.each do |sup|
161
- ObjectSpace.each_object(Class) do |k|
162
- if superclasses.any? { |superclass| k < superclass } &&
163
- (k.name.nil? || k.name.empty? || eval("defined?(::#{k}) && ::#{k}.object_id == k.object_id"))
164
- subclasses << k
165
- end
153
+ def subclasses_of(*superclasses) #:nodoc:
154
+ subclasses = []
155
+ superclasses.each do |sup|
156
+ ObjectSpace.each_object(Class) do |k|
157
+ if superclasses.any? { |superclass| k < superclass } &&
158
+ (k.name.nil? || k.name.empty? || eval("defined?(::#{k}) && ::#{k}.object_id == k.object_id"))
159
+ subclasses << k
166
160
  end
167
- subclasses.uniq!
168
161
  end
169
- subclasses
162
+ subclasses.uniq!
170
163
  end
171
- end
164
+ subclasses
165
+ end
172
166
  end
173
167
  end
@@ -1,6 +1,10 @@
1
1
  module SVUtil
2
2
  class ProcessManager
3
- def initialize(klass)
3
+ def initialize(klass, config)
4
+ @klass = klass
5
+ @config = config
6
+ @server_instance = @klass.new
7
+
4
8
  # TODO: Add ability for users to specify these signals
5
9
  Signal.trap("INT") { shutdown('Interupted', 1) }
6
10
  Signal.trap("TERM") { shutdown('Terminated', 2) }
@@ -11,20 +15,18 @@ module SVUtil
11
15
  STDERR.puts "There is already a '#{$0}' process running"
12
16
  exit 1
13
17
  end
14
- daemonize if SVUtil::config.daemon
15
- write_pid_file
16
- @klass = klass
17
- @server_instance = @klass.new
18
18
  end
19
19
 
20
20
  def start
21
21
  begin
22
+ daemonize if @config.daemon
23
+ write_pid_file
22
24
  @server_instance.run
23
25
  rescue SystemExit => e
24
26
  shutdown("System Exited")
25
27
  rescue Exception => e
26
28
  Log.error(e.message)
27
- Log.error(e.backtrace.join("\n")) if SVUtil::config.trace
29
+ Log.error(e.backtrace.join("\n")) if @config.trace
28
30
  shutdown("Process Completed with Error", 1)
29
31
  end
30
32
  shutdown("Process Completed")
@@ -35,9 +37,9 @@ module SVUtil
35
37
  Log.info "Shutting Down (#{reason})"
36
38
  begin
37
39
  @server_instance.shutdown if @server_instance.respond_to?(:shutdown)
38
- rescue => e
40
+ rescue Exception => e
39
41
  Log.error("Shutdown Callback threw error: #{e.message}")
40
- Log.error("Shutdown Callback threw error: #{e.backtrace}") if SVUtil::config.trace
42
+ Log.error("Shutdown Callback threw error: #{e.backtrace}") if @config.trace
41
43
  Log.info("Shuting down anyway")
42
44
  end
43
45
  remove_pid_file
@@ -45,20 +47,20 @@ module SVUtil
45
47
  end
46
48
 
47
49
  def running?
48
- pid_file = SVUtil::config.pid_file
50
+ pid_file = @config.pid_file
49
51
  return false unless pid_file
50
52
  File.exist?(pid_file)
51
53
  end
52
54
 
53
55
  def write_pid_file
54
- pid_file = SVUtil::config.pid_file
56
+ pid_file = @config.pid_file
55
57
  return unless pid_file
56
58
  File.open(pid_file, "w") { |f| f.write(Process.pid) }
57
59
  File.chmod(0644, pid_file)
58
60
  end
59
61
 
60
62
  def remove_pid_file
61
- pid_file = SVUtil::config.pid_file
63
+ pid_file = @config.pid_file
62
64
  return unless pid_file
63
65
  File.unlink(pid_file) if File.exists?(pid_file)
64
66
  end
data/test/test_config.rb CHANGED
@@ -3,6 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '/test_helper.rb')
3
3
  class CustomConfig < SVUtil::Config
4
4
  defaults do |c|
5
5
  c.foo = 'bar'
6
+ c.manager = 'daniel'
6
7
  end
7
8
  end
8
9
 
@@ -10,77 +11,75 @@ class TestConfig < Test::Unit::TestCase
10
11
  include SVUtil
11
12
 
12
13
  def setup
14
+ @custom_config = CustomConfig.new
13
15
  end
14
16
 
15
17
  def test_set
16
- assert !CustomConfig.my_symbol
17
- CustomConfig.my_symbol = 'abc'
18
- assert_equal 'abc', CustomConfig.my_symbol
19
- CustomConfig.my_var = 10
20
- assert_equal 10, CustomConfig.my_var
18
+ assert !@custom_config.my_symbol
19
+ @custom_config.my_symbol = 'abc'
20
+ assert_equal 'abc', @custom_config.my_symbol
21
+ @custom_config.my_var = 10
22
+ assert_equal 10, @custom_config.my_var
21
23
  end
22
24
 
23
25
  def test_set_with_block
24
- CustomConfig.expects(:validate).times(1)
25
- CustomConfig.set do |c|
26
+ @custom_config.expects(:validate).times(1)
27
+ @custom_config.set do |c|
26
28
  c.another = 'abc'
27
29
  c.some_var = 123
28
30
  c.foobar = true
29
31
  end
30
- assert_equal 'abc', CustomConfig.another
31
- assert_equal 123, CustomConfig.some_var
32
- assert CustomConfig.foobar
32
+ assert_equal 'abc', @custom_config.another
33
+ assert_equal 123, @custom_config.some_var
34
+ assert @custom_config.foobar
33
35
  end
34
36
 
35
37
  def test_standard_cli_options
36
- CustomConfig.expects(:validate).times(1)
37
- CustomConfig.option_source = [ "-f", "test/settings", "-d", "-l", "debug", "-T" ]
38
- CustomConfig.init
39
- assert_equal "test/settings", CustomConfig.config_file
40
- assert_equal "debug", CustomConfig.log_file
41
- assert CustomConfig.daemon
42
- assert CustomConfig.trace
38
+ @custom_config = CustomConfig.new
39
+ @custom_config.expects(:validate).times(1)
40
+ #@custom_config.option_source = [ "-f", "test/settings", "-d", "-l", "debug", "-T" ]
41
+ @custom_config.init([ "-f", "test/settings", "-d", "-l", "debug", "-T" ])
42
+ assert_equal "test/settings", @custom_config.config_file
43
+ assert_equal "debug", @custom_config.log_file
44
+ assert @custom_config.daemon
45
+ assert @custom_config.trace
43
46
  end
44
47
 
45
48
  def test_config_file
46
- CustomConfig.expects(:validate).times(1)
47
- CustomConfig.config_file = "test/settings"
48
- CustomConfig.init
49
- assert_equal 'bar', CustomConfig.foo
49
+ @custom_config.expects(:validate).times(1)
50
+ @custom_config.config_file = "test/settings"
51
+ @custom_config.init
52
+ assert_equal 'bar', @custom_config.foo
50
53
  end
51
54
 
52
55
  def test_load_config_file
53
- CustomConfig.expects(:load_config_file).times(1)
54
- CustomConfig.config_file = "test/settings"
55
- CustomConfig.init
56
- assert_equal 'bar', CustomConfig.foo
56
+ @custom_config.expects(:load_config_file).times(1)
57
+ @custom_config.config_file = "test/settings"
58
+ @custom_config.init
59
+ assert_equal 'bar', @custom_config.foo
57
60
  end
58
61
 
59
62
  def test_validations_on_cli_with_no_config_file
60
- CustomConfig.expects(:validate).times(1)
61
- CustomConfig.config_file = nil
62
- CustomConfig.init
63
+ @custom_config.expects(:validate).times(1)
64
+ @custom_config.config_file = nil
65
+ @custom_config.init
63
66
  end
64
67
 
65
68
  # Command Line wins!
66
69
  def test_file_overide
67
- CustomConfig.expects(:validate).times(1)
68
- CustomConfig.config_file = "test/settings"
69
- CustomConfig.option_source = [ "-l", "logfile_set_on_cli" ]
70
- CustomConfig.init
71
- assert_equal "logfile_set_on_cli", CustomConfig.log_file
70
+ @custom_config.expects(:validate).times(1)
71
+ @custom_config.config_file = "test/settings"
72
+ @custom_config.init([ "-l", "logfile_set_on_cli" ])
73
+ assert_equal "logfile_set_on_cli", @custom_config.log_file
72
74
  end
73
75
 
74
76
  def test_defaults
75
- CustomConfig.defaults do |c|
76
- c.manager = 'daniel'
77
- end
78
- assert_equal 'daniel', CustomConfig.manager
79
- CustomConfig.manager = 'james'
80
- assert_equal 'james', CustomConfig.manager
77
+ assert_equal 'daniel', @custom_config.manager
78
+ @custom_config.manager = 'james'
79
+ assert_equal 'james', @custom_config.manager
81
80
  end
82
81
 
83
82
  def test_custom_defaults
84
- assert_equal 'bar', CustomConfig.foo
83
+ assert_equal 'bar', @custom_config.foo
85
84
  end
86
85
  end
@@ -15,19 +15,18 @@ class TestConfigHandleOptions < Test::Unit::TestCase
15
15
  include SVUtil
16
16
 
17
17
  def setup
18
+ @my_config = MyConfig.new
18
19
  end
19
20
 
20
21
  def test_handle_options
21
- MyConfig.option_source = [ "-P", "foo", "-x", "12345", "-Q" ]
22
- MyConfig.init
23
- assert MyConfig.pid_file = "foo"
24
- assert MyConfig.x = '1234'
25
- assert MyConfig.restless
22
+ @my_config.init([ "-P", "foo", "-x", "12345", "-Q" ])
23
+ assert @my_config.pid_file = "foo"
24
+ assert @my_config.x = '1234'
25
+ assert @my_config.restless
26
26
  end
27
27
 
28
28
  def test_built_in_options
29
- MyConfig.option_source = [ "-d", "-P", "foo" ]
30
- MyConfig.init
31
- assert MyConfig.daemon
29
+ @my_config.init([ "-d", "-P", "foo" ])
30
+ assert @my_config.daemon
32
31
  end
33
32
  end
data/test/test_helper.rb CHANGED
@@ -3,3 +3,15 @@ require 'stringio'
3
3
  require 'test/unit'
4
4
  require 'mocha'
5
5
  require File.dirname(__FILE__) + '/../lib/svutil'
6
+
7
+ class Test::Unit::TestCase
8
+ def assert_exit
9
+ exited = false
10
+ begin
11
+ yield if block_given?
12
+ rescue SystemExit => e
13
+ exited = true
14
+ end
15
+ assert(exited, "Did not exit")
16
+ end
17
+ end
@@ -0,0 +1,74 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/test_helper.rb')
2
+
3
+ class ServerConfig < SVUtil::Config
4
+ end
5
+
6
+ class TestProcesManager < Test::Unit::TestCase
7
+ include SVUtil
8
+
9
+ def setup
10
+ Signal.stubs(:trap)
11
+ Log.stubs(:info)
12
+ @instance = mock()
13
+ @klass = mock
14
+ @klass.expects(:new).returns(@instance)
15
+ end
16
+
17
+ def test_initialize
18
+ config = ServerConfig.new
19
+ ProcessManager.new(@klass, config)
20
+ end
21
+
22
+ # TODO: Could probably test this better by actually forking
23
+ def test_start_as_daemon
24
+ config = ServerConfig.new
25
+ config.daemon = true
26
+ pm = ProcessManager.new(@klass, config)
27
+ pm.expects(:daemonize)
28
+ pm.expects(:write_pid_file)
29
+ pm.expects(:shutdown)
30
+ @instance.expects(:run)
31
+ pm.start
32
+ end
33
+
34
+ def test_start_with_trace
35
+ config = ServerConfig.new
36
+ config.trace = true
37
+ pm = ProcessManager.new(@klass, config)
38
+ pm.expects(:write_pid_file)
39
+ @instance.expects(:run).raises(Exception)
40
+ Log.expects(:error).times(2)
41
+ assert_exit { pm.start }
42
+ end
43
+
44
+ def test_shutdown
45
+ config = ServerConfig.new
46
+ pm = ProcessManager.new(@klass, config)
47
+ pm.expects(:write_pid_file)
48
+ @instance.expects(:run)
49
+ assert_exit { pm.start }
50
+
51
+ # Shutdown
52
+ @instance.expects(:shutdown)
53
+ pm.expects(:remove_pid_file)
54
+ assert_exit { pm.send(:shutdown) }
55
+ end
56
+
57
+ def test_shutdown_with_trace
58
+ config = ServerConfig.new
59
+ config.trace = true
60
+ pm = ProcessManager.new(@klass, config)
61
+ pm.expects(:write_pid_file)
62
+ @instance.expects(:run)
63
+ assert_exit { pm.start }
64
+
65
+ # Shutdown
66
+ @instance.expects(:shutdown).raises(Exception)
67
+ Log.expects(:error).times(2)
68
+ pm.expects(:remove_pid_file)
69
+ assert_exit { pm.send(:shutdown) }
70
+ end
71
+
72
+
73
+ # TODO: Test all of the exceptions
74
+ end
@@ -10,17 +10,18 @@ class TestValidations < Test::Unit::TestCase
10
10
  include SVUtil
11
11
 
12
12
  def setup
13
+ @validated_config = ValidatedConfig.new
13
14
  end
14
15
 
15
16
  def test_custom_validation_error
16
- ValidatedConfig.expects(:err).times(1)
17
- ValidatedConfig.output_dir = nil
18
- ValidatedConfig.validate
17
+ @validated_config.expects(:err).times(1)
18
+ @validated_config.output_dir = nil
19
+ @validated_config.validate
19
20
  end
20
21
 
21
22
  def test_custom_validation
22
- ValidatedConfig.expects(:err).never
23
- ValidatedConfig.output_dir = "foo"
24
- assert ValidatedConfig.validate
23
+ @validated_config.expects(:err).never
24
+ @validated_config.output_dir = "foo"
25
+ assert @validated_config.validate
25
26
  end
26
27
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: svutil
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-03 00:00:00.000000000Z
12
+ date: 2012-01-04 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: newgem
16
- requirement: &70271851866620 !ruby/object:Gem::Requirement
16
+ requirement: &70111340337380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.5.3
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70271851866620
24
+ version_requirements: *70111340337380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: hoe
27
- requirement: &70271851851080 !ruby/object:Gem::Requirement
27
+ requirement: &70111340336180 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '2.12'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70271851851080
35
+ version_requirements: *70111340336180
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rdoc
38
- requirement: &70271847828620 !ruby/object:Gem::Requirement
38
+ requirement: &70111336070020 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '3.10'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70271847828620
46
+ version_requirements: *70111336070020
47
47
  description: A simple managed process builder for Ruby projects
48
48
  email:
49
49
  - daniel@netfox.com
@@ -68,6 +68,7 @@ files:
68
68
  - test/test_config.rb
69
69
  - test/test_config_handle_options.rb
70
70
  - test/test_defaults.rb
71
+ - test/test_process_manager.rb
71
72
  - test/test_validations.rb
72
73
  - .gemtest
73
74
  homepage: http://svutil.rubyforge.org
@@ -83,7 +84,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
84
  requirements:
84
85
  - - ! '>='
85
86
  - !ruby/object:Gem::Version
86
- version: '0'
87
+ version: 1.9.0
87
88
  required_rubygems_version: !ruby/object:Gem::Requirement
88
89
  none: false
89
90
  requirements:
@@ -101,5 +102,6 @@ test_files:
101
102
  - test/test_config_handle_options.rb
102
103
  - test/test_defaults.rb
103
104
  - test/test_helper.rb
105
+ - test/test_process_manager.rb
104
106
  - test/test_svutil.rb
105
107
  - test/test_validations.rb