qs 0.4.0 → 0.5.0

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/lib/qs/daemon.rb CHANGED
@@ -63,6 +63,10 @@ module Qs
63
63
  @daemon_data.name
64
64
  end
65
65
 
66
+ def process_label
67
+ @daemon_data.process_label
68
+ end
69
+
66
70
  def pid_file
67
71
  @daemon_data.pid_file
68
72
  end
@@ -129,10 +133,19 @@ module Qs
129
133
  self.daemon_data.min_workers,
130
134
  self.daemon_data.max_workers
131
135
  ){ |queue_item| process(queue_item) }
136
+
137
+ # add internal callbacks
132
138
  wp.on_worker_error do |worker, exception, queue_item|
133
139
  handle_worker_exception(exception, queue_item)
134
140
  end
135
141
  wp.on_worker_sleep{ @worker_available_io.write(SIGNAL) }
142
+
143
+ # add any configured callbacks
144
+ self.daemon_data.worker_start_procs.each{ |cb| wp.on_worker_start(&cb) }
145
+ self.daemon_data.worker_shutdown_procs.each{ |cb| wp.on_worker_shutdown(&cb) }
146
+ self.daemon_data.worker_sleep_procs.each{ |cb| wp.on_worker_sleep(&cb) }
147
+ self.daemon_data.worker_wakeup_procs.each{ |cb| wp.on_worker_wakeup(&cb) }
148
+
136
149
  wp.start
137
150
  wp
138
151
  end
@@ -246,6 +259,22 @@ module Qs
246
259
  self.max_workers(*args)
247
260
  end
248
261
 
262
+ def on_worker_start(&block)
263
+ self.configuration.worker_start_procs << block
264
+ end
265
+
266
+ def on_worker_shutdown(&block)
267
+ self.configuration.worker_shutdown_procs << block
268
+ end
269
+
270
+ def on_worker_sleep(&block)
271
+ self.configuration.worker_sleep_procs << block
272
+ end
273
+
274
+ def on_worker_wakeup(&block)
275
+ self.configuration.worker_wakeup_procs << block
276
+ end
277
+
249
278
  def verbose_logging(*args)
250
279
  self.configuration.verbose_logging(*args)
251
280
  end
@@ -286,14 +315,20 @@ module Qs
286
315
 
287
316
  option :shutdown_timeout
288
317
 
318
+ attr_accessor :process_label
289
319
  attr_accessor :init_procs, :error_procs
290
320
  attr_accessor :queues
321
+ attr_reader :worker_start_procs, :worker_shutdown_procs
322
+ attr_reader :worker_sleep_procs, :worker_wakeup_procs
291
323
 
292
324
  def initialize(values = nil)
293
325
  super(values)
326
+ @process_label = !(v = ENV['QS_PROCESS_LABEL'].to_s).empty? ? v : self.name
294
327
  @init_procs, @error_procs = [], []
328
+ @worker_start_procs, @worker_shutdown_procs = [], []
329
+ @worker_sleep_procs, @worker_wakeup_procs = [], []
295
330
  @queues = []
296
- @valid = nil
331
+ @valid = nil
297
332
  end
298
333
 
299
334
  def routes
@@ -302,9 +337,14 @@ module Qs
302
337
 
303
338
  def to_hash
304
339
  super.merge({
305
- :error_procs => self.error_procs,
306
- :queue_redis_keys => self.queues.map(&:redis_key),
307
- :routes => self.routes
340
+ :process_label => self.process_label,
341
+ :error_procs => self.error_procs,
342
+ :worker_start_procs => self.worker_start_procs,
343
+ :worker_shutdown_procs => self.worker_shutdown_procs,
344
+ :worker_sleep_procs => self.worker_sleep_procs,
345
+ :worker_wakeup_procs => self.worker_wakeup_procs,
346
+ :routes => self.routes,
347
+ :queue_redis_keys => self.queues.map(&:redis_key)
308
348
  })
