rabbit_messaging 0.7.1 → 0.8.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3f1b038de91f05a992e1c8cd26cd2fbffc3eacff6876b53399ec48452dbdd57d
4
- data.tar.gz: b1c5c72e4486dad8150b5c96e0e84dcd170362267addb5126a4b41a15442c7d1
3
+ metadata.gz: 4cad15ae9d132080bcf28a14883df7a97a5f010bc87e32b7904467d136404741
4
+ data.tar.gz: bd799cfe37ffd1ef3d8b139fae8440807efe44a10fe886d19b3a2cdfaac9426b
5
5
  SHA512:
6
- metadata.gz: af0bdacb84ef30a921b8feb3037d0a09ad989ad869fed8b21a213e5be990181fe9c96367c3e5ca601935c9b135a0b3bb3ad1f2a021047df3ccc1548ce8452883
7
- data.tar.gz: e1e4250eb88622b1c0f27aa8abac6d117cfd0672fc75750b2f6f76c357459298fd115a11cf45d29812bcc9decc032ab91dee00251d0dff7b52ef4d9efc0a92e1
6
+ metadata.gz: e417cacf4032d25f7452e77eb9f2bd966f5933f1d6fc0334c785b34ba482824d8920f548dc8ce848be7db969c75f0496d22e6554b2cf65cf59a60b7290046486
7
+ data.tar.gz: 4843680308d9d9c882fad903d003f4b973fc23860af14c8a3f29138187726cba6182974a91eed83cd723e73d9223b6d4b8710f0c05fe8d0af3223519296d77b9
@@ -3,7 +3,7 @@ inherit_gem:
3
3
 
4
4
  AllCops:
5
5
  DisplayCopNames: true
6
- TargetRubyVersion: 2.3
6
+ TargetRubyVersion: 2.5
7
7
  Include:
8
8
  - lib/**/*.rb
9
9
  - spec/**/*.rb
@@ -2,10 +2,9 @@ language: ruby
2
2
  matrix:
3
3
  fast_finish: true
4
4
  include:
5
- - rvm: 2.3
6
- - rvm: 2.4
7
5
  - rvm: 2.5
8
6
  - rvm: 2.6
7
+ - rvm: 2.7
9
8
  - rvm: ruby-head
10
9
  allow_failures:
11
10
  - rvm: ruby-head
@@ -1,6 +1,28 @@
1
1
  # Changelog
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
+ ## [0.8.1] - 2020-11-05
5
+ ### Added
6
+ - channels pool for manage channels on Publisher connection
7
+ ### Changed
8
+ - Publisher use channels pool for access to channel
9
+
10
+ ## [0.8.0] - 2020-10-28
11
+ ### Added
12
+ - class Rabbit::Recieving::Receive for message processing
13
+ - class Rabbit::Recieving::Queue for queue name determination when receiving
14
+ - message_id argument in published and received messages
15
+ - before and after hooks when processing message
16
+ - specs for new functionality
17
+ - arguments attribute in received message and handler (contain raw message arguments with exchange and routing_key from the delivery_info)
18
+
19
+ ### Changed
20
+ - Rabbit::Receiving::Worker refactoring (message processing moved to a separate class)
21
+ - ruby version upped to 2.5
22
+ - rubocop ruby target version set to 2.5
23
+ - some fixes of updated rubocop and ruby warnings
24
+ - heavy refactoring of old specs for receiving
25
+
4
26
  ## [0.7.1] - 2020-06-09
5
27
  ### Changed
6
28
  - (Partially Fixed) Support for pre-defined logger injection on Sneakers moudle;
data/README.md CHANGED
@@ -71,6 +71,22 @@ require "rabbit_messaging"
71
71
  config.exception_notifier = proc { |e| MyCoolNotifier.notify!(e) }
