Skip to content

Commit cc31253

Browse files
authored
Removed tainbox from gem dependencies (#33)
1 parent 2493ee6 commit cc31253

File tree

13 files changed

+170
-100
lines changed

13 files changed

+170
-100
lines changed

.rubocop.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,6 @@ Style/HashConversion:
2929

3030
RSpec/ExampleLength:
3131
Max: 50
32+
33+
Metrics/ParameterLists:
34+
Max: 40

Gemfile.lock

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,9 @@ GIT
88
PATH
99
remote: .
1010
specs:
11-
rabbit_messaging (1.5.0)
11+
rabbit_messaging (1.6.0)
1212
bunny (~> 2.0)
1313
kicks
14-
tainbox
1514

1615
GEM
1716
remote: https://rubygems.org/
@@ -152,8 +151,6 @@ GEM
152151
sorted_set (1.0.3)
153152
rbtree
154153
set (~> 1.0)
155-
tainbox (2.1.2)
156-
activesupport
157154
thor (1.3.2)
158155
timeout (0.4.3)
159156
tzinfo (2.0.6)

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,6 @@ to teardown and setup external connections between daemon restarts, for example
208208
Rabbit.config.handler_resolver_callable = -> (group_id, event) { "recivers/#{group_id}/#{event}".camelize.constantize }
209209
```
210210
211-
They use powerful `Tainbox` api to handle message data. Project_id also passed to them.
212-
213211
If you wish so, you can override `initialize(message)`, where message is an object
214212
with simple api (@see lib/rabbit/receiving/message.rb)
215213

bin/console

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
#!/usr/bin/env ruby
22

3-
# Required for tainbox :(
4-
require "active_support/deprecation"
5-
require "active_support/deprecator"
3+
require "active_support/core_ext/module/delegation"
64

75
require "bundler/setup"
86
require "rabbit_messaging"

lib/rabbit.rb

Lines changed: 82 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
# frozen_string_literal: true
22

3-
require "tainbox"
4-
53
require "rabbit/version"
64
require "rabbit/daemon"
75
require "rabbit/publishing"
@@ -14,38 +12,74 @@ module Rabbit
1412
MessageNotDelivered = Class.new(StandardError)
1513

1614
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
4983

5084
def validate!
5185
raise InvalidConfig, "missing project_id" unless project_id
@@ -68,6 +102,20 @@ def app_name
68102
def read_queue
69103
[app_name, queue_suffix].reject { |x| x.nil? || x.empty? }.join(".")
70104
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
71119
end
72120

73121
extend self

lib/rabbit/event_handler.rb

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
# frozen_string_literal: true
22

3-
require "tainbox"
43
require "active_support/core_ext/class/attribute"
54

65
class Rabbit::EventHandler
7-
include Tainbox
6+
attr_accessor :project_id, :data, :message_info
87

9-
attribute :project_id
10-
attribute :data
11-
attribute :message_info
8+
class << self
9+
attr_accessor :queue, :ignore_queue_conversion, :additional_job_configs
1210

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
1616

17-
class << self
1817
private
1918

2019
def queue_as(queue = nil, &block)
@@ -31,9 +30,17 @@ def job_configs(**config_opts)
3130
end
3231

3332
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
3737
self.message_info = message.arguments
3838
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
3946
end

lib/rabbit/publishing/message.rb

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,31 @@
11
# frozen_string_literal: true
22

3-
require "tainbox"
4-
53
module Rabbit::Publishing
64
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
178

189
alias_method :confirm_select?, :confirm_select
1910
alias_method :realtime?, :realtime
2011

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+
2123
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))
2629
end
2730

2831
def to_s
@@ -49,15 +52,11 @@ def basic_publish_args
4952
end
5053

5154
def exchange_name=(names)
52-
super(Array(names).map(&:to_s))
55+
@exchange_name = Array(names).map(&:to_s)
5356
end
5457

5558
def real_exchange_name
5659
[Rabbit.config.group_id, Rabbit.config.project_id, *exchange_name].join(".")
5760
end
58-
59-
def headers
60-
super || {}
61-
end
6261
end
6362
end

lib/rabbit/receiving/message.rb

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,12 @@
11
# frozen_string_literal: true
22

3-
require "tainbox"
4-
53
require "rabbit/receiving/malformed_message"
64

75
module Rabbit::Receiving
86
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
1810

1911
def self.build(message, arguments)
2012
group_id, project_id = arguments.fetch(:app_id).split(".")
@@ -29,15 +21,46 @@ def self.build(message, arguments)
2921
)
3022
end
3123

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+
3242
def data=(value)
3343
self.original_message = value
34-
super(JSON.parse(value).deep_symbolize_keys)
44+
parsed = JSON.parse(value).deep_symbolize_keys
45+
@data = parsed
3546
rescue JSON::ParserError => error
3647
mark_as_malformed!("JSON::ParserError: #{error.message}")
3748
end
3849

3950
def mark_as_malformed!(errors = "Error not specified")
4051
MalformedMessage.raise!(self, errors, caller(1))
4152
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
4265
end
4366
end

lib/rabbit/receiving/receive.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
# frozen_string_literal: true
22

3-
require "tainbox"
4-
53
require "rabbit"
64
require "rabbit/receiving/queue"
75
require "rabbit/receiving/job"
86
require "rabbit/helper"
97

108
class Rabbit::Receiving::Receive
11-
include Tainbox
9+
attr_accessor :message, :delivery_info, :arguments
1210

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
1616

1717
def call
1818
log!

0 commit comments

Comments
 (0)