rabbit_messaging 1.5.0 → 1.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da5252952f99344a807697e8c3bedd069160a41af4709af9b0120b5d0e486e90
4
- data.tar.gz: c35f327f41ab3f2d9f358c1ac4d4e3bf688b9c2922da5624d96d61c70f57356c
3
+ metadata.gz: da8382b750cf7777dc5870a678a6cdbb6868debf75cce98cfabb92770bf418ba
4
+ data.tar.gz: 3a77171c83255cfccf856c850c4e4586dbd193415ac169b21ab93515a12d0191
5
5
  SHA512:
6
- metadata.gz: b403d0df5c612f549d310bf9170b9ea7046fdbc65afbce868a4c291297f0b8060d4840b6a19fd7808a775f3d52946f7ebe1c79c23ef10133a2e37bc0847d2ad1
7
- data.tar.gz: b4de5dda09cf5dc34ac46c7f8352aa840e477fddaca799ba80435d4ce4c72f525594075042d639145df0e3f424857c2e149709b6e506080be99c391823cb38c0
6
+ metadata.gz: 5ad7bcf9d06545805489937586fb8608d8fb396e4b10c4d25a5f3ceaac9bd719857047bdf222255745ffd44290c15797e1cab514cb0a0c21c6c27b8868ee1544
7
+ data.tar.gz: 5616808defed040cb3161746a006d5b2798eeb837f7a566e22608691f9a12a0434c483adc8d90dc75449547c4754c21759e1ddc59499fb763a50ad19195c4ae7
data/.rubocop.yml CHANGED
@@ -29,3 +29,6 @@ Style/HashConversion:
29
29
 
30
30
  RSpec/ExampleLength:
31
31
  Max: 50
32
+
33
+ Metrics/ParameterLists:
34
+ Max: 40
data/Gemfile.lock CHANGED
@@ -8,10 +8,9 @@ GIT
8
8
  PATH
9
9
  remote: .
10
10
  specs:
11
- rabbit_messaging (1.5.0)
11
+ rabbit_messaging (1.6.0)
12
12
  bunny (~> 2.0)
13
13
  kicks
14
- tainbox
15
14
 
16
15
  GEM
17
16
  remote: https://rubygems.org/
@@ -152,8 +151,6 @@ GEM
152
151
  sorted_set (1.0.3)
153
152
  rbtree
154
153
  set (~> 1.0)
155
- tainbox (2.1.2)
156
- activesupport
157
154
  thor (1.3.2)
158
155
  timeout (0.4.3)
159
156
  tzinfo (2.0.6)
data/README.md CHANGED
@@ -208,8 +208,6 @@ to teardown and setup external connections between daemon restarts, for example
208
208
  Rabbit.config.handler_resolver_callable = -> (group_id, event) { "recivers/#{group_id}/#{event}".camelize.constantize }
