stapfen 1.1.1 → 1.2.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/Gemfile +1 -1
- data/lib/stapfen/logger.rb +48 -0
- data/lib/stapfen/version.rb +1 -1
- data/lib/stapfen/worker.rb +23 -27
- data/spec/logger_spec.rb +42 -0
- data/spec/worker_spec.rb +1 -34
- data/stapfen.gemspec +1 -1
- metadata +10 -8
data/Gemfile
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
|
2
|
+
module Stapfen
|
3
|
+
# Logging module to ensure that {{Stapfen::Worker}} classes can perform
|
4
|
+
# logging if they've been configured to
|
5
|
+
module Logger
|
6
|
+
# Collection of methods to pass arguments through from the class and
|
7
|
+
# instance level to a configured logger
|
8
|
+
PROXY_METHODS = [:info, :debug, :warn, :error].freeze
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
PROXY_METHODS.each do |method|
|
12
|
+
define_method(method) do |*args|
|
13
|
+
proxy_log_method(method, args)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def proxy_log_method(method, arguments)
|
20
|
+
if self.logger
|
21
|
+
self.logger.send(method, *arguments)
|
22
|
+
return true
|
23
|
+
end
|
24
|
+
return false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.included(klass)
|
29
|
+
klass.extend(ClassMethods)
|
30
|
+
end
|
31
|
+
|
32
|
+
PROXY_METHODS.each do |method|
|
33
|
+
define_method(method) do |*args|
|
34
|
+
proxy_log_method(method, args)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def proxy_log_method(method, arguments)
|
41
|
+
if self.class.logger
|
42
|
+
self.class.logger.send(method, *arguments)
|
43
|
+
return true
|
44
|
+
end
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/stapfen/version.rb
CHANGED
data/lib/stapfen/worker.rb
CHANGED
@@ -1,16 +1,22 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
1
|
+
require 'stomp'
|
2
|
+
require 'stapfen/logger'
|
3
3
|
|
4
4
|
module Stapfen
|
5
5
|
class Worker
|
6
|
+
include Stapfen::Logger
|
7
|
+
|
6
8
|
class << self
|
7
|
-
attr_accessor :configuration, :consumers
|
9
|
+
attr_accessor :configuration, :consumers, :logger
|
8
10
|
end
|
9
11
|
|
12
|
+
# Instantiate a new +Worker+ instance and run it
|
10
13
|
def self.run!
|
11
14
|
self.new.run
|
12
15
|
end
|
13
16
|
|
17
|
+
# Expects a block to be passed which will yield the appropriate
|
18
|
+
# configuration for the Stomp gem. Whatever the block yields will be passed
|
19
|
+
# directly into the {{Stomp::Client#new}} method
|
14
20
|
def self.configure
|
15
21
|
unless block_given?
|
16
22
|
raise Stapfen::ConfigurationError
|
@@ -18,6 +24,14 @@ module Stapfen
|
|
18
24
|
@configuration = yield
|
19
25
|
end
|
20
26
|
|
27
|
+
# Optional method, should be passed a block which will yield a {{Logger}}
|
28
|
+
# instance for the Stapfen worker to use
|
29
|
+
def self.log
|
30
|
+
@logger = yield
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
# Main message consumption block
|
21
35
|
def self.consume(queue_name, headers={}, &block)
|
22
36
|
unless block_given?
|
23
37
|
raise Stapfen::ConsumeError, "Cannot consume #{queue_name} without a block!"
|
@@ -32,12 +46,11 @@ module Stapfen
|
|
32
46
|
handle_signals!
|
33
47
|
end
|
34
48
|
|
35
|
-
|
36
49
|
def run
|
37
|
-
@client =
|
38
|
-
@client.connect
|
50
|
+
@client = Stomp::Client.new(self.class.configuration)
|
39
51
|
|
40
52
|
self.class.consumers.each do |name, headers, block|
|
53
|
+
|
41
54
|
# We're taking each block and turning it into a method so that we can
|
42
55
|
# use the instance scope instead of the blocks originally bound scope
|
43
56
|
# which would be at a class level
|
@@ -45,7 +58,6 @@ module Stapfen
|
|
45
58
|
self.class.send(:define_method, method_name, &block)
|
46
59
|
|
47
60
|
client.subscribe(name, headers) do |message|
|
48
|
-
puts "invoking #{method_name} for #{message.inspect}"
|
49
61
|
self.send(method_name, message)
|
50
62
|
end
|
51
63
|
end
|
@@ -54,8 +66,8 @@ module Stapfen
|
|
54
66
|
# Performing this join/open loop to make sure that we don't
|
55
67
|
# experience potential deadlocks between signal handlers who might
|
56
68
|
# close the connection, and an infinite Client#join call
|
57
|
-
while client.
|
58
|
-
|
69
|
+
while client.open? do
|
70
|
+
client.join(1)
|
59
71
|
end
|
60
72
|
rescue Interrupt
|
61
73
|
exit_cleanly
|
@@ -73,25 +85,9 @@ module Stapfen
|
|
73
85
|
end
|
74
86
|
|
75
87
|
def exit_cleanly
|
76
|
-
|
77
|
-
client.
|
88
|
+
unless client.closed?
|
89
|
+
client.close
|
78
90
|
end
|
79
91
|
end
|
80
|
-
|
81
|
-
# Convert Stapfen configuration into an OnStomp URL
|
82
|
-
#
|
83
|
-
# @return [String]
|
84
|
-
def generate_uri
|
85
|
-
config = self.class.configuration
|
86
|
-
raise Stapfen::ConfigurationError if config.nil? || config.empty?
|
87
|
-
|
88
|
-
user_info = nil
|
89
|
-
|
90
|
-
if config[:login] && config[:passcode]
|
91
|
-
user_info = "#{config[:login]}:#{config[:passcode]}@"
|
92
|
-
end
|
93
|
-
|
94
|
-
"stomp://#{user_info}#{config[:host]}:#{config[:port]}"
|
95
|
-
end
|
96
92
|
end
|
97
93
|
end
|
data/spec/logger_spec.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Stapfen::Logger do
|
4
|
+
let(:mixin) do
|
5
|
+
Class.new do
|
6
|
+
include Stapfen::Logger
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
subject(:logger) { mixin.new }
|
11
|
+
|
12
|
+
context 'instance methods' do
|
13
|
+
it { should respond_to :info }
|
14
|
+
it { should respond_to :debug }
|
15
|
+
it { should respond_to :warn }
|
16
|
+
it { should respond_to :error }
|
17
|
+
|
18
|
+
context 'without an initialized logger' do
|
19
|
+
before :each do
|
20
|
+
logger.class.stub(:logger)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'should discard info messages' do
|
24
|
+
expect(logger.info('rspec')).to be_false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'with an initialized logger' do
|
29
|
+
let(:plogger) { double('RSpec Logger') }
|
30
|
+
|
31
|
+
before :each do
|
32
|
+
logger.class.stub(:logger).and_return(plogger)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should pass info messages along' do
|
36
|
+
plogger.should_receive(:info)
|
37
|
+
|
38
|
+
expect(logger.info('rspec')).to be_true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/worker_spec.rb
CHANGED
@@ -10,6 +10,7 @@ describe Stapfen::Worker do
|
|
10
10
|
it { should respond_to :run! }
|
11
11
|
it { should respond_to :configure }
|
12
12
|
it { should respond_to :consume }
|
13
|
+
it { should respond_to :logger }
|
13
14
|
|
14
15
|
describe '#configure' do
|
15
16
|
it 'should error when not passed a block' do
|
@@ -53,38 +54,4 @@ describe Stapfen::Worker do
|
|
53
54
|
end
|
54
55
|
end
|
55
56
|
|
56
|
-
context 'instance methods' do
|
57
|
-
describe '#generate_uri' do
|
58
|
-
subject(:uri) { worker.generate_uri }
|
59
|
-
let(:conf) { {} }
|
60
|
-
|
61
|
-
before :each do
|
62
|
-
worker.class.stub(:configuration).and_return(conf)
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'with a blank configuration' do
|
66
|
-
it 'should raise an error' do
|
67
|
-
expect { worker.generate_uri }.to raise_error(Stapfen::ConfigurationError)
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'with an unauthenticated non-ssl host' do
|
72
|
-
let(:conf) { {:host => 'localhost', :port => 61613} }
|
73
|
-
|
74
|
-
it { should eql('stomp://localhost:61613') }
|
75
|
-
end
|
76
|
-
|
77
|
-
context 'with an authentication ssl host' do
|
78
|
-
let(:conf) do
|
79
|
-
{:host => 'localhost',
|
80
|
-
:port => 61613,
|
81
|
-
:login => 'admin',
|
82
|
-
:passcode => 'admin'}
|
83
|
-
end
|
84
|
-
|
85
|
-
it { should eql('stomp://admin:admin@localhost:61613') }
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
57
|
end
|
data/stapfen.gemspec
CHANGED
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
|
+
version: 1.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,16 +9,16 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-07-
|
12
|
+
date: 2013-07-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: stomp
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.
|
21
|
+
version: 1.2.8
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.
|
29
|
+
version: 1.2.8
|
30
30
|
description: A simple gem for writing good basic STOMP workers
|
31
31
|
email:
|
32
32
|
- rtyler.croy@lookout.com
|
@@ -42,8 +42,10 @@ files:
|
|
42
42
|
- Rakefile
|
43
43
|
- examples/simple.rb
|
44
44
|
- lib/stapfen.rb
|
45
|
+
- lib/stapfen/logger.rb
|
45
46
|
- lib/stapfen/version.rb
|
46
47
|
- lib/stapfen/worker.rb
|
48
|
+
- spec/logger_spec.rb
|
47
49
|
- spec/spec_helper.rb
|
48
50
|
- spec/worker_spec.rb
|
49
51
|
- stapfen.gemspec
|
@@ -61,7 +63,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
61
63
|
version: '0'
|
62
64
|
segments:
|
63
65
|
- 0
|
64
|
-
hash:
|
66
|
+
hash: -644536034951123366
|
65
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
68
|
none: false
|
67
69
|
requirements:
|
@@ -70,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
72
|
version: '0'
|
71
73
|
segments:
|
72
74
|
- 0
|
73
|
-
hash:
|
75
|
+
hash: -644536034951123366
|
74
76
|
requirements: []
|
75
77
|
rubyforge_project:
|
76
78
|
rubygems_version: 1.8.25
|
@@ -78,6 +80,6 @@ signing_key:
|
|
78
80
|
specification_version: 3
|
79
81
|
summary: A simple gem for writing good basic STOMP workers
|
80
82
|
test_files:
|
83
|
+
- spec/logger_spec.rb
|
81
84
|
- spec/spec_helper.rb
|
82
85
|
- spec/worker_spec.rb
|
83
|
-
has_rdoc:
|