queues-rabbit 0.1.0.beta → 0.1.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +21 -10
- data/lib/generators/templates/queue.rb +10 -1
- data/lib/queues/rabbit/client.rb +3 -0
- data/lib/queues/rabbit/exchange.rb +56 -9
- data/lib/queues/rabbit/logger.rb +11 -0
- data/lib/queues/rabbit/message.rb +3 -0
- data/lib/queues/rabbit/queue.rb +118 -13
- data/lib/queues/rabbit/schema.rb +15 -1
- data/lib/queues/rabbit/version.rb +1 -1
- data/lib/queues/rabbit.rb +0 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ecb7575f981fcc564af562d2938d6cbf15d1b02f382b87aea516fb5e78b1c0f
|
4
|
+
data.tar.gz: 7a22c34478ecc86039a727085af54e71944f241caf032450ce8f593ffa20ce8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 890ac13fa7258b55eb6a20a8d4eb64c6dffa42b847772ebe141ce77c1c1560f4086e8aa23f22250b0e72529d18cb99b25b2ed7f590bbeb6e4849fb8ea6a2b43a
|
7
|
+
data.tar.gz: afb3f5467d0af7f99ed3336e62ec7eaac6b500573605fa0b1a26e2b0f7db8930feedc66436c1b4c08cb8369b3b8fa18e2b80d9d51419200660b83f39a43649f1
|
data/README.md
CHANGED
@@ -108,7 +108,7 @@ module Rabbits
|
|
108
108
|
class Schema < ::Queues::Rabbit::Schema
|
109
109
|
queue Rabbits::Queues::MyQueueOne
|
110
110
|
exchange Rabbits::Queues::MyExchangeOne
|
111
|
-
|
111
|
+
|
112
112
|
queue Rabbits::Queues::MyQueueTwo
|
113
113
|
exchange Rabbits::Queues::MyExchangeTwo
|
114
114
|
end
|
@@ -131,7 +131,7 @@ module Rabbits
|
|
131
131
|
durable: true,
|
132
132
|
prefetch: 1,
|
133
133
|
arguments: {}
|
134
|
-
|
134
|
+
|
135
135
|
# ...
|
136
136
|
end
|
137
137
|
end
|
@@ -144,12 +144,14 @@ The `queue` method allows you to define the RabbitMQ queue parameters.
|
|
144
144
|
- **auto_ack:** When false messages have to be manually acknowledged (or rejected)
|
145
145
|
- **auto_delete:** If true, the queue will be deleted when the last consumer stops consuming.
|
146
146
|
- **durable:** If true, the queue will survive broker restarts, messages in the queue will only survive if they are published as persistent.
|
147
|
-
- **prefetch:** Specify how many messages to prefetch
|
147
|
+
- **prefetch:** Specify how many messages to prefetch.
|
148
148
|
- **arguments:** Custom arguments, such as queue-ttl etc.
|
149
149
|
|
150
|
-
Params **
|
151
|
-
- **
|
150
|
+
Params **auto_ack**, **auto_delete**, **durable**, **prefetch** and **arguments** are optional, default values are:
|
151
|
+
- **auto_ack:** true
|
152
152
|
- **auto_delete:** false
|
153
|
+
- **durable:** true
|
154
|
+
- **prefetch:** 1
|
153
155
|
- **arguments:** {}
|
154
156
|
|
155
157
|
(Remember to register the queue class to the Schema, more details [here](#schema))
|
@@ -168,7 +170,7 @@ module Rabbits
|
|
168
170
|
durable: true,
|
169
171
|
prefetch: 1,
|
170
172
|
arguments: {}
|
171
|
-
|
173
|
+
|
172
174
|
def consume(message)
|
173
175
|
# do something with the message
|
174
176
|
end
|
@@ -195,7 +197,7 @@ module Rabbits
|
|
195
197
|
class MyQueue < ::Queues::Rabbit::Queue
|
196
198
|
queue 'my.queue',
|
197
199
|
auto_ack: false,
|
198
|
-
|
200
|
+
|
199
201
|
def consume(message)
|
200
202
|
puts message.body
|
201
203
|
message.ack
|
@@ -315,9 +317,9 @@ module Rabbits
|
|
315
317
|
durable: true,
|
316
318
|
prefetch: 1,
|
317
319
|
arguments: {}
|
318
|
-
|
320
|
+
|
319
321
|
bind Rabbits::Exchanges::MyExchange, 'my.binding.key', arguments: {}
|
320
|
-
|
322
|
+
|
321
323
|
# ...
|
322
324
|
end
|
323
325
|
end
|
@@ -363,7 +365,7 @@ module Rabbits
|
|
363
365
|
durable: true,
|
364
366
|
internal: false,
|
365
367
|
arguments: {}
|
366
|
-
|
368
|
+
|
367
369
|
bind Rabbits::Exchanges::MyExchangeTwo, 'my.binding.key', arguments: {}
|
368
370
|
end
|
369
371
|
end
|
@@ -443,6 +445,15 @@ A good way to implement queues subscription is to use [Rails runners](https://gu
|
|
443
445
|
rails runner -e production "Rabbits::Queues::MyQueue.subscribe"
|
444
446
|
```
|
445
447
|
|
448
|
+
If you are running the queues in development mode, there could be some problems due to the Rails lazy loading. To solve this issue, you can add the following lines to `config/environments/development.rb`:
|
449
|
+
|
450
|
+
```Ruby
|
451
|
+
config.eager_load_paths += Dir["app/queues/**/*.rb"]
|
452
|
+
ActiveSupport::Reloader.to_prepare do
|
453
|
+
Dir["app/queues/**/*.rb"].each { |f| require_dependency("#{Dir.pwd}/#{f}") }
|
454
|
+
end
|
455
|
+
```
|
456
|
+
|
446
457
|
## Contributing
|
447
458
|
|
448
459
|
Bug reports and pull requests are welcome on GitHub at https://github.com/LapoElisacci/queues-rabbit.
|
@@ -7,7 +7,7 @@ module Rabbits
|
|
7
7
|
auto_ack: false, # Optional
|
8
8
|
auto_delete: false, # Optional
|
9
9
|
durable: true, # Optional
|
10
|
-
prefetch: 1, # Optional
|
10
|
+
prefetch: 1, # Optional (it must be >= batch_size if batch_subscribe is called)
|
11
11
|
arguments: {} # Optional
|
12
12
|
|
13
13
|
def consume(message)
|
@@ -16,6 +16,15 @@ module Rabbits
|
|
16
16
|
rescue
|
17
17
|
message.reject(requeue: false)
|
18
18
|
end
|
19
|
+
|
20
|
+
def batch_consume(messages)
|
21
|
+
puts "Received #{messages.size} messages"
|
22
|
+
# do something with the messages
|
23
|
+
messages.each(&:ack)
|
24
|
+
puts "Acked #{messages.size} messages"
|
25
|
+
rescue
|
26
|
+
messages.each { |msg| msg.reject(requeue: false) }
|
27
|
+
end
|
19
28
|
end
|
20
29
|
end
|
21
30
|
end
|
data/lib/queues/rabbit/client.rb
CHANGED
@@ -6,6 +6,15 @@ module Queues
|
|
6
6
|
class << self
|
7
7
|
attr_accessor :arguments, :auto_delete, :durable, :internal, :name, :schema, :type
|
8
8
|
|
9
|
+
#
|
10
|
+
# Bind an Exchange to another Exchange
|
11
|
+
#
|
12
|
+
# @param [String] exchange Exchange name
|
13
|
+
# @param [String] binding_key Exchange binding key
|
14
|
+
# @param [Hash] arguments Message headers to match on (only relevant for header exchanges)
|
15
|
+
#
|
16
|
+
# @return [Boolean] True if bounded, false otherwise
|
17
|
+
#
|
9
18
|
def bind(exchange, binding_key, arguments: {})
|
10
19
|
exchange = exchange < Queues::Rabbit::Exchange ? exchange.name : exchange
|
11
20
|
exchange_instance.bind(exchange, binding_key, arguments: arguments)
|
@@ -15,6 +24,11 @@ module Queues
|
|
15
24
|
false
|
16
25
|
end
|
17
26
|
|
27
|
+
#
|
28
|
+
# Delete an Exchange from RabbitMQ
|
29
|
+
#
|
30
|
+
# @return [Boolean] True if deleted, false otherwise
|
31
|
+
#
|
18
32
|
def delete
|
19
33
|
exchange_instance.delete
|
20
34
|
true
|
@@ -23,6 +37,18 @@ module Queues
|
|
23
37
|
false
|
24
38
|
end
|
25
39
|
|
40
|
+
#
|
41
|
+
# Declare an Exchange
|
42
|
+
#
|
43
|
+
# @param [String] name Exchange name
|
44
|
+
# @param [String] type Exchange type
|
45
|
+
# @param [Hash] arguments Exchange custom arguments
|
46
|
+
# @param [Boolean] auto_delete If true, the exchange will be deleted when the last queue/exchange gets unbounded.
|
47
|
+
# @param [Boolean] durable If true, the exchange will persist between broker restarts, also a required for persistent messages.
|
48
|
+
# @param [Boolean] internal If true, the messages can't be pushed directly to the exchange.
|
49
|
+
#
|
50
|
+
# @return [Queues::Rabbit::Exchange] Exchange class
|
51
|
+
#
|
26
52
|
def exchange(name, type, arguments: {}, auto_delete: false, durable: true, internal: false)
|
27
53
|
self.arguments = arguments
|
28
54
|
self.auto_delete = auto_delete
|
@@ -34,16 +60,8 @@ module Queues
|
|
34
60
|
self
|
35
61
|
end
|
36
62
|
|
37
|
-
def exchange_instance
|
38
|
-
@@exchange_instance ||= schema.client_instance.exchange(name, type, arguments: arguments, auto_delete: auto_delete, durable: durable, internal: internal)
|
39
|
-
end
|
40
|
-
|
41
|
-
def logger
|
42
|
-
@@logger ||= Queues::Rabbit::Logger.new(name, Queues::Rabbit.log_level)
|
43
|
-
end
|
44
|
-
|
45
63
|
#
|
46
|
-
#
|
64
|
+
# Publish a message to the Exchange
|
47
65
|
#
|
48
66
|
# @param [String] body The message body, can be a string or either a byte array
|
49
67
|
# @param [String] routing_key The routing key to route the message to bounded queues
|
@@ -74,6 +92,15 @@ module Queues
|
|
74
92
|
false
|
75
93
|
end
|
76
94
|
|
95
|
+
#
|
96
|
+
# Unbind the Exchange from another Exchange
|
97
|
+
#
|
98
|
+
# @param [String] exchange The exchange name to unbind
|
99
|
+
# @param [String] binding_key The exchange binding key
|
100
|
+
# @param [Hash] arguments Message headers to match on (only relevant for header exchanges)
|
101
|
+
#
|
102
|
+
# @return [Boolean] True if unbound, false otherwise
|
103
|
+
#
|
77
104
|
def unbind(exchange, binding_key, arguments: {})
|
78
105
|
exchange = exchange < Queues::Rabbit::Exchange ? exchange.name : exchange
|
79
106
|
exchange_instance.unbind(exchange, binding_key, arguments: arguments)
|
@@ -82,6 +109,26 @@ module Queues
|
|
82
109
|
logger.error_with_report "Unable to unbind '#{name}' to '#{exchange}' with key '#{binding_key}' and arguments: '#{arguments}': #{e.message}."
|
83
110
|
false
|
84
111
|
end
|
112
|
+
|
113
|
+
private
|
114
|
+
|
115
|
+
#
|
116
|
+
# Return the Exchange instance
|
117
|
+
#
|
118
|
+
# @return [AMQP::Client::Exchange] Exchange instance
|
119
|
+
#
|
120
|
+
def exchange_instance
|
121
|
+
@@exchange_instance ||= schema.client_instance.exchange(name, type, arguments: arguments, auto_delete: auto_delete, durable: durable, internal: internal)
|
122
|
+
end
|
123
|
+
|
124
|
+
#
|
125
|
+
# Return the logger instance
|
126
|
+
#
|
127
|
+
# @return [Queues::Rabbit::Logger] Logger instance
|
128
|
+
#
|
129
|
+
def logger
|
130
|
+
@@logger ||= Queues::Rabbit::Logger.new(name, Queues::Rabbit.log_level)
|
131
|
+
end
|
85
132
|
end
|
86
133
|
end
|
87
134
|
end
|
data/lib/queues/rabbit/logger.rb
CHANGED
@@ -12,11 +12,22 @@ module Queues
|
|
12
12
|
@std.level = ::Logger::INFO
|
13
13
|
end
|
14
14
|
|
15
|
+
#
|
16
|
+
# Log an error with attached report string.
|
17
|
+
#
|
18
|
+
# @param [String] message Message to log
|
19
|
+
#
|
15
20
|
def error_with_report(message)
|
16
21
|
@logger.error { message }
|
17
22
|
@logger.error { 'Please report to https://github.com/LapoElisacci/queues-rabbit if needed.' }
|
18
23
|
end
|
19
24
|
|
25
|
+
#
|
26
|
+
# Log the passed message to STDOUT
|
27
|
+
#
|
28
|
+
# @param [String] message Message to log
|
29
|
+
# @param [Symbol] level Log level
|
30
|
+
#
|
20
31
|
def stdout(message, level = :info)
|
21
32
|
@std.send(level, message)
|
22
33
|
end
|
data/lib/queues/rabbit/queue.rb
CHANGED
@@ -6,6 +6,15 @@ module Queues
|
|
6
6
|
class << self
|
7
7
|
attr_accessor :arguments, :auto_delete, :durable, :name, :no_ack, :prefetch, :schema
|
8
8
|
|
9
|
+
#
|
10
|
+
# Bind a Queue to an Exchange
|
11
|
+
#
|
12
|
+
# @param [String] exchange Exchange name
|
13
|
+
# @param [String] binding_key Exchange binding key
|
14
|
+
# @param [Hash] arguments Message headers to match on (only relevant for header exchanges)
|
15
|
+
#
|
16
|
+
# @return [Boolean] True if bounded, false otherwise
|
17
|
+
#
|
9
18
|
def bind(exchange, binding_key, arguments: {})
|
10
19
|
exchange = exchange < Queues::Rabbit::Exchange ? exchange.name : exchange
|
11
20
|
queue_instance.bind(exchange, binding_key, arguments: arguments)
|
@@ -15,6 +24,19 @@ module Queues
|
|
15
24
|
false
|
16
25
|
end
|
17
26
|
|
27
|
+
def consume(_message)
|
28
|
+
raise NoMethodError.new("Method #{__method__} must be defined to subscribe a queue!")
|
29
|
+
end
|
30
|
+
|
31
|
+
def batch_consume(_messages)
|
32
|
+
raise NoMethodError.new("Method #{__method__} must be defined to batch-subscribe a queue!")
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Delete a Queue from RabbitMQ
|
37
|
+
#
|
38
|
+
# @return [Boolean] True if delete, false otherwise
|
39
|
+
#
|
18
40
|
def delete
|
19
41
|
queue_instance.delete
|
20
42
|
true
|
@@ -23,10 +45,18 @@ module Queues
|
|
23
45
|
false
|
24
46
|
end
|
25
47
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
48
|
+
#
|
49
|
+
# Declare a Queue
|
50
|
+
#
|
51
|
+
# @param [String] name Queue name
|
52
|
+
# @param [Hash] arguments Custom arguments, such as queue-ttl etc.
|
53
|
+
# @param [Boolean] auto_ack When false messages have to be manually acknowledged (or rejected)
|
54
|
+
# @param [Boolean] auto_delete If true, the queue will be deleted when the last consumer stops consuming.
|
55
|
+
# @param [Boolean] durable If true, the queue will survive broker restarts, messages in the queue will only survive if they are published as persistent.
|
56
|
+
# @param [Integer] prefetch Specify how many messages to prefetch
|
57
|
+
#
|
58
|
+
# @return [Queues::Rabbit::Queue] Queue class
|
59
|
+
#
|
30
60
|
def queue(name, arguments: {}, auto_ack: true, auto_delete: false, durable: true, prefetch: 1)
|
31
61
|
self.arguments = arguments
|
32
62
|
self.auto_delete = auto_delete
|
@@ -37,12 +67,8 @@ module Queues
|
|
37
67
|
self
|
38
68
|
end
|
39
69
|
|
40
|
-
def queue_instance
|
41
|
-
@@queue_instance ||= schema.client_instance.queue(name, arguments: arguments, auto_delete: auto_delete, durable: durable)
|
42
|
-
end
|
43
|
-
|
44
70
|
#
|
45
|
-
#
|
71
|
+
# Publish a message to the Queue
|
46
72
|
#
|
47
73
|
# @param [String] body The message body, can be a string or either a byte array
|
48
74
|
# @param [Hash] properties Request properties
|
@@ -62,7 +88,7 @@ module Queues
|
|
62
88
|
# @option properties [String] :type Can indicate what kind of message this is
|
63
89
|
# @option properties [String] :user_id Used to identify the user that published the message
|
64
90
|
#
|
65
|
-
# @return [Boolean]
|
91
|
+
# @return [Boolean] True if published, false otherwise
|
66
92
|
#
|
67
93
|
def publish(body, **properties)
|
68
94
|
queue_instance.publish(body, **properties)
|
@@ -72,6 +98,11 @@ module Queues
|
|
72
98
|
false
|
73
99
|
end
|
74
100
|
|
101
|
+
#
|
102
|
+
# Purge / Empty a queue from RabbitMQ
|
103
|
+
#
|
104
|
+
# @return [Boolean] True if purged, false otherwise
|
105
|
+
#
|
75
106
|
def purge
|
76
107
|
queue_instance.purge
|
77
108
|
true
|
@@ -80,6 +111,9 @@ module Queues
|
|
80
111
|
false
|
81
112
|
end
|
82
113
|
|
114
|
+
#
|
115
|
+
# Subscribe to a Queue
|
116
|
+
#
|
83
117
|
def subscribe
|
84
118
|
logger.info { "Subscribing to queue #{name}" }
|
85
119
|
consumer = new
|
@@ -99,6 +133,61 @@ module Queues
|
|
99
133
|
false
|
100
134
|
end
|
101
135
|
|
136
|
+
#
|
137
|
+
# Subscribe to the queue with a batch reading.
|
138
|
+
# This method will block.
|
139
|
+
#
|
140
|
+
# @param [Integer] batch_size Batch size
|
141
|
+
# @param [ActiveSupport::Duration] batch_timeout Batch timeout, that the time interval in which the batch will be emptied even if not full.
|
142
|
+
#
|
143
|
+
# @return [FalseClass] if errors
|
144
|
+
#
|
145
|
+
def batch_subscribe(batch_size:, batch_timeout:)
|
146
|
+
raise StandardError.new('Batch size must be a positive integer') if batch_size.to_i <= 0
|
147
|
+
raise StandardError.new("Batch size must be less or equal than prefetch: got batch_size=#{batch_size} and prefetch=#{prefetch}") if batch_size > prefetch
|
148
|
+
|
149
|
+
logger.info "Subscribing to queue #{name} with a batch size #{batch_size}"
|
150
|
+
consumer = new
|
151
|
+
batch = []
|
152
|
+
# Batched subscribe must be performed only by one thread
|
153
|
+
# Auto-acking is done manually, otherwise batching is not possible
|
154
|
+
queue_instance.subscribe(worker_threads: 1, no_ack: false, prefetch: prefetch) do |message|
|
155
|
+
if message.properties.type == 'timeout'
|
156
|
+
message.ack # Remove the timeout message from the queue
|
157
|
+
min_batch_size = 0
|
158
|
+
else
|
159
|
+
batch << Queues::Rabbit::Message.new(message)
|
160
|
+
min_batch_size = batch_size
|
161
|
+
end
|
162
|
+
if batch.size > 0 && batch.size >= min_batch_size
|
163
|
+
batch.each(&:ack) if no_ack
|
164
|
+
consumer.batch_consume(batch)
|
165
|
+
batch = []
|
166
|
+
end
|
167
|
+
rescue Exception => e
|
168
|
+
logger.error { e.message }
|
169
|
+
logger.stdout e.message, :error
|
170
|
+
end
|
171
|
+
|
172
|
+
loop do
|
173
|
+
logger.stdout "Connection to #{name} alive."
|
174
|
+
sleep batch_timeout
|
175
|
+
queue_instance.publish('', type: 'timeout', persistent: false, espiration: 3.seconds)
|
176
|
+
end
|
177
|
+
rescue Exception => e
|
178
|
+
logger.error_with_report "Unable to connect to #{name}: #{e.message}."
|
179
|
+
false
|
180
|
+
end
|
181
|
+
|
182
|
+
#
|
183
|
+
# Unbind a Queue from an Exchange
|
184
|
+
#
|
185
|
+
# @param [String] exchange Exchange name
|
186
|
+
# @param [String] binding_key Exchange binding key
|
187
|
+
# @param [Hash] arguments Message headers to match on (only relevant for header exchanges)
|
188
|
+
#
|
189
|
+
# @return [Boolean] True if unbounded, false otherwise.
|
190
|
+
#
|
102
191
|
def unbind(exchange, binding_key, arguments: {})
|
103
192
|
exchange = exchange < Queues::Rabbit::Exchange ? exchange.name : exchange
|
104
193
|
queue_instance.unbind(exhange, binding_key, arguments: arguments)
|
@@ -107,10 +196,26 @@ module Queues
|
|
107
196
|
logger.error_with_report "Unable to unbind '#{name}' to '#{exchange}' with key '#{binding_key}' and arguments: '#{arguments}': #{e.message}."
|
108
197
|
false
|
109
198
|
end
|
110
|
-
end
|
111
199
|
|
112
|
-
|
113
|
-
|
200
|
+
private
|
201
|
+
|
202
|
+
#
|
203
|
+
# Return the logger instance
|
204
|
+
#
|
205
|
+
# @return [Queues::Rabbit::Logger] Logger instance
|
206
|
+
#
|
207
|
+
def logger
|
208
|
+
@@logger ||= Queues::Rabbit::Logger.new(name, Queues::Rabbit.log_level)
|
209
|
+
end
|
210
|
+
|
211
|
+
#
|
212
|
+
# Return the Queue instance
|
213
|
+
#
|
214
|
+
# @return [AMQP::Client::Client] Queue instance
|
215
|
+
#
|
216
|
+
def queue_instance
|
217
|
+
@@queue_instance ||= schema.client_instance.queue(name, arguments: arguments, auto_delete: auto_delete, durable: durable)
|
218
|
+
end
|
114
219
|
end
|
115
220
|
end
|
116
221
|
end
|
data/lib/queues/rabbit/schema.rb
CHANGED
@@ -3,20 +3,34 @@
|
|
3
3
|
module Queues
|
4
4
|
module Rabbit
|
5
5
|
class Schema
|
6
|
-
include ActiveModel::Model
|
7
6
|
class << self
|
8
7
|
attr_accessor :client, :exchanges, :queues
|
9
8
|
|
9
|
+
#
|
10
|
+
# Return the client instance
|
11
|
+
#
|
12
|
+
# @return [AMQP::Client] Client instance
|
13
|
+
#
|
10
14
|
def client_instance
|
11
15
|
@@client_instance ||= client.start
|
12
16
|
end
|
13
17
|
|
18
|
+
#
|
19
|
+
# Register an Exchange
|
20
|
+
#
|
21
|
+
# @param [Queues::Rabbit::Exchange] klass Exchange class to register
|
22
|
+
#
|
14
23
|
def exchange(klass)
|
15
24
|
self.exchanges ||= []
|
16
25
|
self.exchanges << klass
|
17
26
|
klass.schema = self
|
18
27
|
end
|
19
28
|
|
29
|
+
#
|
30
|
+
# Register a Queue
|
31
|
+
#
|
32
|
+
# @param [Queues::Rabbit::Queue] klass Queue class to register
|
33
|
+
#
|
20
34
|
def queue(klass)
|
21
35
|
self.queues ||= []
|
22
36
|
self.queues << klass
|
data/lib/queues/rabbit.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: queues-rabbit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0.beta
|
4
|
+
version: 0.1.0.beta.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lapo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: amqp-client
|
@@ -38,7 +38,8 @@ dependencies:
|
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.1.0.beta
|
41
|
-
description:
|
41
|
+
description: The gem allows you to integrate RabbitMQ into a Rails application in
|
42
|
+
a Ruby Style fashion.
|
42
43
|
email:
|
43
44
|
- lapoelisacci@gmail.com
|
44
45
|
executables: []
|
@@ -91,5 +92,5 @@ requirements: []
|
|
91
92
|
rubygems_version: 3.2.22
|
92
93
|
signing_key:
|
93
94
|
specification_version: 4
|
94
|
-
summary:
|
95
|
+
summary: A Rails implementation of RabbitMQ
|
95
96
|
test_files: []
|