stapfen 1.4.2 → 1.4.3

Sign up to get free protection for your applications and to get access to all the features.
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