72
72
  ```
73
73
 
74
+ * `before_receiving_hooks, after_receiving_hooks` (`Array of Procs`)
75
+
76
+ Before and after hooks with message processing in the middle. Where `before_receiving_hooks` and `after_receiving_hooks` are empty arrays by default.
77
+
78
+ It's advised to NOT place procs with long execution time inside.
79
+
80
+ Setup:
81
+
82
+ ```ruby
83
+ config.before_receiving_hooks.append(proc { |message, arguments| do_stuff_1 })
84
+ config.before_receiving_hooks.append(proc { |message, arguments| do_stuff_2 })
85
+
86
+ config.after_receiving_hooks.append(proc { |message, arguments| do_stuff_3 })
87
+ config.after_receiving_hooks.append(proc { |message, arguments| do_stuff_4 })
88
+
89
+ ```
74
90
  ---
75
91
 
76
92
  ### Client
@@ -83,6 +99,7 @@ Rabbit.publish(
83
99
  exchange_name: 'fanout', # default is fine too
84
100
  confirm_select: true, # setting this to false grants you great speed up and absolutelly no guarantees
85
101
  headers: { "foo" => "bar" }, # custom arguments for routing, default is {}
102
+ message_id: "asdadsadsad", # A unique identifier such as a UUID that your application can use to identify the message.
86
103
  )
87
104
  ```
88
105
 
@@ -23,6 +23,8 @@ module Rabbit
23
23
  attribute :queue_name_conversion
24
24
  attribute :receiving_job_class_callable
25
25
  attribute :exception_notifier, default: -> { default_exception_notifier }
26
+ attribute :before_receiving_hooks, default: []
27
+ attribute :after_receiving_hooks, default: []
26
28
 