309
349
  end
310
350
 
@@ -7,9 +7,11 @@ module Qs
7
7
  # options one time here and memoize their values. This way, we don't pay the
8
8
  # NsOptions overhead when reading them while handling a message.
9
9
 
10
- attr_reader :name
10
+ attr_reader :name, :process_label
11
11
  attr_reader :pid_file
12
12
  attr_reader :min_workers, :max_workers
13
+ attr_reader :worker_start_procs, :worker_shutdown_procs
14
+ attr_reader :worker_sleep_procs, :worker_wakeup_procs
13
15
  attr_reader :logger, :verbose_logging
14
16
  attr_reader :shutdown_timeout
15
17
  attr_reader :error_procs
@@ -17,16 +19,21 @@ module Qs
17
19
 
18
20
  def initialize(args = nil)
19
21
  args ||= {}
20
- @name = args[:name]
21
- @pid_file = args[:pid_file]
22
- @min_workers = args[:min_workers]
23
- @max_workers = args[:max_workers]
24
- @logger = args[:logger]
25
- @verbose_logging = !!args[:verbose_logging]
26
- @shutdown_timeout = args[:shutdown_timeout]
27
- @error_procs = args[:error_procs] || []
28
- @queue_redis_keys = args[:queue_redis_keys] || []
29
- @routes = build_routes(args[:routes] || [])
22
+ @name = args[:name]
23
+ @process_label = args[:process_label]
24
+ @pid_file = args[:pid_file]
25
+ @min_workers = args[:min_workers]
26
+ @max_workers = args[:max_workers]
27
+ @worker_start_procs = args[:worker_start_procs]
28
+ @worker_shutdown_procs = args[:worker_shutdown_procs]
29
+ @worker_sleep_procs = args[:worker_sleep_procs]
30
+ @worker_wakeup_procs = args[:worker_wakeup_procs]
31
+ @logger = args[:logger]
32
+ @verbose_logging = !!args[:verbose_logging]
33
+ @shutdown_timeout = args[:shutdown_timeout]
34
+ @error_procs = args[:error_procs] || []
35
+ @queue_redis_keys = args[:queue_redis_keys] || []
36
+ @routes = build_routes(args[:routes] || [])
30
37
  end
31
38
 
32
39
  def route_for(route_id)
data/lib/qs/process.rb CHANGED
@@ -17,8 +17,7 @@ module Qs
17
17
  def initialize(daemon, options = nil)
18
18
  options ||= {}
19
19
  @daemon = daemon
20
- process_label = ignore_if_blank(ENV['QS_PROCESS_LABEL']) || @daemon.name
21
- @name = "qs: #{process_label}"
20
+ @name = "qs: #{@daemon.process_label}"
22
21
  @logger = @daemon.logger
23
22
 
24
23
  @pid_file = PIDFile.new(@daemon.pid_file)
data/lib/qs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qs
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
data/qs.gemspec CHANGED
@@ -23,6 +23,6 @@ Gem::Specification.new do |gem|
23
23
  gem.add_dependency("ns-options", ["~> 1.1"])
24
24
  gem.add_dependency("SystemTimer", ["~> 1.2"])
25
25
 
26
- gem.add_development_dependency("assert", ["~> 2.14"])
26
+ gem.add_development_dependency("assert", ["~> 2.15"])
27
27
  gem.add_development_dependency("scmd", ["~> 2.3"])
28
28
  end
@@ -9,37 +9,50 @@ class Qs::DaemonData
9
9
  class UnitTests < Assert::Context
10
10
  desc "Qs::DaemonData"
11
11
  setup do
