freddy 0.4.2 → 0.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.
- checksums.yaml +4 -4
- data/.gitignore +4 -0
- data/.travis.yml +3 -1
- data/Gemfile +1 -1
- data/README.md +2 -7
- data/freddy.gemspec +13 -4
- data/lib/freddy.rb +23 -8
- data/lib/freddy/adaptive_queue.rb +34 -0
- data/lib/freddy/consumer.rb +8 -8
- data/lib/freddy/delivery.rb +8 -4
- data/lib/freddy/message_handler.rb +4 -5
- data/lib/freddy/message_handlers.rb +7 -6
- data/lib/freddy/producer.rb +16 -2
- data/lib/freddy/request.rb +6 -7
- data/lib/freddy/responder_handler.rb +0 -9
- data/lib/freddy/sync_response_container.rb +1 -1
- data/spec/freddy/consumer_spec.rb +2 -0
- data/spec/freddy/freddy_spec.rb +2 -0
- data/spec/freddy/message_handler_spec.rb +2 -2
- data/spec/freddy/request_spec.rb +8 -5
- data/spec/freddy/responder_handler_spec.rb +2 -13
- data/spec/integration/concurrency_spec.rb +2 -0
- data/spec/integration/logging_spec.rb +2 -0
- data/spec/spec_helper.rb +3 -8
- metadata +9 -9
- data/Gemfile.lock +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1b843578b576679503e114c5e6bda050cd980eb
|
4
|
+
data.tar.gz: af256b6384fca7e9ee13fd4d9a5f8b3301a96d0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b3768d47cf8a14f2743ca9e391458cba6968165e6fc29e8f1112f6bd093dff34bb933e76155baa95711fcbc8da4a6b734cf982a094fe63ba50566a06683d196
|
7
|
+
data.tar.gz: 225aca279255a4f0d9643100f48ecc32b817f55b43fb16a120cf7fdf2b32c8b5bd0f649c9c333e0e38c1815de1c7d01b6159588413ce10099a224cf1c9289c9c
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -126,11 +126,6 @@ The following operations are supported:
|
|
126
126
|
* stop responding
|
127
127
|
```ruby
|
128
128
|
responder_handler.cancel
|
129
|
-
```
|
130
|
-
|
131
|
-
* join the current thread to the responder thread
|
132
|
-
```ruby
|
133
|
-
responder_handler.join
|
134
129
|
```
|
135
130
|
|
136
131
|
* delete the destination
|
@@ -149,11 +144,11 @@ The thread pool is shared between *tap_into* and *respond_to* callbacks and the
|
|
149
144
|
The thread pool size can be configured by passing the configuration option *max_concurrency*.
|
150
145
|
|
151
146
|
|
152
|
-
Note that while it is possible to use *deliver_with_response* inside a *respond_to* block,
|
147
|
+
Note that while it is possible to use *deliver_with_response* inside a *respond_to* block,
|
153
148
|
it is not possible to use another *respond_to* block inside a different *respond_to* block.
|
154
149
|
|
155
150
|
|
156
|
-
Note also that other configuration options for freddy users
|
151
|
+
Note also that other configuration options for freddy users
|
157
152
|
such as pool sizes for DB connections need to match or exceed *max_concurrency*
|
158
153
|
to avoid running out of resources.
|
159
154
|
|
data/freddy.gemspec
CHANGED
@@ -3,8 +3,12 @@ lib = File.expand_path('../lib', __FILE__)
|
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
|
7
|
-
|
6
|
+
if RUBY_PLATFORM == 'java'
|
7
|
+
spec.name = "freddy-jruby"
|
8
|
+
else
|
9
|
+
spec.name = "freddy"
|
10
|
+
end
|
11
|
+
spec.version = '0.4.3'
|
8
12
|
spec.authors = ["Urmas Talimaa"]
|
9
13
|
spec.email = ["urmas.talimaa@gmail.com"]
|
10
14
|
spec.description = %q{Messaging API}
|
@@ -16,10 +20,15 @@ Gem::Specification.new do |spec|
|
|
16
20
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
21
|
spec.require_paths = ["lib"]
|
18
22
|
|
19
|
-
spec.add_development_dependency "bundler"
|
23
|
+
spec.add_development_dependency "bundler"
|
20
24
|
spec.add_development_dependency "rake"
|
21
25
|
|
22
|
-
|
26
|
+
if RUBY_PLATFORM == 'java'
|
27
|
+
spec.add_dependency 'march_hare', '~> 2.12.0'
|
28
|
+
else
|
29
|
+
spec.add_dependency "bunny", "2.2.0"
|
30
|
+
end
|
31
|
+
|
23
32
|
spec.add_dependency "symbolizer"
|
24
33
|
spec.add_dependency "hamster", "~> 1.0.1.pre.rc3"
|
25
34
|
spec.add_dependency "thread", "~> 0.2"
|
data/lib/freddy.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
-
|
1
|
+
if RUBY_PLATFORM == 'java'
|
2
|
+
require 'march_hare'
|
3
|
+
else
|
4
|
+
require 'bunny'
|
5
|
+
end
|
6
|
+
|
2
7
|
require 'json'
|
3
8
|
require 'symbolizer'
|
4
9
|
require 'thread/pool'
|
5
10
|
|
11
|
+
require_relative 'freddy/adaptive_queue'
|
6
12
|
require_relative 'freddy/consumer'
|
7
13
|
require_relative 'freddy/producer'
|
8
14
|
require_relative 'freddy/request'
|
@@ -64,18 +70,23 @@ class Freddy
|
|
64
70
|
end
|
65
71
|
end
|
66
72
|
|
67
|
-
def self.build(logger = Logger.new(STDOUT),
|
68
|
-
|
69
|
-
|
73
|
+
def self.build(logger = Logger.new(STDOUT), config)
|
74
|
+
if RUBY_PLATFORM == 'java'
|
75
|
+
connection = MarchHare.connect(config)
|
76
|
+
else
|
77
|
+
connection = Bunny.new(config)
|
78
|
+
connection.start
|
79
|
+
connection
|
80
|
+
end
|
70
81
|
|
71
|
-
|
72
|
-
new(channel, logger, bunny_config.fetch(:max_concurrency, 4))
|
82
|
+
new(connection, logger, config.fetch(:max_concurrency, 4))
|
73
83
|
end
|
74
84
|
|
75
85
|
attr_reader :channel, :consumer, :producer, :request
|
76
86
|
|
77
|
-
def initialize(
|
78
|
-
@
|
87
|
+
def initialize(connection, logger, max_concurrency)
|
88
|
+
@connection = connection
|
89
|
+
@channel = connection.create_channel
|
79
90
|
@consume_thread_pool = Thread.pool(max_concurrency)
|
80
91
|
@consumer = Consumer.new channel, logger, @consume_thread_pool
|
81
92
|
@producer = Producer.new channel, logger
|
@@ -106,4 +117,8 @@ class Freddy
|
|
106
117
|
timeout: timeout, delete_on_timeout: delete_on_timeout
|
107
118
|
}
|
108
119
|
end
|
120
|
+
|
121
|
+
def close
|
122
|
+
@connection.close
|
123
|
+
end
|
109
124
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Freddy
|
2
|
+
class AdaptiveQueue
|
3
|
+
def initialize(queue)
|
4
|
+
@queue = queue
|
5
|
+
end
|
6
|
+
|
7
|
+
def subscribe(&block)
|
8
|
+
if hare?
|
9
|
+
@queue.subscribe do |meta, payload|
|
10
|
+
block.call(payload, Delivery.new(meta, meta.routing_key))
|
11
|
+
end
|
12
|
+
else
|
13
|
+
@queue.subscribe do |info, properties, payload|
|
14
|
+
block.call(payload, Delivery.new(properties, info.routing_key))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def bind(*args)
|
20
|
+
@queue.bind(*args)
|
21
|
+
self
|
22
|
+
end
|
23
|
+
|
24
|
+
def name
|
25
|
+
@queue.name
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def hare?
|
31
|
+
RUBY_PLATFORM == 'java'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/freddy/consumer.rb
CHANGED
@@ -30,10 +30,10 @@ class Freddy
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def tap_into(pattern, &block)
|
33
|
-
queue =
|
34
|
-
consumer = queue.subscribe do |
|
33
|
+
queue = create_queue('', exclusive: true).bind(@topic_exchange, routing_key: pattern)
|
34
|
+
consumer = queue.subscribe do |payload, delivery|
|
35
35
|
@consume_thread_pool.process do
|
36
|
-
block.call parse_payload(payload),
|
36
|
+
block.call parse_payload(payload), delivery.routing_key
|
37
37
|
end
|
38
38
|
end
|
39
39
|
@logger.debug "Tapping into messages that match #{pattern}"
|
@@ -43,11 +43,11 @@ class Freddy
|
|
43
43
|
private
|
44
44
|
|
45
45
|
def consume_using_pool(queue, options, pool, &block)
|
46
|
-
consumer = queue.subscribe
|
46
|
+
consumer = queue.subscribe do |payload, delivery|
|
47
47
|
pool.process do
|
48
48
|
parsed_payload = parse_payload(payload)
|
49
|
-
log_receive_event(queue.name, parsed_payload,
|
50
|
-
block.call parsed_payload,
|
49
|
+
log_receive_event(queue.name, parsed_payload, delivery.correlation_id)
|
50
|
+
block.call parsed_payload, delivery
|
51
51
|
end
|
52
52
|
end
|
53
53
|
@logger.debug "Consuming messages on #{queue.name}"
|
@@ -62,8 +62,8 @@ class Freddy
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
def create_queue(destination)
|
66
|
-
@channel.queue(destination)
|
65
|
+
def create_queue(destination, options={})
|
66
|
+
AdaptiveQueue.new(@channel.queue(destination, options))
|
67
67
|
end
|
68
68
|
|
69
69
|
def log_receive_event(queue_name, payload, correlation_id)
|
data/lib/freddy/delivery.rb
CHANGED
@@ -1,10 +1,14 @@
|
|
1
1
|
class Freddy
|
2
2
|
class Delivery
|
3
|
-
attr_reader :
|
3
|
+
attr_reader :metadata, :routing_key
|
4
4
|
|
5
|
-
def initialize(
|
6
|
-
@
|
7
|
-
@
|
5
|
+
def initialize(metadata, routing_key)
|
6
|
+
@metadata = metadata
|
7
|
+
@routing_key = routing_key
|
8
|
+
end
|
9
|
+
|
10
|
+
def correlation_id
|
11
|
+
@metadata.correlation_id
|
8
12
|
end
|
9
13
|
end
|
10
14
|
end
|
@@ -4,17 +4,16 @@ class Freddy
|
|
4
4
|
|
5
5
|
def initialize(adapter, delivery)
|
6
6
|
@adapter = adapter
|
7
|
-
@
|
8
|
-
@
|
9
|
-
@correlation_id = @properties[:correlation_id]
|
7
|
+
@metadata = delivery.metadata
|
8
|
+
@correlation_id = @metadata.correlation_id
|
10
9
|
end
|
11
10
|
|
12
11
|
def success(response = nil)
|
13
|
-
@adapter.success(@
|
12
|
+
@adapter.success(@metadata.reply_to, response)
|
14
13
|
end
|
15
14
|
|
16
15
|
def error(error = {error: "Couldn't process message"})
|
17
|
-
@adapter.error(@
|
16
|
+
@adapter.error(@metadata.reply_to, error)
|
18
17
|
end
|
19
18
|
end
|
20
19
|
end
|
@@ -5,7 +5,8 @@ class Freddy
|
|
5
5
|
end
|
6
6
|
|
7
7
|
class StandardMessageHandler
|
8
|
-
def initialize(producer, logger)
|
8
|
+
def initialize(producer, destination, logger)
|
9
|
+
@destination = destination
|
9
10
|
@producer = producer
|
10
11
|
@logger = logger
|
11
12
|
end
|
@@ -13,9 +14,8 @@ class Freddy
|
|
13
14
|
def handle_message(payload, msg_handler, &block)
|
14
15
|
block.call payload, msg_handler
|
15
16
|
rescue Exception => e
|
16
|
-
|
17
|
-
|
18
|
-
Freddy.notify_exception(e, destination: destination)
|
17
|
+
@logger.error "Exception occured while processing message from #{Freddy.format_exception(e)}"
|
18
|
+
Freddy.notify_exception(e, destination: @destination)
|
19
19
|
end
|
20
20
|
|
21
21
|
def success(*)
|
@@ -28,9 +28,10 @@ class Freddy
|
|
28
28
|
end
|
29
29
|
|
30
30
|
class RequestHandler
|
31
|
-
def initialize(producer, logger)
|
31
|
+
def initialize(producer, destination, logger)
|
32
32
|
@producer = producer
|
33
33
|
@logger = logger
|
34
|
+
@destination = destination
|
34
35
|
end
|
35
36
|
|
36
37
|
def handle_message(payload, msg_handler, &block)
|
@@ -44,7 +45,7 @@ class Freddy
|
|
44
45
|
end
|
45
46
|
rescue Exception => e
|
46
47
|
@logger.error "Exception occured while handling the request with correlation_id #{@correlation_id}: #{Freddy.format_exception(e)}"
|
47
|
-
Freddy.notify_exception(e,
|
48
|
+
Freddy.notify_exception(e, correlation_id: @correlation_id, destination: @destination)
|
48
49
|
end
|
49
50
|
|
50
51
|
def success(reply_to, response)
|
data/lib/freddy/producer.rb
CHANGED
@@ -3,6 +3,8 @@ require 'json'
|
|
3
3
|
|
4
4
|
class Freddy
|
5
5
|
class Producer
|
6
|
+
OnReturnNotImplemented = Class.new(NoMethodError)
|
7
|
+
|
6
8
|
CONTENT_TYPE = 'application/json'.freeze
|
7
9
|
|
8
10
|
def initialize(channel, logger)
|
@@ -21,8 +23,20 @@ class Freddy
|
|
21
23
|
@exchange.publish json_payload, properties.dup
|
22
24
|
end
|
23
25
|
|
24
|
-
def on_return(
|
25
|
-
@exchange.on_return
|
26
|
+
def on_return(&block)
|
27
|
+
if @exchange.respond_to? :on_return # Bunny
|
28
|
+
@exchange.on_return do |return_info, properties, content|
|
29
|
+
block.call(return_info[:reply_code], properties[:correlation_id])
|
30
|
+
end
|
31
|
+
elsif @channel.respond_to? :on_return # Hare
|
32
|
+
@channel.on_return do |reply_code, _, exchange_name, _, properties|
|
33
|
+
if exchange_name != Freddy::FREDDY_TOPIC_EXCHANGE_NAME
|
34
|
+
block.call(reply_code, properties.correlation_id)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
else
|
38
|
+
raise OnReturnNotImplemented.new "AMQP implementation doesn't implement on_return"
|
39
|
+
end
|
26
40
|
end
|
27
41
|
end
|
28
42
|
end
|
data/lib/freddy/request.rb
CHANGED
@@ -23,9 +23,9 @@ class Freddy
|
|
23
23
|
@request_map = Hamster.mutable_hash
|
24
24
|
@request_manager = RequestManager.new @request_map, @logger
|
25
25
|
|
26
|
-
@producer.on_return do |
|
27
|
-
if
|
28
|
-
@request_manager.no_route(
|
26
|
+
@producer.on_return do |reply_code, correlation_id|
|
27
|
+
if reply_code == NO_ROUTE
|
28
|
+
@request_manager.no_route(correlation_id)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -68,9 +68,8 @@ class Freddy
|
|
68
68
|
|
69
69
|
ensure_response_queue_exists
|
70
70
|
@logger.info "Listening for requests on #{destination}"
|
71
|
-
|
72
71
|
responder_handler = @consumer.consume destination do |payload, delivery|
|
73
|
-
handler = MessageHandlers.for_type(delivery.
|
72
|
+
handler = MessageHandlers.for_type(delivery.metadata.type).new(@producer, destination, @logger)
|
74
73
|
|
75
74
|
msg_handler = MessageHandler.new(handler, delivery)
|
76
75
|
handler.handle_message payload, msg_handler, &block
|
@@ -81,11 +80,11 @@ class Freddy
|
|
81
80
|
private
|
82
81
|
|
83
82
|
def create_response_queue
|
84
|
-
@channel.queue("", exclusive: true)
|
83
|
+
AdaptiveQueue.new @channel.queue("", exclusive: true)
|
85
84
|
end
|
86
85
|
|
87
86
|
def handle_response(payload, delivery)
|
88
|
-
correlation_id = delivery.
|
87
|
+
correlation_id = delivery.metadata.correlation_id
|
89
88
|
request = @request_map[correlation_id]
|
90
89
|
if request
|
91
90
|
@logger.debug "Got response for request to #{request[:destination]} with correlation_id #{correlation_id}"
|
@@ -14,7 +14,7 @@ class Freddy
|
|
14
14
|
|
15
15
|
if @response[:error] == 'RequestTimeout'
|
16
16
|
raise TimeoutError.new(@response)
|
17
|
-
elsif !@delivery || @delivery.
|
17
|
+
elsif !@delivery || @delivery.metadata.type == 'error'
|
18
18
|
raise InvalidRequestError.new(@response)
|
19
19
|
else
|
20
20
|
@response
|
data/spec/freddy/freddy_spec.rb
CHANGED
@@ -4,8 +4,8 @@ describe Freddy::MessageHandler do
|
|
4
4
|
subject(:handler) { described_class.new(adapter, delivery) }
|
5
5
|
|
6
6
|
let(:adapter) { double }
|
7
|
-
let(:delivery) { double(
|
8
|
-
let(:
|
7
|
+
let(:delivery) { double(metadata: metadata) }
|
8
|
+
let(:metadata) { double(reply_to: reply_to, correlation_id: 'abc') }
|
9
9
|
|
10
10
|
let(:reply_to) { double }
|
11
11
|
|
data/spec/freddy/request_spec.rb
CHANGED
@@ -8,12 +8,14 @@ describe Freddy::Request do
|
|
8
8
|
|
9
9
|
let(:request) { freddy.request }
|
10
10
|
|
11
|
+
after { freddy.close }
|
12
|
+
|
11
13
|
it 'raises empty responder exception when responding without callback' do
|
12
14
|
expect {@responder = request.respond_to destination }.to raise_error described_class::EmptyResponder
|
13
15
|
end
|
14
16
|
|
15
17
|
context 'requesting from multiple threads' do
|
16
|
-
let(:nr_of_threads) {
|
18
|
+
let(:nr_of_threads) { 50 }
|
17
19
|
|
18
20
|
before do
|
19
21
|
freddy.respond_to 'thread-queue' do |payload, msg_handler|
|
@@ -22,15 +24,16 @@ describe Freddy::Request do
|
|
22
24
|
end
|
23
25
|
|
24
26
|
it 'handles multiple threads' do
|
25
|
-
|
26
|
-
|
27
|
+
require 'hamster/experimental/mutable_set'
|
28
|
+
msg_counter = Hamster.mutable_set
|
29
|
+
nr_of_threads.times.map do |index|
|
27
30
|
Thread.new do
|
28
31
|
response = freddy.deliver_with_response 'thread-queue', payload
|
29
|
-
msg_counter
|
32
|
+
msg_counter << index
|
30
33
|
expect(response).to eq(payload)
|
31
34
|
end
|
32
35
|
end.each(&:join)
|
33
|
-
expect(msg_counter).to eq(nr_of_threads)
|
36
|
+
expect(msg_counter.count).to eq(nr_of_threads)
|
34
37
|
end
|
35
38
|
|
36
39
|
end
|
@@ -6,6 +6,8 @@ describe Freddy::ResponderHandler do
|
|
6
6
|
let(:destination) { random_destination }
|
7
7
|
let(:payload) { {pay: 'load'} }
|
8
8
|
|
9
|
+
after { freddy.close }
|
10
|
+
|
9
11
|
it 'can cancel listening for messages' do
|
10
12
|
consumer_handler = freddy.respond_to destination do
|
11
13
|
@messages_count ||= 0
|
@@ -17,17 +19,4 @@ describe Freddy::ResponderHandler do
|
|
17
19
|
|
18
20
|
expect(@messages_count).to eq 1
|
19
21
|
end
|
20
|
-
|
21
|
-
it 'can join the thread to the consumer' do
|
22
|
-
consumer_handler = freddy.respond_to destination do
|
23
|
-
end
|
24
|
-
unreachable = true
|
25
|
-
Thread.new do
|
26
|
-
consumer_handler.join
|
27
|
-
unreachable = false
|
28
|
-
end
|
29
|
-
wait_for { unreachable }
|
30
|
-
expect(unreachable).to be(true)
|
31
|
-
end
|
32
|
-
|
33
22
|
end
|
@@ -5,6 +5,8 @@ describe 'Concurrency' do
|
|
5
5
|
let(:freddy2) { Freddy.build(logger, config) }
|
6
6
|
let(:freddy3) { Freddy.build(logger, config) }
|
7
7
|
|
8
|
+
after { [freddy1, freddy2, freddy3].each(&:close) }
|
9
|
+
|
8
10
|
it 'supports multiple requests in #respond_to' do
|
9
11
|
freddy1.respond_to 'Concurrency1' do |payload, msg_handler|
|
10
12
|
begin
|
data/spec/spec_helper.rb
CHANGED
@@ -1,21 +1,16 @@
|
|
1
1
|
require 'pry'
|
2
2
|
require 'securerandom'
|
3
3
|
require 'freddy'
|
4
|
+
require 'logger'
|
5
|
+
|
6
|
+
Thread.abort_on_exception = true
|
4
7
|
|
5
8
|
RSpec.configure do |config|
|
6
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
7
9
|
config.run_all_when_everything_filtered = true
|
8
10
|
config.filter_run :focus
|
9
11
|
config.order = 'random'
|
10
12
|
end
|
11
13
|
|
12
|
-
class Freddy::Consumer
|
13
|
-
def create_queue(queue_name)
|
14
|
-
#want to auto_delete queues while testing
|
15
|
-
@channel.queue(queue_name, auto_delete: true)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
14
|
def random_destination
|
20
15
|
SecureRandom.hex
|
21
16
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freddy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Urmas Talimaa
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.2.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.2.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: symbolizer
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -108,12 +108,12 @@ files:
|
|
108
108
|
- ".ruby-version"
|
109
109
|
- ".travis.yml"
|
110
110
|
- Gemfile
|
111
|
-
- Gemfile.lock
|
112
111
|
- LICENCE.txt
|
113
112
|
- README.md
|
114
113
|
- Rakefile
|
115
114
|
- freddy.gemspec
|
116
115
|
- lib/freddy.rb
|
116
|
+
- lib/freddy/adaptive_queue.rb
|
117
117
|
- lib/freddy/consumer.rb
|
118
118
|
- lib/freddy/delivery.rb
|
119
119
|
- lib/freddy/message_handler.rb
|
data/Gemfile.lock
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
freddy (0.4.2)
|
5
|
-
bunny (= 1.6.3)
|
6
|
-
hamster (~> 1.0.1.pre.rc3)
|
7
|
-
symbolizer
|
8
|
-
thread (~> 0.2)
|
9
|
-
|
10
|
-
GEM
|
11
|
-
remote: https://rubygems.org/
|
12
|
-
specs:
|
13
|
-
amq-protocol (1.9.2)
|
14
|
-
atomic (1.1.99)
|
15
|
-
bunny (1.6.3)
|
16
|
-
amq-protocol (>= 1.9.2)
|
17
|
-
coderay (1.1.0)
|
18
|
-
diff-lcs (1.2.5)
|
19
|
-
hamster (1.0.1.pre.rc3)
|
20
|
-
atomic (~> 1.1)
|
21
|
-
method_source (0.8.2)
|
22
|
-
pry (0.10.1)
|
23
|
-
coderay (~> 1.1.0)
|
24
|
-
method_source (~> 0.8.1)
|
25
|
-
slop (~> 3.4)
|
26
|
-
rake (10.3.2)
|
27
|
-
rspec (3.1.0)
|
28
|
-
rspec-core (~> 3.1.0)
|
29
|
-
rspec-expectations (~> 3.1.0)
|
30
|
-
rspec-mocks (~> 3.1.0)
|
31
|
-
rspec-core (3.1.7)
|
32
|
-
rspec-support (~> 3.1.0)
|
33
|
-
rspec-expectations (3.1.2)
|
34
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
35
|
-
rspec-support (~> 3.1.0)
|
36
|
-
rspec-mocks (3.1.3)
|
37
|
-
rspec-support (~> 3.1.0)
|
38
|
-
rspec-support (3.1.2)
|
39
|
-
slop (3.6.0)
|
40
|
-
symbolizer (0.0.1)
|
41
|
-
thread (0.2.2)
|
42
|
-
|
43
|
-
PLATFORMS
|
44
|
-
ruby
|
45
|
-
|
46
|
-
DEPENDENCIES
|
47
|
-
bundler (~> 1.3)
|
48
|
-
freddy!
|
49
|
-
pry
|
50
|
-
rake
|
51
|
-
rspec
|
52
|
-
|
53
|
-
BUNDLED WITH
|
54
|
-
1.10.6
|