27
29
  attribute :receive_logger, default: lambda {
28
30
  Logger.new(Rails.root.join("log", "incoming_rabbit_messages.log"))
@@ -28,7 +28,7 @@ module Rabbit
28
28
  Sneakers.logger = Logger.new(Rails.root.join("log", "sneakers.log"))
29
29
  Sneakers.logger.level = Logger::DEBUG
30
30
  Lamian.extend_logger(Sneakers.logger)
31
- end
31
+ end
32
32
 
33
33
  Sneakers.server = true
34
34
 
@@ -7,7 +7,9 @@ class Rabbit::EventHandler
7
7
  include Tainbox
8
8
 
9
9
  attribute :project_id
10
- attr_accessor :data
10
+ attribute :data
11
+ attribute :message_info
12
+
11
13
  class_attribute :queue
12
14
  class_attribute :ignore_queue_conversion, default: false
13
15
 
@@ -20,8 +22,9 @@ class Rabbit::EventHandler
20
22
  end
21
23
 
22
24
  def initialize(message)
23
- self.attributes = message.data
24
- self.data = message.data
25
- self.project_id = message.project_id
25
+ self.attributes = message.data
26
+ self.data = message.data
27
+ self.project_id = message.project_id
28
+ self.message_info = message.arguments
26
29
  end
27
30
  end
@@ -5,39 +5,32 @@ require "rabbit/publishing/message"
5
5
  module Rabbit
6
6
  module Publishing
7
7
  autoload :Job, "rabbit/publishing/job"
8
+ autoload :ChannelsPool, "rabbit/publishing/channels_pool"
9
+ extend self
8
10
 
9
11
  MUTEX = Mutex.new
10
12
 
11
- extend self
13
+ def publish(msg)
14
+ return if Rabbit.config.environment.in? %i[test development]
12
15
 
13
- def publish(message)
14
- return unless client
16
+ pool.with_channel msg.confirm_select? do |ch|
17
+ ch.basic_publish *msg.basic_publish_args
15
18
 
16
- channel = channel(message.confirm_select?)
17
- channel.basic_publish(*message.basic_publish_args)
19
+ raise MessageNotDelivered, "RabbitMQ message not delivered: #{msg}" \
20
+ if msg.confirm_select? && !ch.wait_for_confirms
18
21
 
19
- if message.confirm_select? && !channel.wait_for_confirms
20
- raise MessageNotDelivered, "RabbitMQ message not delivered: #{message}"
21
- else
22
- log(message)
22
+ log msg
23
23
  end
24
24
  rescue Timeout::Error
25
25
  raise MessageNotDelivered, <<~MESSAGE
26
- Timeout while sending message #{message}. Possible reasons:
27
- - #{message.real_exchange_name} exchange is not found
26
+ Timeout while sending message #{msg}. Possible reasons:
27
+ - #{msg.real_exchange_name} exchange is not found
28
28
  - RabbitMQ is extremely high loaded
29
29
  MESSAGE
30
30
  end
31
31
 
32
- def client
33
- MUTEX.synchronize { @client ||= create_client }
34
- end
35
-
36
- def channel(confirm)
37
- Thread.current[:bunny_channels] ||= {}
38
- channel = Thread.current[:bunny_channels][confirm]
39
- Thread.current[:bunny_channels][confirm] = create_channel(confirm) unless channel&.open?
40
- Thread.current[:bunny_channels][confirm]
32
+ def pool
33
+ MUTEX.synchronize { @pool ||= ChannelsPool.new(create_client) }
41
34
  end
42
35
 
43
36
  private
@@ -47,22 +40,10 @@ module Rabbit
47
40
  end
48
41
 
49
42
  def create_client
50
- return if Rabbit.config.environment == :test
51
-
52
43
  config = Rails.application.config_for("sneakers") rescue {}
53
44
  config = config["bunny_options"].to_h.symbolize_keys
54
45
 
55
- begin
56
- Bunny.new(config).start
57
- rescue
58
- raise unless Rabbit.config.environment == :development
59
- end
60
- end
61
-
62
- def create_channel(confirm)
63
- channel = client.create_channel
64
- channel.confirm_select if confirm
65
- channel
46
+ Bunny.new(config).start
66
47
  end
67
48
 
68
49
  def log(message)
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rabbit
4
+ module Publishing
5
+ class ChannelsPool
6
+ class BaseQueue < Queue
7
+ def initialize(session, max_size)
8
+ super()
9
+
10
+ @session = session
11
+ @max_size = max_size - 1
12
+ @ch_size = 0
13
+ @create_mon = Mutex.new
14
+ @ch_dec_mon = Mutex.new
15
+ end
16
+
17
+ def pop
18
+ add_channel if size.zero?
19
+
20
+ super
21
+ end
22
+ alias_method :deq, :pop
23
+
24
+ def push(channel)
25
+ return @ch_dec_mon.synchronize { @ch_size -= 1 } unless channel&.open?
26
+
27
+ super
28
+ end
29
+ alias_method :enq, :push
30
+
31
+ def add_channel
32
+ @create_mon.synchronize do
33
+ return unless @ch_size < @max_size
34
+
35
+ push create_channel
36
+ @ch_size += 1
37
+ end
38
+ end
39
+
40
+ protected
41
+
42
+ def create_channel
43
+ @session.create_channel
44
+ end
45
+ end
46
+
47
+ class ConfirmQueue < BaseQueue
48
+ def create_channel
49
+ ch = @session.create_channel
50
+ ch.confirm_select
51
+
52
+ ch
53
+ end
54
+ end
55
+
56
+ def initialize(session)
57
+ max_size = session.channel_max
58
+
59
+ @pools = {
60
+ true => ConfirmQueue.new(session, max_size / 2),
61
+ false => BaseQueue.new(session, max_size / 2),
62
+ }.freeze
63
+ end
64
+
65
+ def with_channel(confirm)
66
+ pool = @pools[confirm]
67
+ ch = pool.deq
68
+ yield ch
69
+ ensure
70
+ pool.enq ch
71
+ end
72
+ end
73
+ end
74
+ end
@@ -6,13 +6,14 @@ module Rabbit::Publishing
6
6
  class Message
7
7
  include Tainbox
8
8
 
9
- attribute :routing_key, String
10
- attribute :event, String
11
- attribute :data, default: {}
12
- attribute :exchange_name, default: []
9
+ attribute :routing_key, String
10
+ attribute :event, String
11
+ attribute :data, default: {}
12
+ attribute :exchange_name, default: []
13
13
  attribute :confirm_select, default: true
14
- attribute :realtime, default: false
14
+ attribute :realtime, default: false
15
15
  attribute :headers
16
+ attribute :message_id
16
17
 
17
18
  alias_method :confirm_select?, :confirm_select
18
19
  alias_method :realtime?, :realtime
@@ -41,6 +42,7 @@ module Rabbit::Publishing
41
42
  content_type: "application/json",
42
43
  app_id: Rabbit.config.app_name,
43
44
  headers: headers,
45
+ message_id: message_id,
44
46
  }