12
- @name = Factory.string
13
- @pid_file = Factory.file_path
14
- @min_workers = Factory.integer
15
- @max_workers = Factory.integer
16
- @logger = Factory.string
17
- @verbose_logging = Factory.boolean
12
+ @name = Factory.string
13
+ @process_label = Factory.string
14
+ @pid_file = Factory.file_path
15
+ @min_workers = Factory.integer
16
+ @max_workers = Factory.integer
17
+ @start_procs = Factory.integer(3).times.map{ proc{} }
18
+ @shutdown_procs = Factory.integer(3).times.map{ proc{} }
19
+ @sleep_procs = Factory.integer(3).times.map{ proc{} }
20
+ @wakeup_procs = Factory.integer(3).times.map{ proc{} }
21
+ @logger = Factory.string
22
+ @verbose_logging = Factory.boolean
18
23
  @shutdown_timeout = Factory.integer
19
- @error_procs = [ proc{ Factory.string } ]
20
- @queue_redis_keys = (0..Factory.integer(3)).map{ Factory.string }
24
+ @error_procs = [ proc{ Factory.string } ]
25
+ @queue_redis_keys = Factory.integer(3).times.map{ Factory.string }
26
+
21
27
  @routes = (0..Factory.integer(3)).map do
22
28
  Qs::Route.new(Factory.string, TestHandler.to_s).tap(&:validate!)
23
29
  end
24
30
 
25
31
  @daemon_data = Qs::DaemonData.new({
26
- :name => @name,
27
- :pid_file => @pid_file,
28
- :min_workers => @min_workers,
29
- :max_workers => @max_workers,
30
- :logger => @logger,
31
- :verbose_logging => @verbose_logging,
32
- :shutdown_timeout => @shutdown_timeout,
33
- :error_procs => @error_procs,
34
- :queue_redis_keys => @queue_redis_keys,
35
- :routes => @routes
32
+ :name => @name,
33
+ :process_label => @process_label,
34
+ :pid_file => @pid_file,
35
+ :min_workers => @min_workers,
36
+ :max_workers => @max_workers,
37
+ :worker_start_procs => @start_procs,
38
+ :worker_shutdown_procs => @shutdown_procs,
39
+ :worker_sleep_procs => @sleep_procs,
40
+ :worker_wakeup_procs => @wakeup_procs,
41
+ :logger => @logger,
42
+ :verbose_logging => @verbose_logging,
43
+ :shutdown_timeout => @shutdown_timeout,
44
+ :error_procs => @error_procs,
45
+ :queue_redis_keys => @queue_redis_keys,
46
+ :routes => @routes
36
47
  })
37
48
  end
38
49
  subject{ @daemon_data }
39
50
 
40
- should have_readers :name
51
+ should have_readers :name, :process_label
41
52
  should have_readers :pid_file
42
53
  should have_readers :min_workers, :max_workers
54
+ should have_readers :worker_start_procs, :worker_shutdown_procs
55
+ should have_readers :worker_sleep_procs, :worker_wakeup_procs
43
56
  should have_readers :logger, :verbose_logging
44
57
  should have_readers :shutdown_timeout
45
58
  should have_readers :error_procs
@@ -48,9 +61,14 @@ class Qs::DaemonData
48
61
 
49
62
  should "know its attributes" do
50
63
  assert_equal @name, subject.name
64
+ assert_equal @process_label, subject.process_label
51
65
  assert_equal @pid_file, subject.pid_file
52
66
  assert_equal @min_workers, subject.min_workers
53
67
  assert_equal @max_workers, subject.max_workers
68
+ assert_equal @start_procs, subject.worker_start_procs
69
+ assert_equal @shutdown_procs, subject.worker_shutdown_procs
70
+ assert_equal @sleep_procs, subject.worker_sleep_procs
71
+ assert_equal @wakeup_procs, subject.worker_wakeup_procs
54
72
  assert_equal @logger, subject.logger
55
73
  assert_equal @verbose_logging, subject.verbose_logging
56
74
  assert_equal @shutdown_timeout, subject.shutdown_timeout
