cottontail 2.0.0.pre.1 → 2.0.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.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +1 -2
- data/README.md +1 -1
- data/cottontail.gemspec +2 -2
- data/lib/cottontail/configurable.rb +17 -4
- data/lib/cottontail/consumer.rb +53 -20
- data/lib/cottontail/consumer/launcher.rb +1 -3
- data/lib/cottontail/version.rb +1 -1
- data/spec/cottontail/configurable_inheritance_spec.rb +30 -0
- data/spec/cottontail/configurable_spec.rb +8 -7
- data/spec/cottontail/consumer/collection_spec.rb +19 -1
- data/spec/integration/consumer_simple_spec.rb +26 -13
- data/spec/performance/consumer_simple_spec.rb +57 -0
- data/spec/spec_helper.rb +18 -2
- data/spec/support/test_consumer.rb +31 -30
- metadata +15 -14
- data/spec/support/coverage.rb +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d9bee2a9a93ed919f90a527fc37c7ff1ac07077c
|
4
|
+
data.tar.gz: 8220742b6ca0c05d36aaaf54bc90befd6aba9992
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ceaaa8c4383d3e0249aefe4e9f870debdb9dd8b367b7988fca7398af4e70683c59b083d0de2a55f13a8bcc712b8a1dc4fa0fe1b68a49914f2c477e3e1cd20d3
|
7
|
+
data.tar.gz: 8fac03100e7b0eb3bbe3905dfcd7dda8001623b4c1df38aea096e4653fb21290ab648c7ecf67483d2b8849e0ff4b7886bd4156d9b0375a273c4a8482672d34ae
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/cottontail.gemspec
CHANGED
@@ -20,6 +20,6 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
22
|
s.add_runtime_dependency "bunny", "~> 2"
|
23
|
-
s.add_runtime_dependency "yell", ">= 2", "
|
24
|
-
s.add_runtime_dependency "activesupport", ">= 3", "
|
23
|
+
s.add_runtime_dependency "yell", ">= 2", "< 3"
|
24
|
+
s.add_runtime_dependency "activesupport", ">= 3", "< 5"
|
25
25
|
end
|
@@ -15,8 +15,7 @@ module Cottontail #:nodoc:
|
|
15
15
|
if respond_to?(:superclass) && superclass.respond_to?(:config)
|
16
16
|
superclass.config.inheritable_copy
|
17
17
|
else
|
18
|
-
# create a new "anonymous" class
|
19
|
-
# reader methods
|
18
|
+
# create a new "anonymous" class
|
20
19
|
Class.new(Configuration).new
|
21
20
|
end
|
22
21
|
end
|
@@ -33,8 +32,12 @@ module Cottontail #:nodoc:
|
|
33
32
|
private
|
34
33
|
|
35
34
|
class Configuration #:nodoc:
|
36
|
-
def initialize
|
35
|
+
def initialize(parent = nil)
|
37
36
|
reset!
|
37
|
+
|
38
|
+
if parent.kind_of?(Cottontail::Configuration)
|
39
|
+
parent.each { |k, v| set(k, v) }
|
40
|
+
end
|
38
41
|
end
|
39
42
|
|
40
43
|
# Set a configuration option.
|
@@ -43,7 +46,7 @@ module Cottontail #:nodoc:
|
|
43
46
|
# set :logger, Yell.new($stdout)
|
44
47
|
# set :logger, -> { Yell.new($stdout) }
|
45
48
|
def set(key, value = nil, &block)
|
46
|
-
@settings[key] =
|
49
|
+
@settings[key] = block.nil? ? value : block
|
47
50
|
end
|
48
51
|
|
49
52
|
# Get a configuration option. It will be evalued of the first time
|
@@ -59,6 +62,16 @@ module Cottontail #:nodoc:
|
|
59
62
|
@settings[key]
|
60
63
|
end
|
61
64
|
|
65
|
+
# @private
|
66
|
+
def each(&block)
|
67
|
+
@settings.each(&block)
|
68
|
+
end
|
69
|
+
|
70
|
+
# @private
|
71
|
+
def inheritable_copy
|
72
|
+
self.class.new(self)
|
73
|
+
end
|
74
|
+
|
62
75
|
# @private
|
63
76
|
def reset!
|
64
77
|
@settings = {}
|
data/lib/cottontail/consumer.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'active_support/concern'
|
2
|
+
require 'active_support/core_ext/class/attribute'
|
3
|
+
require 'active_support/callbacks'
|
2
4
|
|
3
5
|
require File.dirname(__FILE__) + '/configurable'
|
4
6
|
require File.dirname(__FILE__) + '/consumer/launcher'
|
@@ -57,12 +59,19 @@ module Cottontail
|
|
57
59
|
extend ActiveSupport::Concern
|
58
60
|
|
59
61
|
included do
|
62
|
+
include ActiveSupport::Callbacks
|
63
|
+
define_callbacks :initialize
|
64
|
+
define_callbacks :consume
|
65
|
+
|
60
66
|
include Cottontail::Configurable
|
61
67
|
|
62
|
-
# default
|
63
|
-
set :consumables,
|
64
|
-
set :session,
|
65
|
-
set :logger,
|
68
|
+
# default config
|
69
|
+
set :consumables, Cottontail::Consumer::Collection.new
|
70
|
+
set :session, [nil, -> {}]
|
71
|
+
set :logger, Cottontail.get(:logger)
|
72
|
+
|
73
|
+
# config for consumer behaviour
|
74
|
+
set :raise_on_exception, true
|
66
75
|
end
|
67
76
|
|
68
77
|
module ClassMethods #:nodoc:
|
@@ -133,7 +142,6 @@ module Cottontail
|
|
133
142
|
# consume type: ['ChatMessage', 'PushMessage'] do |delivery_info, properties, payload|
|
134
143
|
# # stuff to do
|
135
144
|
# end
|
136
|
-
#
|
137
145
|
def consume(route = {}, options = {}, &block)
|
138
146
|
options =
|
139
147
|
if route.is_a?(Hash)
|
@@ -162,9 +170,17 @@ module Cottontail
|
|
162
170
|
end
|
163
171
|
end
|
164
172
|
|
165
|
-
|
166
|
-
|
167
|
-
|
173
|
+
attr_accessor :options
|
174
|
+
|
175
|
+
def initialize(options = {})
|
176
|
+
@options = options
|
177
|
+
|
178
|
+
run_callbacks :initialize do
|
179
|
+
@__running__ = false
|
180
|
+
|
181
|
+
@__launcher__ = Cottontail::Consumer::Launcher.new(self)
|
182
|
+
@__session__ = Cottontail::Consumer::Session.new(self)
|
183
|
+
end
|
168
184
|
|
169
185
|
logger.debug '[Cottontail] initialized'
|
170
186
|
end
|
@@ -173,14 +189,22 @@ module Cottontail
|
|
173
189
|
logger.info '[Cottontail] starting up'
|
174
190
|
|
175
191
|
@__session__.start
|
192
|
+
@__running__ = true
|
176
193
|
@__launcher__.start if blocking
|
177
194
|
end
|
178
195
|
|
179
196
|
def stop
|
197
|
+
return unless running?
|
198
|
+
|
180
199
|
logger.info '[Cottontail] shutting down'
|
181
200
|
|
182
|
-
|
201
|
+
@__launcher__.stop
|
183
202
|
@__session__.stop
|
203
|
+
@__running__ = false
|
204
|
+
end
|
205
|
+
|
206
|
+
def running?
|
207
|
+
@__running__
|
184
208
|
end
|
185
209
|
|
186
210
|
# @private
|
@@ -190,26 +214,35 @@ module Cottontail
|
|
190
214
|
end
|
191
215
|
end
|
192
216
|
|
217
|
+
# @private
|
218
|
+
def logger
|
219
|
+
config.get(:logger)
|
220
|
+
end
|
221
|
+
|
193
222
|
private
|
194
223
|
|
195
224
|
def consume(delivery_info, properties, payload)
|
196
|
-
|
197
|
-
|
198
|
-
if consumable.nil?
|
199
|
-
logger.error '[Cottontail] Could not consume message'
|
200
|
-
else
|
201
|
-
consumable.exec(self, delivery_info, properties, payload)
|
225
|
+
run_callbacks :consume do
|
226
|
+
execute(delivery_info, properties, payload)
|
202
227
|
end
|
203
228
|
rescue => exception
|
204
229
|
logger.error exception
|
205
|
-
end
|
206
230
|
|
207
|
-
|
208
|
-
|
231
|
+
if config.get(:raise_on_exception)
|
232
|
+
stop
|
233
|
+
|
234
|
+
raise(exception, caller)
|
235
|
+
end
|
209
236
|
end
|
210
237
|
|
211
|
-
def
|
212
|
-
config.get(:
|
238
|
+
def execute(delivery_info, properties, payload)
|
239
|
+
entity = config.get(:consumables).find(delivery_info, properties, payload)
|
240
|
+
|
241
|
+
if entity.nil?
|
242
|
+
logger.warn '[Cottontail] Could not consume message'
|
243
|
+
else
|
244
|
+
entity.exec(self, delivery_info, properties, payload)
|
245
|
+
end
|
213
246
|
end
|
214
247
|
end
|
215
248
|
end
|
@@ -14,7 +14,7 @@ module Cottontail #:nodoc:
|
|
14
14
|
stop unless @launcher.nil?
|
15
15
|
|
16
16
|
SIGNALS.each do |signal|
|
17
|
-
Signal.trap(signal) { Thread.new { stop } }
|
17
|
+
Signal.trap(signal) { Thread.new { @consumer.stop } }
|
18
18
|
end
|
19
19
|
|
20
20
|
@launcher = Thread.new { sleep }
|
@@ -22,8 +22,6 @@ module Cottontail #:nodoc:
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def stop
|
25
|
-
@consumer.stop if @consumer.respond_to?(:stop)
|
26
|
-
|
27
25
|
@launcher.kill if @launcher.respond_to?(:kill)
|
28
26
|
@launcher = nil
|
29
27
|
end
|
data/lib/cottontail/version.rb
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'Cottontail::Configurable inheritance' do
|
4
|
+
let(:base_klass) do
|
5
|
+
Class.new do
|
6
|
+
include Cottontail::Configurable
|
7
|
+
|
8
|
+
set :foo, 123
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:child_klass) do
|
13
|
+
Class.new(base_klass)
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:base_config) { base_klass.config }
|
17
|
+
let(:child_config) { child_klass.config }
|
18
|
+
|
19
|
+
it 'inherits configuration' do
|
20
|
+
expect(base_config.get(:foo)).to eq(123)
|
21
|
+
expect(child_config.get(:foo)).to eq(123)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'does not override configuration of superclass' do
|
25
|
+
child_config.set(:foo, 456)
|
26
|
+
|
27
|
+
expect(child_config.get(:foo)).to eq(456)
|
28
|
+
expect(base_config.get(:foo)).to eq(123)
|
29
|
+
end
|
30
|
+
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
RSpec.describe Cottontail::Configurable do
|
4
|
-
|
5
|
-
|
3
|
+
RSpec.describe 'Cottontail::Configurable' do
|
4
|
+
let(:base_klass) do
|
5
|
+
Class.new do
|
6
|
+
include Cottontail::Configurable
|
7
|
+
end
|
6
8
|
end
|
7
9
|
|
8
|
-
let(:config) {
|
9
|
-
before { config.reset! }
|
10
|
+
let(:config) { base_klass.config }
|
10
11
|
|
11
12
|
it 'responds to :get' do
|
12
13
|
expect(config).to respond_to(:get)
|
@@ -16,7 +17,7 @@ RSpec.describe Cottontail::Configurable do
|
|
16
17
|
expect(config).to respond_to(:set)
|
17
18
|
end
|
18
19
|
|
19
|
-
context 'String' do
|
20
|
+
context ':set with String' do
|
20
21
|
let(:value) { 'value' }
|
21
22
|
before { config.set(:key, value) }
|
22
23
|
|
@@ -25,7 +26,7 @@ RSpec.describe Cottontail::Configurable do
|
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
|
-
context 'Proc' do
|
29
|
+
context ':set with Proc' do
|
29
30
|
let(:value) { -> { 'value' } }
|
30
31
|
before { config.set(:key, value) }
|
31
32
|
|
@@ -64,7 +64,25 @@ RSpec.describe Cottontail::Consumer::Collection do
|
|
64
64
|
expect(collection.find(delivery_info_stub('a', 'x', 'x'))).to eq(ann)
|
65
65
|
expect(collection.find(delivery_info_stub('x', 'a', 'x'))).to eq(nan)
|
66
66
|
expect(collection.find(delivery_info_stub('x', 'x', 'a'))).to eq(nna)
|
67
|
-
expect(collection.find(delivery_info_stub('x', 'x', 'x'))).to
|
67
|
+
expect(collection.find(delivery_info_stub('x', 'x', 'x'))).to be_nil
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context 'find for multiple entities with the same signature' do
|
72
|
+
let!(:ann_1) { push_entity('a', nil, nil) }
|
73
|
+
let!(:ann_2) { push_entity('a', nil, nil) }
|
74
|
+
let!(:nan_1) { push_entity(nil, 'a', nil) }
|
75
|
+
let!(:nan_2) { push_entity(nil, 'a', nil) }
|
76
|
+
let!(:nna_1) { push_entity(nil, nil, 'a') }
|
77
|
+
let!(:nna_2) { push_entity(nil, nil, 'a') }
|
78
|
+
let!(:nnn_1) { push_entity(nil, nil, nil) }
|
79
|
+
let!(:nnn_2) { push_entity(nil, nil, nil) }
|
80
|
+
|
81
|
+
it 'returns the last added entity for :exchange, :queue, :route' do
|
82
|
+
expect(collection.find(delivery_info_stub('a', 'x', 'x'))).to eq(ann_2)
|
83
|
+
expect(collection.find(delivery_info_stub('x', 'a', 'x'))).to eq(nan_2)
|
84
|
+
expect(collection.find(delivery_info_stub('x', 'x', 'a'))).to eq(nna_2)
|
85
|
+
expect(collection.find(delivery_info_stub('x', 'x', 'x'))).to eq(nnn_2)
|
68
86
|
end
|
69
87
|
end
|
70
88
|
|
@@ -3,30 +3,40 @@ require 'spec_helper'
|
|
3
3
|
RSpec.describe 'A Cottontail::Consumer instance' do
|
4
4
|
pending 'RabbitMQ not running' unless rabbitmq_running?
|
5
5
|
|
6
|
-
let(:
|
7
|
-
let(:
|
8
|
-
|
9
|
-
let(:
|
10
|
-
|
11
|
-
|
12
|
-
|
6
|
+
let(:payload) { SecureRandom.uuid }
|
7
|
+
let(:queue_name) { "cottontail-#{SecureRandom.uuid}" }
|
8
|
+
|
9
|
+
let(:consumer_class) do
|
10
|
+
Class.new(Cottontail::Test::Consumer) do
|
11
|
+
session do |worker, session|
|
12
|
+
channel = session.create_channel
|
13
|
+
queue = channel.queue(
|
14
|
+
options[:queue_name],
|
15
|
+
auto_delete: true,
|
16
|
+
durable: false
|
17
|
+
)
|
18
|
+
|
19
|
+
subscribe(queue, exclusive: false)
|
20
|
+
end
|
21
|
+
end
|
13
22
|
end
|
14
|
-
|
23
|
+
|
24
|
+
let(:consumer) { consumer_class.new(queue_name: queue_name) }
|
15
25
|
|
16
26
|
let :publisher do
|
17
27
|
session = Bunny.new
|
18
28
|
session.start
|
29
|
+
|
19
30
|
session
|
20
31
|
end
|
21
32
|
|
22
33
|
before do
|
23
|
-
# start consumer
|
24
34
|
consumer.start(false)
|
25
35
|
|
26
36
|
# publish message
|
27
37
|
channel = publisher.create_channel
|
28
|
-
channel.
|
29
|
-
|
38
|
+
exchange = channel.default_exchange
|
39
|
+
exchange.publish(payload, routing_key: queue_name)
|
30
40
|
end
|
31
41
|
|
32
42
|
after do
|
@@ -35,7 +45,10 @@ RSpec.describe 'A Cottontail::Consumer instance' do
|
|
35
45
|
end
|
36
46
|
|
37
47
|
it 'consumes the message' do
|
38
|
-
|
39
|
-
|
48
|
+
# wait for received message
|
49
|
+
10.times { sleep 0.02 if consumer.running? }
|
50
|
+
|
51
|
+
message = consumer.messages.last
|
52
|
+
expect(message[:payload]).to eq(payload)
|
40
53
|
end
|
41
54
|
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'benchmark'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe 'A Cottontail::Consumer instance', :performance do
|
5
|
+
pending 'RabbitMQ not running' unless rabbitmq_running?
|
6
|
+
|
7
|
+
let(:payload) { SecureRandom.uuid }
|
8
|
+
let(:max_messages) { 10_000 }
|
9
|
+
let(:queue_name) { "cottontail-#{SecureRandom.uuid}" }
|
10
|
+
|
11
|
+
let(:consumer_class) do
|
12
|
+
Class.new(Cottontail::Test::Consumer) do
|
13
|
+
session do |worker, session|
|
14
|
+
channel = session.create_channel
|
15
|
+
queue = channel.queue(
|
16
|
+
options[:queue_name],
|
17
|
+
auto_delete: true,
|
18
|
+
durable: false
|
19
|
+
)
|
20
|
+
|
21
|
+
subscribe(queue, exclusive: false)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
let :consumer do
|
27
|
+
consumer_class.new(
|
28
|
+
queue_name: queue_name,
|
29
|
+
max_messages: max_messages
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
let :publisher do
|
34
|
+
session = Bunny.new
|
35
|
+
session.start
|
36
|
+
|
37
|
+
session
|
38
|
+
end
|
39
|
+
|
40
|
+
before do
|
41
|
+
# publish messages
|
42
|
+
channel = publisher.create_channel
|
43
|
+
channel.queue(queue_name, auto_delete: true, durable: false) # create queue
|
44
|
+
|
45
|
+
exchange = channel.default_exchange
|
46
|
+
max_messages.times { exchange.publish(payload, routing_key: queue_name) }
|
47
|
+
end
|
48
|
+
|
49
|
+
after do
|
50
|
+
publisher.stop
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'consumes the message' do
|
54
|
+
seconds = Benchmark.realtime { consumer.start }
|
55
|
+
expect(seconds).to be < 2 # seconds
|
56
|
+
end
|
57
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,14 +1,30 @@
|
|
1
1
|
$LOAD_PATH.unshift File.expand_path('..', __FILE__)
|
2
2
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
3
3
|
|
4
|
-
require 'cottontail'
|
5
|
-
|
6
4
|
require 'json'
|
7
5
|
require 'byebug'
|
8
6
|
require 'securerandom'
|
9
7
|
require 'rspec/core'
|
10
8
|
require 'rspec/expectations'
|
11
9
|
|
10
|
+
begin
|
11
|
+
require 'coveralls'
|
12
|
+
# Coveralls.wear!
|
13
|
+
|
14
|
+
require 'simplecov'
|
15
|
+
SimpleCov.start do
|
16
|
+
formatter = SimpleCov::Formatter::MultiFormatter[
|
17
|
+
Coveralls::SimpleCov::Formatter,
|
18
|
+
SimpleCov::Formatter::HTMLFormatter
|
19
|
+
]
|
20
|
+
add_filter 'spec'
|
21
|
+
end
|
22
|
+
rescue LoadError
|
23
|
+
$stderr.puts 'Not running coverage'
|
24
|
+
end
|
25
|
+
|
26
|
+
require 'cottontail'
|
27
|
+
|
12
28
|
Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each { |f| require f }
|
13
29
|
|
14
30
|
RSpec.configure do |config|
|
@@ -1,32 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
1
|
+
module Cottontail #:nodoc
|
2
|
+
module Test #:nodoc
|
3
|
+
class Consumer #:nodoc:
|
4
|
+
include Cottontail::Consumer
|
5
|
+
set :logger, -> { Yell.new(:null) }
|
6
|
+
|
7
|
+
set_callback :initialize, :after do
|
8
|
+
@max_messages = options[:max_messages] || 1
|
9
|
+
end
|
10
|
+
|
11
|
+
set_callback :consume, :after do
|
12
|
+
stop if stop?
|
13
|
+
end
|
14
|
+
|
15
|
+
consume do |delivery_info, properties, payload|
|
16
|
+
messages << {
|
17
|
+
consumable: :default,
|
18
|
+
delivery_info: delivery_info,
|
19
|
+
properties: properties,
|
20
|
+
payload: payload
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def messages
|
25
|
+
@messages ||= []
|
26
|
+
end
|
27
|
+
|
28
|
+
def stop?
|
29
|
+
messages.count >= @max_messages
|
30
|
+
end
|
31
|
+
end
|
29
32
|
end
|
30
33
|
end
|
31
|
-
|
32
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cottontail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rudolf Schmidt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bunny
|
@@ -31,7 +31,7 @@ dependencies:
|
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '2'
|
34
|
-
- - "
|
34
|
+
- - "<"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: '3'
|
37
37
|
type: :runtime
|
@@ -41,7 +41,7 @@ dependencies:
|
|
41
41
|
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: '2'
|
44
|
-
- - "
|
44
|
+
- - "<"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '3'
|
47
47
|
- !ruby/object:Gem::Dependency
|
@@ -51,9 +51,9 @@ dependencies:
|
|
51
51
|
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '3'
|
54
|
-
- - "
|
54
|
+
- - "<"
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
56
|
+
version: '5'
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -61,9 +61,9 @@ dependencies:
|
|
61
61
|
- - ">="
|
62
62
|
- !ruby/object:Gem::Version
|
63
63
|
version: '3'
|
64
|
-
- - "
|
64
|
+
- - "<"
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: '
|
66
|
+
version: '5'
|
67
67
|
description: Convenience wrapper around the AMQP Bunny gem to better handle routing_key
|
68
68
|
specific messages
|
69
69
|
email:
|
@@ -87,12 +87,13 @@ files:
|
|
87
87
|
- lib/cottontail/consumer/launcher.rb
|
88
88
|
- lib/cottontail/consumer/session.rb
|
89
89
|
- lib/cottontail/version.rb
|
90
|
+
- spec/cottontail/configurable_inheritance_spec.rb
|
90
91
|
- spec/cottontail/configurable_spec.rb
|
91
92
|
- spec/cottontail/consumer/collection_spec.rb
|
92
93
|
- spec/cottontail/consumer/entity_spec.rb
|
93
94
|
- spec/integration/consumer_simple_spec.rb
|
95
|
+
- spec/performance/consumer_simple_spec.rb
|
94
96
|
- spec/spec_helper.rb
|
95
|
-
- spec/support/coverage.rb
|
96
97
|
- spec/support/rabbitmq.rb
|
97
98
|
- spec/support/test_consumer.rb
|
98
99
|
homepage: http://github.com/rudionrails/cottontail
|
@@ -110,22 +111,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
111
|
version: '0'
|
111
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
113
|
requirements:
|
113
|
-
- - "
|
114
|
+
- - ">="
|
114
115
|
- !ruby/object:Gem::Version
|
115
|
-
version:
|
116
|
+
version: '0'
|
116
117
|
requirements: []
|
117
118
|
rubyforge_project: cottontail
|
118
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.5.1
|
119
120
|
signing_key:
|
120
121
|
specification_version: 4
|
121
122
|
summary: Sinatra inspired wrapper around the AMQP Bunny gem
|
122
123
|
test_files:
|
124
|
+
- spec/cottontail/configurable_inheritance_spec.rb
|
123
125
|
- spec/cottontail/configurable_spec.rb
|
124
126
|
- spec/cottontail/consumer/collection_spec.rb
|
125
127
|
- spec/cottontail/consumer/entity_spec.rb
|
126
128
|
- spec/integration/consumer_simple_spec.rb
|
129
|
+
- spec/performance/consumer_simple_spec.rb
|
127
130
|
- spec/spec_helper.rb
|
128
|
-
- spec/support/coverage.rb
|
129
131
|
- spec/support/rabbitmq.rb
|
130
132
|
- spec/support/test_consumer.rb
|
131
|
-
has_rdoc:
|
data/spec/support/coverage.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
require 'coveralls'
|
3
|
-
require 'simplecov'
|
4
|
-
|
5
|
-
$stdout.puts 'Running coverage...'
|
6
|
-
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
7
|
-
SimpleCov::Formatter::HTMLFormatter,
|
8
|
-
Coveralls::SimpleCov::Formatter
|
9
|
-
]
|
10
|
-
|
11
|
-
SimpleCov.start do
|
12
|
-
add_filter 'spec'
|
13
|
-
end
|
14
|
-
rescue LoadError
|
15
|
-
$stderr.puts 'Not running coverage'
|
16
|
-
end
|