45
47
 
46
48
  [JSON.dump(data), real_exchange_name, routing_key.to_s, options]
@@ -11,14 +11,12 @@ require "rabbit/receiving/malformed_message"
11
11
  class Rabbit::Receiving::Job < ActiveJob::Base
12
12
  def perform(message, arguments)
13
13
  Lamian.run do
14
- begin
15
- message = Rabbit::Receiving::Message.build(message, arguments)
16
- handler = Rabbit::Receiving::HandlerResolver.handler_for(message)
17
- handler.new(message).call
18
- rescue Rabbit::Receiving::MalformedMessage => error
19
- raise if Rabbit.config.environment == :test
20
- Rabbit.config.exception_notifier.call(error)
21
- end
14
+ message = Rabbit::Receiving::Message.build(message, arguments)
15
+ handler = Rabbit::Receiving::HandlerResolver.handler_for(message)
16
+ handler.new(message).call
17
+ rescue Rabbit::Receiving::MalformedMessage => error
18
+ raise if Rabbit.config.environment == :test
19
+ Rabbit.config.exception_notifier.call(error)
22
20
  end
23
21
  end
24
22
  end
@@ -10,16 +10,23 @@ module Rabbit::Receiving
10
10
 
11
11
  attribute :group_id
12
12
  attribute :project_id
13
+ attribute :message_id
13
14
  attribute :event
14
15
  attribute :data
16
+ attribute :arguments
15
17
  attribute :original_message
16
18
 
17
- attr_accessor :original_message
18
-
19
- def self.build(message, type:, app_id:, **)
20
- group_id, project_id = app_id.split(".")
21
-
22
- new(group_id: group_id, project_id: project_id, event: type, data: message)
19
+ def self.build(message, arguments)
20
+ group_id, project_id = arguments.fetch(:app_id).split(".")
21
+
22
+ new(
23
+ group_id: group_id,
24
+ project_id: project_id,
25
+ event: arguments.fetch(:type),
26
+ data: message,
27
+ message_id: arguments.fetch(:message_id, nil),
28
+ arguments: arguments,
29
+ )
23
30
  end
24
31
 