@@ -20,6 +20,8 @@ module Qs::Daemon
20
20
  should have_imeths :configuration
21
21
  should have_imeths :name, :pid_file
22
22
  should have_imeths :min_workers, :max_workers, :workers
23
+ should have_imeths :on_worker_start, :on_worker_shutdown
24
+ should have_imeths :on_worker_sleep, :on_worker_wakeup
23
25
  should have_imeths :verbose_logging, :logger
24
26
  should have_imeths :shutdown_timeout
25
27
  should have_imeths :init, :error, :queue
@@ -68,6 +70,22 @@ module Qs::Daemon
68
70
  assert_equal new_workers, subject.max_workers
69
71
  end
70
72
 
73
+ should "allow reading/writing its configuration worker procs" do
74
+ p = proc{}
75
+
76
+ subject.on_worker_start(&p)
77
+ assert_equal [p], subject.configuration.worker_start_procs
78
+
79
+ subject.on_worker_shutdown(&p)
80
+ assert_equal [p], subject.configuration.worker_shutdown_procs
81
+
82
+ subject.on_worker_sleep(&p)
83
+ assert_equal [p], subject.configuration.worker_sleep_procs
84
+
85
+ subject.on_worker_wakeup(&p)
86
+ assert_equal [p], subject.configuration.worker_wakeup_procs
87
+ end
88
+
71
89
  should "allow reading/writing its configuration verbose logging" do
72
90
  new_verbose = Factory.boolean
73
91
  subject.verbose_logging(new_verbose)
@@ -114,16 +132,26 @@ module Qs::Daemon
114
132
  @qs_init_called = false
115
133
  Assert.stub(Qs, :init){ @qs_init_called = true }
116
134
 
117
- @queue = Qs::Queue.new do
118
- name(Factory.string)
119
- job 'test', TestHandler.to_s
120
- end
121
135
  @daemon_class.name Factory.string
122
136
  @daemon_class.pid_file Factory.file_path
123
137
  @daemon_class.workers Factory.integer
124
138
  @daemon_class.verbose_logging Factory.boolean
125
139
  @daemon_class.shutdown_timeout Factory.integer
126
140
  @daemon_class.error{ Factory.string }
141
+
142
+ @start_procs = Factory.integer(3).times.map{ proc{} }
143
+ @shutdown_procs = Factory.integer(3).times.map{ proc{} }
144
+ @sleep_procs = Factory.integer(3).times.map{ proc{} }
145
+ @wakeup_procs = Factory.integer(3).times.map{ proc{} }
146
+ @start_procs.each { |p| @daemon_class.on_worker_start(&p) }
147
+ @shutdown_procs.each { |p| @daemon_class.on_worker_shutdown(&p) }
148
+ @sleep_procs.each { |p| @daemon_class.on_worker_sleep(&p) }
149
+ @wakeup_procs.each { |p| @daemon_class.on_worker_wakeup(&p) }
150
+
151
+ @queue = Qs::Queue.new do
152
+ name(Factory.string)
153
+ job 'test', TestHandler.to_s
154
+ end
127
155
  @daemon_class.queue @queue
128
156
 
129
157
  @client_spy = nil
@@ -148,13 +176,19 @@ module Qs::Daemon
148
176
  class InitTests < InitSetupTests
149
177
  desc "when init"
150
178
  setup do
179
+ @current_env_process_label = ENV['QS_PROCESS_LABEL']
180
+ ENV['QS_PROCESS_LABEL'] = Factory.string
181
+
151
182
  @daemon = @daemon_class.new
152
183
  end
184
+ teardown do
185
+ ENV['QS_PROCESS_LABEL'] = @current_env_process_label
186
+ end
153
187
  subject{ @daemon }
154
188
 
155
189
  should have_readers :daemon_data, :logger
156
190
  should have_readers :signals_redis_key, :queue_redis_keys
