rabbit_messaging 0.7.1 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
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: []