25
32
  def data=(value)
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rabbit"
4
+ require "rabbit/receiving/message"
5
+ require "rabbit/receiving/handler_resolver"
6
+
7
+ class Rabbit::Receiving::Queue
8
+ attr_reader :message, :arguments, :handler, :queue_name, :ignore_conversion
9
+
10
+ delegate :queue, to: :handler
11
+
12
+ def initialize(raw_message, arguments)
13
+ @message = Rabbit::Receiving::Message.build(raw_message, arguments)
14
+ @handler = Rabbit::Receiving::HandlerResolver.handler_for(message)
15
+ @arguments = arguments
16
+ @queue_name = resolved_queue_name
17
+ @ignore_conversion = handler.ignore_queue_conversion
18
+ end
19
+
20
+ def name
21
+ if queue_name
22
+ calculated_queue_name
23
+ else
24
+ Rabbit.default_queue_name(ignore_conversion: ignore_conversion)
25
+ end
26
+ rescue
27
+ Rabbit.default_queue_name
28
+ end
29
+
30
+ private
31
+
32
+ def resolved_queue_name
33
+ queue.is_a?(Proc) ? queue.call(message, arguments) : queue
34
+ end
35
+
36
+ def calculated_queue_name
37
+ Rabbit.queue_name(queue_name, ignore_conversion: ignore_conversion)
38
+ end
39
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tainbox"
4
+
5
+ require "rabbit"
6
+ require "rabbit/receiving/queue"
7
+
8
+ class Rabbit::Receiving::Receive
9
+ autoload :Job, "rabbit/receiving/job"
10
+
11
+ include Tainbox
12
+
13
+ attribute :message
14
+ attribute :delivery_info
15
+ attribute :arguments
16
+
17
+ def call
18
+ log!
19
+ call_hooks(before_hooks)
20
+ process_message
21
+ call_hooks(after_hooks)
22
+ end
23
+
24
+ def log!
25
+ Rabbit.config.receive_logger.debug(
26
+ [message, delivery_info, arguments].join(" / "),
27
+ )
28
+ end
29
+
30
+ def process_message
31
+ job_class
32
+ .set(queue: queue)
33
+ .perform_later(message, message_info)
34
+ end
35
+
36
+ def call_hooks(hooks)
37
+ hooks.each do |hook_proc|
38
+ hook_proc.call(message, message_info)
39
+ end
40
+ end
41
+
42
+ def before_hooks
43
+ Rabbit.config.before_receiving_hooks || []
44
+ end
45
+
46
+ def after_hooks
47
+ Rabbit.config.after_receiving_hooks || []
48
+ end
49
+
50
+ def message_info
51
+ arguments.merge(
52
+ delivery_info.slice(:exchange, :routing_key),
53
+ )
54
+ end
55
+
56
+ def queue
57
+ Rabbit::Receiving::Queue.new(message, arguments).name
58
+ end
59
+
60
+ def job_class
61
+ Rabbit.config.receiving_job_class_callable&.call || Rabbit::Receiving::Job
62
+ end
63
+ end
@@ -3,52 +3,29 @@
3
3
  require "sneakers"
4
4
 
5
5
  require "rabbit"
6
- require "rabbit/receiving/message"
7
- require "rabbit/receiving/malformed_message"
8
- require "rabbit/receiving/handler_resolver"
6
+ require "rabbit/receiving/receive"
9
7
 
10
- module Rabbit::Receiving
11
- autoload :Job, "rabbit/receiving/job"
8
+ class Rabbit::Receiving::Worker
9
+ include Sneakers::Worker
12
10
 
13
- class Worker
14
- include Sneakers::Worker
15
-
16
- def self.logger
17
- @logger ||= Rabbit.config.receive_logger
18
- end
19
-
20
- def work_with_params(message, delivery_info, arguments)
21
- message = message.dup.force_encoding("UTF-8")
22
- self.class.logger.debug([message, delivery_info, arguments].join(" / "))
23
- job_class.set(queue: queue(message, arguments)).perform_later(message, arguments.to_h)
24
- ack!
25
- rescue => error
26
- raise if Rabbit.config.environment == :test
27
- Rabbit.config.exception_notifier.call(error)
28
- requeue!
29
- end
30
-
31
- private
32
-
33
- def queue(message, arguments)
34
- message = Rabbit::Receiving::Message.build(message, arguments)
35
- handler = Rabbit::Receiving::HandlerResolver.handler_for(message)
36
- queue_name = handler.queue
37
- ignore_conversion = handler.ignore_queue_conversion
38
-
39
- return Rabbit.default_queue_name(ignore_conversion: ignore_conversion) unless queue_name
40
-
41
- calculated_queue = begin
42
- queue_name.is_a?(Proc) ? queue_name.call(message, arguments) : queue_name
43
- end
11
+ def work_with_params(message, delivery_info, arguments)
12
+ receive_message(message, delivery_info, arguments)
13
+ ack!
14
+ rescue => error
15
+ handle_error!(error)
16
+ end
44
17
 
