rabbit_messaging 1.5.0 → 1.6.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: da5252952f99344a807697e8c3bedd069160a41af4709af9b0120b5d0e486e90
4
- data.tar.gz: c35f327f41ab3f2d9f358c1ac4d4e3bf688b9c2922da5624d96d61c70f57356c
3
+ metadata.gz: 44db4d5fed7d839ff9d5704da4aa281b1ae488dd80b5164e4ec3795053a73a62
4
+ data.tar.gz: 6fedab5602954dab55f59d0afd6a54f21fd805dfa75db4999875624bdcad40d3
5
5
  SHA512:
6
- metadata.gz: b403d0df5c612f549d310bf9170b9ea7046fdbc65afbce868a4c291297f0b8060d4840b6a19fd7808a775f3d52946f7ebe1c79c23ef10133a2e37bc0847d2ad1
7
- data.tar.gz: b4de5dda09cf5dc34ac46c7f8352aa840e477fddaca799ba80435d4ce4c72f525594075042d639145df0e3f424857c2e149709b6e506080be99c391823cb38c0
6
+ metadata.gz: 25c9356ac30e307f39bd6535031a5d0c0fd958256325e3c5680b3206697ef19e9201389a176487c390fe37b96ba7887587b3da4c65e70f69426b972c1c047772
7
+ data.tar.gz: fad457226ea8db98fc125f36768550787b6ec517e3b66276ef36a5077e694ba9d599ba297ac907a81ebc8eac5fc04be126c1a85e98ab26be1c19319a445cde1e
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.1)
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.1"
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,71 @@ 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
+
34
+ def initialize( # rubocop:disable Metrics/MethodLength
35
+ group_id: nil,
36
+ project_id: nil,
37
+ queue_suffix: nil,
38
+ hooks: {},
39
+ environment: :production,
40
+ queue_name_conversion: nil,
41
+ receiving_job_class_callable: nil,
42
+ handler_resolver_callable: nil,
43
+ exception_notifier: nil,
44
+ before_receiving_hooks: [],
45
+ after_receiving_hooks: [],
46
+ skip_publishing_in: %i[test development],
47
+ use_backoff_handler: false,
48
+ backoff_handler_max_retries: 6,
49
+ connection_reset_max_retries: 10,
50
+ connection_reset_timeout: 0.2,
51
+ connection_reset_exceptions: [Bunny::ConnectionClosedError],
52
+ logger_message_size_limit: 9_500,
53
+ receive_logger: nil,
54
+ publish_logger: nil,
55
+ malformed_logger: nil
56
+ )
57
+ self.group_id = group_id
58
+ self.project_id = project_id
59
+ self.queue_suffix = queue_suffix
60
+ self.hooks = hooks
61
+ self.environment = environment
62
+ self.queue_name_conversion = queue_name_conversion
63
+ self.receiving_job_class_callable = receiving_job_class_callable
64
+ self.handler_resolver_callable = handler_resolver_callable
65
+ self.exception_notifier = exception_notifier
66
+ self.before_receiving_hooks = before_receiving_hooks
67
+ self.after_receiving_hooks = after_receiving_hooks
68
+ self.skip_publishing_in = skip_publishing_in
69
+ self.use_backoff_handler = use_backoff_handler
70
+ self.backoff_handler_max_retries = backoff_handler_max_retries
71
+ self.connection_reset_max_retries = connection_reset_max_retries
72
+ self.connection_reset_timeout = connection_reset_timeout
73
+ self.connection_reset_exceptions = connection_reset_exceptions
74
+ self.logger_message_size_limit = logger_message_size_limit
75
+
76
+ @receive_logger = receive_logger
77
+ @publish_logger = publish_logger
78
+ @malformed_logger = malformed_logger
79
+ end
49
80
 
50
81
  def validate!
51
82
  raise InvalidConfig, "missing project_id" unless project_id
@@ -68,6 +99,32 @@ module Rabbit
68
99
  def read_queue
69
100
  [app_name, queue_suffix].reject { |x| x.nil? || x.empty? }.join(".")
70
101
  end
102
+
103
+ def receive_logger
104
+ @receive_logger || default_receive_logger
105
+ end
106
+
107
+ def publish_logger
108
+ @publish_logger || default_publish_logger
109
+ end
110
+
111
+ def malformed_logger
112
+ @malformed_logger || default_malformed_logger
113
+ end
114
+
115
+ private
116
+
117
+ def default_receive_logger
118
+ Logger.new(Rabbit.root.join("log", "incoming_rabbit_messages.log"))
119
+ end
120
+
121
+ def default_publish_logger
122
+ Logger.new(Rabbit.root.join("log", "rabbit.log"))
123
+ end
124
+
125
+ def default_malformed_logger
126
+ Logger.new(Rabbit.root.join("log", "malformed_messages.log"))
127
+ end
71
128
  end
72
129
 
73
130
  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.1
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: []