157
- should have_imeths :name, :pid_file
191
+ should have_imeths :name, :process_label, :pid_file
158
192
  should have_imeths :running?
159
193
  should have_imeths :start, :stop, :halt
160
194
 
@@ -171,15 +205,24 @@ module Qs::Daemon
171
205
  data = subject.daemon_data
172
206
 
173
207
  assert_instance_of Qs::DaemonData, data
174
- assert_equal configuration.name, data.name
175
- assert_equal configuration.pid_file, data.pid_file
176
- assert_equal configuration.min_workers, data.min_workers
177
- assert_equal configuration.max_workers, data.max_workers
208
+ assert_equal configuration.name, data.name
209
+ assert_equal configuration.process_label, data.process_label
210
+ assert_equal configuration.pid_file, data.pid_file
211
+ assert_equal configuration.min_workers, data.min_workers
212
+ assert_equal configuration.max_workers, data.max_workers
213
+
214
+ assert_equal configuration.worker_start_procs, data.worker_start_procs
215
+ assert_equal configuration.worker_shutdown_procs, data.worker_shutdown_procs
216
+ assert_equal configuration.worker_sleep_procs, data.worker_sleep_procs
217
+ assert_equal configuration.worker_wakeup_procs, data.worker_wakeup_procs
218
+
178
219
  assert_equal configuration.verbose_logging, data.verbose_logging
179
220
  assert_equal configuration.shutdown_timeout, data.shutdown_timeout
180
221
  assert_equal configuration.error_procs, data.error_procs
181
- assert_equal [@queue.redis_key], data.queue_redis_keys
222
+
223
+ assert_equal [@queue.redis_key], data.queue_redis_keys
182
224
  assert_equal configuration.routes, data.routes.values
225
+
183
226
  assert_instance_of configuration.logger.class, data.logger
184
227
  end
185
228
 
@@ -190,10 +233,11 @@ module Qs::Daemon
190
233
  assert_equal data.queue_redis_keys, subject.queue_redis_keys
191
234
  end
192
235
 
193
- should "know its name and pid file" do
236
+ should "know its name, process label and pid file" do
194
237
  data = subject.daemon_data
195
- assert_equal data.name, subject.name
196
- assert_equal data.pid_file, subject.pid_file
238
+ assert_equal data.name, subject.name
239
+ assert_equal data.process_label, subject.process_label
240
+ assert_equal data.pid_file, subject.pid_file
197
241
  end
198
242
 
199
243
  should "build a client" do
@@ -242,8 +286,22 @@ module Qs::Daemon
242
286
  assert_not_nil @worker_pool_spy
243
287
  assert_equal @daemon_class.min_workers, @worker_pool_spy.min_workers
244
288
  assert_equal @daemon_class.max_workers, @worker_pool_spy.max_workers
245
- assert_equal 1, @worker_pool_spy.on_worker_error_callbacks.size
246
- assert_equal 1, @worker_pool_spy.on_worker_sleep_callbacks.size
289
+
290
+ exp = 1
291
+ assert_equal exp, @worker_pool_spy.on_worker_error_callbacks.size
292
+
293
+ exp = @start_procs.size
294
+ assert_equal exp, @worker_pool_spy.on_worker_start_callbacks.size
295
+
296
+ exp = @shutdown_procs.size
297
+ assert_equal exp, @worker_pool_spy.on_worker_shutdown_callbacks.size
298
+
299
+ exp = @sleep_procs.size + 1 # configured plus 1 internal
300
+ assert_equal exp, @worker_pool_spy.on_worker_sleep_callbacks.size
301
+
302
+ exp = @wakeup_procs.size
303
+ assert_equal exp, @worker_pool_spy.on_worker_wakeup_callbacks.size
304
+
247
305
  assert_true @worker_pool_spy.start_called
248
306
  end
249
307
 
@@ -549,8 +607,11 @@ module Qs::Daemon
549
607
  should have_options :min_workers, :max_workers