45
- Rabbit.queue_name(calculated_queue, ignore_conversion: ignore_conversion)
46
- rescue
47
- Rabbit.default_queue_name
48
- end
18
+ def receive_message(message, delivery_info, arguments)
19
+ Rabbit::Receiving::Receive.new(
20
+ message: message.dup.force_encoding("UTF-8"),
21
+ delivery_info: delivery_info,
22
+ arguments: arguments,
23
+ ).call
24
+ end
49
25
 
50
- def job_class
51
- Rabbit.config.receiving_job_class_callable&.call || Job
52
- end
26
+ def handle_error!(error)
27
+ raise if Rabbit.config.environment == :test
28
+ Rabbit.config.exception_notifier.call(error)
29
+ requeue!
53
30
  end
54
31
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rabbit
4
- VERSION = "0.7.1"
4
+ VERSION = "0.8.1"
5
5
  end
@@ -5,7 +5,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require "rabbit/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.required_ruby_version = ">= 2.3.8"
8
+ spec.required_ruby_version = ">= 2.5"
9
9
 
10
10
  spec.name = "rabbit_messaging"
11
11
  spec.version = Rabbit::VERSION
@@ -22,13 +22,13 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency "bunny", "~> 2.0"
23
23
  spec.add_runtime_dependency "exception_notification"
24
24
  spec.add_runtime_dependency "lamian"
25
- spec.add_runtime_dependency "rails"
25
+ spec.add_runtime_dependency "rails", ">= 5.2"
26
26
  spec.add_runtime_dependency "sneakers", "~> 2.0"
27
27
  spec.add_runtime_dependency "tainbox"
28
28
 
29
29
  spec.add_development_dependency "bundler"
30
30
  spec.add_development_dependency "bundler-audit"
31
- spec.add_development_dependency "coveralls"
31
+ spec.add_development_dependency "coveralls", ">=0.8"
32
32
  spec.add_development_dependency "pry"
33
33
  spec.add_development_dependency "rake"
34
34
  spec.add_development_dependency "rspec"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbit_messaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Umbrellio
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-09 00:00:00.000000000 Z
11
+ date: 2020-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '5.2'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '5.2'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sneakers
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: '0.8'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: '0.8'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: pry
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -244,6 +244,7 @@ files:
244
244
  - lib/rabbit/event_handler.rb
245
245
  - lib/rabbit/extensions/bunny/channel.rb
246
246
  - lib/rabbit/publishing.rb
247
+ - lib/rabbit/publishing/channels_pool.rb
247
248
  - lib/rabbit/publishing/job.rb
248
249
  - lib/rabbit/publishing/message.rb
249
250
  - lib/rabbit/receiving.rb
@@ -251,6 +252,8 @@ files:
251
252
  - lib/rabbit/receiving/job.rb
252
253
  - lib/rabbit/receiving/malformed_message.rb
253
254
  - lib/rabbit/receiving/message.rb
255
+ - lib/rabbit/receiving/queue.rb
256
+ - lib/rabbit/receiving/receive.rb
254
257
  - lib/rabbit/receiving/worker.rb
255
258
  - lib/rabbit/test_helpers.rb
256
259
  - lib/rabbit/version.rb
@@ -259,7 +262,7 @@ files:
259
262
  homepage: https://github.com/umbrellio/rabbit_messaging
260
263
  licenses: []
261
264
  metadata: {}
262
- post_install_message:
265
+ post_install_message:
263
266
  rdoc_options: []
264
267
  require_paths:
265
268
  - lib
@@ -267,15 +270,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
267
270
  requirements:
268
271
  - - ">="
269
272
  - !ruby/object:Gem::Version
270
- version: 2.3.8
273
+ version: '2.5'
271
274
  required_rubygems_version: !ruby/object:Gem::Requirement
272
275
  requirements:
273
276
  - - ">="
274
277
  - !ruby/object:Gem::Version
275
278
  version: '0'
276
279
  requirements: []
277
- rubygems_version: 3.1.2
278
- signing_key:
280
+ rubygems_version: 3.2.0.rc.1
281
+ signing_key:
279
282
  specification_version: 4
280
283
  summary: Rabbit (Rabbit Messaging)
281
284
  test_files: []