stapfen 1.4.2 → 1.4.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/Gemfile CHANGED
@@ -8,4 +8,5 @@ group :development do
8
8
  gem 'rake'
9
9
  gem 'rspec', '~> 2.11'
10
10
  gem 'guard-rspec'
11
+ gem 'debugger'
11
12
  end
@@ -1,3 +1,3 @@
1
1
  module Stapfen
2
- VERSION = '1.4.2'
2
+ VERSION = '1.4.3'
3
3
  end
@@ -10,7 +10,6 @@ module Stapfen
10
10
 
11
11
  class << self
12
12
  attr_accessor :configuration, :consumers, :logger, :destructor
13
- attr_accessor :workers
14
13
  end
15
14
 
16
15
  # Instantiate a new +Worker+ instance and run it
@@ -61,20 +60,37 @@ module Stapfen
61
60
  @@workers
62
61
  end
63
62
 
63
+ # Invoke +exit_cleanly+ on each of the registered Worker instances that
64
+ # this class is keeping track of
65
+ #
66
+ # @return [Boolean] Whether or not we've exited/terminated cleanly
67
+ def self.exit_cleanly
68
+ return false if workers.empty?
69
+
70
+ cleanly = true
71
+ workers.each do |w|
72
+ begin
73
+ w.exit_cleanly
74
+ rescue StandardError => ex
75
+ $stderr.write("Failure while exiting cleanly #{ex.inspect}\n#{ex.backtrace}")
76
+ cleanly = false
77
+ end
78
+ end
79
+
80
+ return cleanly
81
+ end
82
+
64
83
  # Utility method to set up the proper worker signal handlers
65
84
  def self.handle_signals
66
85
  return if @@signals_handled
67
86
 
68
87
  Signal.trap(:INT) do
69
- @@workers.each do |w|
70
- w.exit_cleanly
71
- end
88
+ self.exit_cleanly
72
89
  exit!
73
90
  end
91
+
74
92
  Signal.trap(:TERM) do
75
- @@workers.each do |w|
76
- w.exit_cleanly
77
- end
93
+ self.exit_cleanly
78
94
  end
79
95
 
80
96
  @@signals_handled = true
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '../lib'))
2
2
 
3
3
  require 'stapfen'
4
+ require 'debugger'
data/spec/worker_spec.rb CHANGED
@@ -32,6 +32,47 @@ describe Stapfen::Worker do
32
32
  end
33
33
 
34
34
 
35
+ describe '#exit_cleanly' do
36
+ subject(:result) { worker.exit_cleanly }
37
+
38
+ context 'with no worker classes' do
39
+ it { should be_false }
40
+ end
41
+
42
+ context 'with a single worker class' do
43
+ let(:w) { double('Fake worker instance') }
44
+
45
+ before :each do
46
+ worker.class_variable_set(:@@workers, [w])
47
+ end
48
+
49
+ it "should execute the worker's #exit_cleanly method" do
50
+ w.should_receive(:exit_cleanly)
51
+ expect(result).to be_true
52
+ end
53
+
54
+ it "should return false if the worker's #exit_cleanly method" do
55
+ w.should_receive(:exit_cleanly).and_raise(StandardError)
56
+ expect(result).to be_false
57
+ end
58
+ end
59
+
60
+ context 'with multiple worker classes' do
61
+ let(:w1) { double('Fake Worker 1') }
62
+ let(:w2) { double('Fake Worker 2') }
63
+
64
+ before :each do
65
+ worker.class_variable_set(:@@workers, [w1, w2])
66
+ end
67
+
68
+ it 'should invoke both #exit_cleanly methods' do
69
+ w1.should_receive(:exit_cleanly)
70
+ w2.should_receive(:exit_cleanly)
71
+ expect(result).to be_true
72
+ end
73
+ end
74
+ end
75
+
35
76
  describe 'consume' do
36
77
  it 'should raise an error if no block is passed' do
37
78
  expect {
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stapfen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: 1.4.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-10 00:00:00.000000000 Z
12
+ date: 2013-09-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: stomp
@@ -63,7 +63,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
63
63
  version: '0'
64
64
  segments:
65
65
  - 0
66
- hash: 1191286362645180657
66
+ hash: -1405776487740339593
67
67
  required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  none: false
69
69
  requirements:
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  version: '0'
73
73
  segments:
74
74
  - 0
75
- hash: 1191286362645180657
75
+ hash: -1405776487740339593
76
76
  requirements: []
77
77
  rubyforge_project:
78
78
  rubygems_version: 1.8.25