550
608
  should have_options :verbose_logging, :logger
551
609
  should have_options :shutdown_timeout
610
+ should have_accessors :process_label
552
611
  should have_accessors :init_procs, :error_procs
553
612
  should have_accessors :queues
613
+ should have_readers :worker_start_procs, :worker_shutdown_procs
614
+ should have_readers :worker_sleep_procs, :worker_wakeup_procs
554
615
  should have_imeths :routes
555
616
  should have_imeths :to_hash
556
617
  should have_imeths :valid?, :validate!
@@ -559,7 +620,7 @@ module Qs::Daemon
559
620
  assert_includes NsOptions::Proxy, subject.class
560
621
  end
561
622
 
562
- should "default its options" do
623
+ should "default its options and attrs" do
563
624
  config = Configuration.new
564
625
  assert_nil config.name
565
626
  assert_nil config.pid_file
@@ -568,12 +629,36 @@ module Qs::Daemon
568
629
  assert_true config.verbose_logging
569
630
  assert_instance_of Qs::NullLogger, config.logger
570
631
  assert_nil subject.shutdown_timeout
632
+
633
+ assert_nil config.process_label
571
634
  assert_equal [], config.init_procs
572
635
  assert_equal [], config.error_procs
636
+ assert_equal [], subject.worker_start_procs
637
+ assert_equal [], subject.worker_shutdown_procs
638
+ assert_equal [], subject.worker_sleep_procs
639
+ assert_equal [], subject.worker_wakeup_procs
573
640
  assert_equal [], config.queues
574
641
  assert_equal [], config.routes
575
642
  end
576
643
 
644
+ should "prefer an env var for the label but fall back to the name option" do
645
+ current_env_process_label = ENV['QS_PROCESS_LABEL']
646
+
647
+ ENV['QS_PROCESS_LABEL'] = Factory.string
648
+ config = Configuration.new(:name => Factory.string)
649
+ assert_equal ENV['QS_PROCESS_LABEL'], config.process_label
650
+
651
+ ENV['QS_PROCESS_LABEL'] = ''
652
+ config = Configuration.new(:name => Factory.string)
653
+ assert_equal config.name, config.process_label
654
+
655
+ ENV.delete('QS_PROCESS_LABEL')
656
+ config = Configuration.new(:name => Factory.string)
657
+ assert_equal config.name, config.process_label
658
+
659
+ ENV['QS_PROCESS_LABEL'] = current_env_process_label
660
+ end
661
+
577
662
  should "not be valid by default" do
578
663
  assert_false subject.valid?
579
664
  end
@@ -582,12 +667,20 @@ module Qs::Daemon
582
667
  assert_equal subject.queues.map(&:routes).flatten, subject.routes
583
668
  end
584
669
 
585
- should "include its error procs, queue redis keys and routes in its hash" do
670
+ should "include some attrs (not just the options) in its hash" do
586
671
  config_hash = subject.to_hash
587
- assert_equal subject.error_procs, config_hash[:error_procs]
588
- expected = subject.queues.map(&:redis_key)
589
- assert_equal expected, config_hash[:queue_redis_keys]
590
- assert_equal subject.routes, config_hash[:routes]
672
+
673
+ assert_equal subject.process_label, config_hash[:process_label]
674
+ assert_equal subject.error_procs, config_hash[:error_procs]
675
+ assert_equal subject.routes, config_hash[:routes]
676
+
677
+ exp = subject.queues.map(&:redis_key)
678
+ assert_equal exp, config_hash[:queue_redis_keys]
679
+
680
+ assert_equal subject.worker_start_procs, config_hash[:worker_start_procs]
681
+ assert_equal subject.worker_shutdown_procs, config_hash[:worker_shutdown_procs]
682
+ assert_equal subject.worker_sleep_procs, config_hash[:worker_sleep_procs]
683
+ assert_equal subject.worker_wakeup_procs, config_hash[:worker_wakeup_procs]
591
684
  end