209
209
  ```
210
210
 
211
- They use powerful `Tainbox` api to handle message data. Project_id also passed to them.
212
-
213
211
  If you wish so, you can override `initialize(message)`, where message is an object
214
212
  with simple api (@see lib/rabbit/receiving/message.rb)
215
213
 
data/bin/console CHANGED
@@ -1,8 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Required for tainbox :(
4
- require "active_support/deprecation"
5
- require "active_support/deprecator"
3
+ require "active_support/core_ext/module/delegation"
6
4
 
7
5
  require "bundler/setup"
8
6
  require "rabbit_messaging"
@@ -1,20 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "tainbox"
4
3
  require "active_support/core_ext/class/attribute"
5
4
 
6
5
  class Rabbit::EventHandler
7
- include Tainbox
6
+ attr_accessor :project_id, :data, :message_info
8
7
 
9
- attribute :project_id
10
- attribute :data
11
- attribute :message_info
8
+ class << self
9
+ attr_accessor :queue, :ignore_queue_conversion, :additional_job_configs
12
10
 
13
- class_attribute :queue
14
- class_attribute :ignore_queue_conversion, default: false
15
- class_attribute :additional_job_configs, default: {}
11
+ def inherited(subclass)
12
+ super
13
+ subclass.ignore_queue_conversion = false
14
+ subclass.additional_job_configs = {}
15
+ end
16
16
 
17
- class << self
18
17
  private
19
18
 
20
19
  def queue_as(queue = nil, &block)
@@ -31,9 +30,17 @@ class Rabbit::EventHandler
31
30
  end
32
31
 
33
32
  def initialize(message)
34
- self.attributes = message.data
35
- self.data = message.data
36
- self.project_id = message.project_id
33
+ assign_attributes(message.data)
34
+
35
+ self.data = message.data
36
+ self.project_id = message.project_id
37
37
  self.message_info = message.arguments
38
38
  end
39
+
40
+ def assign_attributes(attrs = {})
41
+ attrs.each do |key, value|
42
+ setter = "#{key}="
43
+ public_send(setter, value) if respond_to?(setter)
44
+ end
45
+ end
39
46
  end
@@ -1,28 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "tainbox"
4
-
5
3
  module Rabbit::Publishing
6
4
  class Message
7
- include Tainbox
8
-
9
- attribute :routing_key, String
10
- attribute :event, String
11
- attribute :data, default: {}
12
- attribute :exchange_name, default: []
13
- attribute :confirm_select, default: true
14
- attribute :realtime, default: false
15
- attribute :headers
16
- attribute :message_id
5
+ attr_accessor :routing_key, :event, :data,
6
+ :confirm_select, :realtime, :headers, :message_id
7
+ attr_reader :exchange_name
17
8
 
18
9
  alias_method :confirm_select?, :confirm_select
19
10
  alias_method :realtime?, :realtime
20
11
 
12
+ def initialize(attributes = {})
13
+ self.routing_key = attributes[:routing_key]
14
+ self.event = attributes[:event]&.to_s
15
+ self.data = attributes.fetch(:data, {})
16
+ self.exchange_name = Array(attributes.fetch(:exchange_name, []))
17
+ self.confirm_select = attributes.fetch(:confirm_select, true)
18
+ self.realtime = attributes.fetch(:realtime, false)
19
+ self.headers = attributes.fetch(:headers, {})
20
+ self.message_id = attributes[:message_id]
21
+ end
22
+
21
23
  def to_hash
22
- {
23
- **attributes,
24
- data: JSON.parse(data.to_json),
25
- }
24
+ instance_variables.each_with_object({}) do |var, hash|
25
+ key = var.to_s.delete("@").to_sym
26
+ value = instance_variable_get(var)
27
+ hash[key] = value
28
+ end.merge(data: JSON.parse(data.to_json))
26
29
  end
27
30
 
28
31
  def to_s
@@ -49,15 +52,11 @@ module Rabbit::Publishing
49
52
  end
50
53
 
51
54
  def exchange_name=(names)
52
- super(Array(names).map(&:to_s))
55
+ @exchange_name = Array(names).map(&:to_s)
53
56
  end
54
57
 
55
58
  def real_exchange_name
56
59
  [Rabbit.config.group_id, Rabbit.config.project_id, *exchange_name].join(".")
57
60
  end
58
-
59
- def headers
60
- super || {}
61
- end
62
61
  end
63
62
  end
@@ -1,20 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "tainbox"
4
-
5
3
  require "rabbit/receiving/malformed_message"
6
4
 
7
5
  module Rabbit::Receiving
8
6
  class Message
9
- include Tainbox
10
-
11
- attribute :group_id
12
- attribute :project_id
13
- attribute :message_id
14
- attribute :event
15
- attribute :data
16
- attribute :arguments
17
- attribute :original_message
7
+ attr_accessor :group_id, :project_id, :message_id,
8
+ :event, :arguments, :original_message
9
+ attr_reader :data
18
10
 
19
11
  def self.build(message, arguments)
20
12
  group_id, project_id = arguments.fetch(:app_id).split(".")
@@ -29,9 +21,28 @@ module Rabbit::Receiving
29
21
  )
30
22
  end
31
23
 
24
+ def initialize(
25
+ group_id: nil,
26
+ project_id: nil,
27
+ message_id: nil,
28
+ event: nil,
29
+ data: nil,
30
+ arguments: nil,
31
+ original_message: nil
32
+ )
33
+ self.group_id = group_id
34
+ self.project_id = project_id
35
+ self.message_id = message_id
36
+ self.event = event
37
+ self.data = data unless data.nil?
38
+ self.arguments = arguments
39
+ self.original_message = original_message
40
+ end
41
+
32
42
  def data=(value)
33
43
  self.original_message = value
34
- super(JSON.parse(value).deep_symbolize_keys)
44
+ parsed = JSON.parse(value).deep_symbolize_keys
45
+ @data = parsed
35
46
  rescue JSON::ParserError => error
36
47
  mark_as_malformed!("JSON::ParserError: #{error.message}")
37
48
  end
@@ -39,5 +50,17 @@ module Rabbit::Receiving
39
50
  def mark_as_malformed!(errors = "Error not specified")
40
51
  MalformedMessage.raise!(self, errors, caller(1))
41
52
  end
53
+
54
+ def attributes
55
+ {
56
+ group_id: group_id,
57
+ project_id: project_id,
58
+ message_id: message_id,
59
+ event: event,
60
+ data: data,
61
+ arguments: arguments,
62
+ original_message: original_message,
63
+ }
64
+ end
42
65
  end
43
66
  end
@@ -1,18 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "tainbox"
4
-
5
3
  require "rabbit"
6
4
  require "rabbit/receiving/queue"
7
5
  require "rabbit/receiving/job"
8
6
  require "rabbit/helper"
9
7
 
10
8
  class Rabbit::Receiving::Receive
11
- include Tainbox
9
+ attr_accessor :message, :delivery_info, :arguments
12
10
 
13
- attribute :message
14
- attribute :delivery_info
15
- attribute :arguments
11
+ def initialize(message: nil, delivery_info: nil, arguments: nil)
12
+ self.message = message
13
+ self.delivery_info = delivery_info
14
+ self.arguments = arguments
15
+ end
16
16
 
17
17
  def call
18
18
  log!
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rabbit
4
- VERSION = "1.5.0"
4
+ VERSION = "1.6.0"
5
5
  end
data/lib/rabbit.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "tainbox"
4
-
5
3
  require "rabbit/version"
6
4
  require "rabbit/daemon"
7
5
  require "rabbit/publishing"
@@ -14,38 +12,74 @@ module Rabbit
14
12
  MessageNotDelivered = Class.new(StandardError)
15
13
 
16
14
  class Config
17
- include Tainbox
18
-
19
- attribute :group_id, :Symbol
20
- attribute :project_id, :Symbol
21
- attribute :queue_suffix, :String
22
- attribute :hooks, default: {}
23
- attribute :environment, :Symbol, default: :production
24
- attribute :queue_name_conversion
25
- attribute :receiving_job_class_callable
26
- attribute :handler_resolver_callable
27
- attribute :exception_notifier
28
- attribute :before_receiving_hooks, default: []
29
- attribute :after_receiving_hooks, default: []
30
- attribute :skip_publishing_in, default: %i[test development]
31
- attribute :use_backoff_handler, :Boolean, default: false
32
- attribute :backoff_handler_max_retries, Integer, default: 6
33
- attribute :connection_reset_max_retries, Integer, default: 10
34
- attribute :connection_reset_timeout, Float, default: 0.2
35
- attribute :connection_reset_exceptions, Array, default: [Bunny::ConnectionClosedError]
36
- attribute :logger_message_size_limit, Integer, default: 9_500
37
-
38
- attribute :receive_logger, default: lambda {
39
- Logger.new(Rabbit.root.join("log", "incoming_rabbit_messages.log"))
40
- }
41
-
42
- attribute :publish_logger, default: lambda {
43
- Logger.new(Rabbit.root.join("log", "rabbit.log"))
44
- }
45
-
46
- attribute :malformed_logger, default: lambda {
47
- Logger.new(Rabbit.root.join("log", "malformed_messages.log"))
48
- }
15
+ attr_accessor :group_id,
16
+ :project_id,
17
+ :queue_suffix,
18
+ :hooks,
19
+ :environment,
20
+ :queue_name_conversion,
21
+ :receiving_job_class_callable,
22
+ :handler_resolver_callable,
23
+ :exception_notifier,
24
+ :before_receiving_hooks,
25
+ :after_receiving_hooks,
26
+ :skip_publishing_in,
27
+ :use_backoff_handler,
28
+ :backoff_handler_max_retries,
29
+ :connection_reset_max_retries,
30
+ :connection_reset_timeout,
31
+ :connection_reset_exceptions,
32
+ :logger_message_size_limit,
33
+ :receive_logger,
34
+ :publish_logger,
35
+ :malformed_logger
36
+
37
+ def initialize( # rubocop:disable Metrics/MethodLength
38
+ group_id: nil,
39
+ project_id: nil,
40
+ queue_suffix: nil,
41
+ hooks: {},
42
+ environment: :production,
43
+ queue_name_conversion: nil,
44
+ receiving_job_class_callable: nil,
45
+ handler_resolver_callable: nil,
46
+ exception_notifier: nil,
47
+ before_receiving_hooks: [],
48
+ after_receiving_hooks: [],
49
+ skip_publishing_in: %i[test development],
50
+ use_backoff_handler: false,
51
+ backoff_handler_max_retries: 6,
52
+ connection_reset_max_retries: 10,
53
+ connection_reset_timeout: 0.2,
54
+ connection_reset_exceptions: [Bunny::ConnectionClosedError],
55
+ logger_message_size_limit: 9_500,
56
+ receive_logger: nil,
57
+ publish_logger: nil,
58
+ malformed_logger: nil
59
+ )
60
+ self.group_id = group_id
61
+ self.project_id = project_id
62
+ self.queue_suffix = queue_suffix
63
+ self.hooks = hooks
64
+ self.environment = environment
65
+ self.queue_name_conversion = queue_name_conversion
66
+ self.receiving_job_class_callable = receiving_job_class_callable
67
+ self.handler_resolver_callable = handler_resolver_callable
68
+ self.exception_notifier = exception_notifier
69
+ self.before_receiving_hooks = before_receiving_hooks
70
+ self.after_receiving_hooks = after_receiving_hooks
71
+ self.skip_publishing_in = skip_publishing_in
72
+ self.use_backoff_handler = use_backoff_handler
73
+ self.backoff_handler_max_retries = backoff_handler_max_retries
74
+ self.connection_reset_max_retries = connection_reset_max_retries
75
+ self.connection_reset_timeout = connection_reset_timeout
76
+ self.connection_reset_exceptions = connection_reset_exceptions
77
+ self.logger_message_size_limit = logger_message_size_limit
78
+
79
+ self.receive_logger = receive_logger || default_receive_logger
80
+ self.publish_logger = publish_logger || default_publish_logger
81
+ self.malformed_logger = malformed_logger || default_malformed_logger
82
+ end
49
83
 
50
84
  def validate!
51
85
  raise InvalidConfig, "missing project_id" unless project_id
@@ -68,6 +102,20 @@ module Rabbit
68
102
  def read_queue
69
103
  [app_name, queue_suffix].reject { |x| x.nil? || x.empty? }.join(".")
70
104
  end
105
+
106
+ private
107
+
108
+ def default_receive_logger
109
+ Logger.new(Rabbit.root.join("log", "incoming_rabbit_messages.log"))
110
+ end
111
+
112
+ def default_publish_logger
113
+ Logger.new(Rabbit.root.join("log", "rabbit.log"))
114
+ end
115
+
116
+ def default_malformed_logger
117
+ Logger.new(Rabbit.root.join("log", "malformed_messages.log"))
118
+ end
71
119
  end
72
120
 
73
121
  extend self
@@ -21,5 +21,4 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency "bunny", "~> 2.0"
23
23
  spec.add_dependency "kicks"
24
- spec.add_dependency "tainbox"
25
24
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabbit_messaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Umbrellio
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-05-19 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bunny
@@ -38,20 +37,6 @@ dependencies:
38
37
  - - ">="
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: tainbox
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
40
  description: Rabbit (Rabbit Messaging)
56
41
  email:
57
42
  - oss@umbrellio.biz
@@ -98,7 +83,6 @@ files:
98
83
  homepage: https://github.com/umbrellio/rabbit_messaging
99
84
  licenses: []
100
85
  metadata: {}
101
- post_install_message:
102
86
  rdoc_options: []
103
87
  require_paths:
104
88
  - lib
@@ -113,8 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
97
  - !ruby/object:Gem::Version
114
98
  version: '0'
115
99
  requirements: []
116
- rubygems_version: 3.5.3
117
- signing_key:
100
+ rubygems_version: 3.6.9
118
101
  specification_version: 4
119
102
  summary: Rabbit (Rabbit Messaging)
120
103
  test_files: []