592
685
 
593
686
  should "call its init procs when validated" do
@@ -22,9 +22,7 @@ class Qs::Process
22
22
  class InitTests < UnitTests
23
23
  desc "when init"
24
24
  setup do
25
- @current_env_process_label = ENV['QS_PROCESS_LABEL']
26
25
  @current_env_skip_daemonize = ENV['QS_SKIP_DAEMONIZE']
27
- ENV.delete('QS_PROCESS_LABEL')
28
26
  ENV.delete('QS_SKIP_DAEMONIZE')
29
27
 
30
28
  @daemon_spy = DaemonSpy.new
@@ -41,7 +39,6 @@ class Qs::Process
41
39
  end
42
40
  teardown do
43
41
  ENV['QS_SKIP_DAEMONIZE'] = @current_env_skip_daemonize
44
- ENV['QS_PROCESS_LABEL'] = @current_env_process_label
45
42
  end
46
43
  subject{ @process }
47
44
 
@@ -54,24 +51,12 @@ class Qs::Process
54
51
  end
55
52
 
56
53
  should "know its name, pid file, signal io and restart cmd" do
57
- assert_equal "qs: #{@daemon_spy.name}", subject.name
54
+ assert_equal "qs: #{@daemon_spy.process_label}", subject.name
58
55
  assert_equal @pid_file_spy, subject.pid_file
59
56
  assert_instance_of Qs::IOPipe, subject.signal_io
60
57
  assert_equal @restart_cmd_spy, subject.restart_cmd
61
58
  end
62
59
 
63
- should "set its name using env vars" do
64
- ENV['QS_PROCESS_LABEL'] = Factory.string
65
- process = @process_class.new(@daemon_spy)
66
- assert_equal "qs: #{ENV['QS_PROCESS_LABEL']}", process.name
67
- end
68
-
69
- should "ignore blank env values for its name" do
70
- ENV['QS_PROCESS_LABEL'] = ''
71
- process = @process_class.new(@daemon_spy)
72
- assert_equal "qs: #{@daemon_spy.name}", process.name
73
- end
74
-
75
60
  should "not daemonize by default" do
76
61
  process = @process_class.new(@daemon_spy)
77
62
  assert_false process.daemonize?
@@ -415,11 +400,15 @@ class Qs::Process
415
400
 
416
401
  queue Qs::Queue.new{ name Factory.string }
417
402
 
403
+ attr_accessor :process_label
418
404
  attr_accessor :start_called, :stop_called, :halt_called
419
405
  attr_reader :start_args, :stop_args, :halt_args
420
406
 
421
407
  def initialize(*args)
422
408
  super
409
+
410
+ @process_label = Factory.string
411
+
423
412
  @start_args = nil
424
413
  @start_called = false
425
414
  @stop_args = nil
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qs
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 4
8
+ - 5
9
9
  - 0
10
- version: 0.4.0
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kelly Redding
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2015-08-04 00:00:00 Z
19
+ date: 2015-09-08 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  requirement: &id001 !ruby/object:Gem::Requirement
@@ -84,11 +84,11 @@ dependencies:
84
84
  requirements:
85
85
  - - ~>
86
86
  - !ruby/object:Gem::Version
87
- hash: 31
87
+ hash: 29
88
88
  segments:
89
89
  - 2
90
- - 14
91
- version: "2.14"
90
+ - 15
91
+ version: "2.15"
92
92
  type: :development
93
93
  name: assert
94
94
  version_requirements: *id005
@@ -238,7 +238,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
238
238
  requirements: []
239
239
 
240
240
  rubyforge_project:
241
- rubygems_version: 1.8.25
241
+ rubygems_version: 1.8.29
242
242
  signing_key:
243
243
  specification_version: 3
244
244
  summary: Define message queues. Process jobs and events. Profit.