bug_bunny 3.0.5 → 3.1.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 +4 -4
- data/CHANGELOG.md +26 -0
- data/README.md +228 -4
- data/Rakefile +10 -6
- data/bin_worker.rb +16 -10
- data/lib/bug_bunny/{config.rb → configuration.rb} +37 -28
- data/lib/bug_bunny/consumer.rb +53 -25
- data/lib/bug_bunny/controller.rb +135 -91
- data/lib/bug_bunny/exception.rb +4 -0
- data/lib/bug_bunny/producer.rb +10 -3
- data/lib/bug_bunny/railtie.rb +14 -19
- data/lib/bug_bunny/resource.rb +69 -150
- data/lib/bug_bunny/session.rb +65 -44
- data/lib/bug_bunny/version.rb +1 -1
- data/lib/bug_bunny.rb +76 -85
- data/test/integration/fire_and_forget_test.rb +76 -0
- data/test/integration/rpc_flow_test.rb +78 -0
- data/test/test_helper.rb +24 -0
- data/test/unit/configuration_test.rb +40 -0
- data/test/unit/consumer_test.rb +44 -0
- data/test/unit/controller_headers_test.rb +38 -0
- data/test/unit/hybrid_resource_test.rb +60 -0
- data/test/unit/middleware_test.rb +61 -0
- data/test/unit/resource_test.rb +49 -0
- metadata +40 -4
- data/lib/bug_bunny/rabbit.rb +0 -82
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: bug_bunny
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0
|
|
4
|
+
version: 3.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- gabix
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-02-
|
|
11
|
+
date: 2026-02-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bunny
|
|
@@ -178,6 +178,34 @@ dependencies:
|
|
|
178
178
|
- - "~>"
|
|
179
179
|
- !ruby/object:Gem::Version
|
|
180
180
|
version: '0.9'
|
|
181
|
+
- !ruby/object:Gem::Dependency
|
|
182
|
+
name: minitest
|
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
|
184
|
+
requirements:
|
|
185
|
+
- - "~>"
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: '5.0'
|
|
188
|
+
type: :development
|
|
189
|
+
prerelease: false
|
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
+
requirements:
|
|
192
|
+
- - "~>"
|
|
193
|
+
- !ruby/object:Gem::Version
|
|
194
|
+
version: '5.0'
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
name: mocha
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - "~>"
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: '2.0'
|
|
202
|
+
type: :development
|
|
203
|
+
prerelease: false
|
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - "~>"
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '2.0'
|
|
181
209
|
description: BugBunny is a lightweight RPC framework for Ruby on Rails over RabbitMQ.
|
|
182
210
|
It simulates a RESTful architecture with an intelligent router, Active Record-like
|
|
183
211
|
resources, and middleware support.
|
|
@@ -196,7 +224,7 @@ files:
|
|
|
196
224
|
- initializer_example.rb
|
|
197
225
|
- lib/bug_bunny.rb
|
|
198
226
|
- lib/bug_bunny/client.rb
|
|
199
|
-
- lib/bug_bunny/
|
|
227
|
+
- lib/bug_bunny/configuration.rb
|
|
200
228
|
- lib/bug_bunny/consumer.rb
|
|
201
229
|
- lib/bug_bunny/controller.rb
|
|
202
230
|
- lib/bug_bunny/exception.rb
|
|
@@ -205,7 +233,6 @@ files:
|
|
|
205
233
|
- lib/bug_bunny/middleware/raise_error.rb
|
|
206
234
|
- lib/bug_bunny/middleware/stack.rb
|
|
207
235
|
- lib/bug_bunny/producer.rb
|
|
208
|
-
- lib/bug_bunny/rabbit.rb
|
|
209
236
|
- lib/bug_bunny/railtie.rb
|
|
210
237
|
- lib/bug_bunny/request.rb
|
|
211
238
|
- lib/bug_bunny/resource.rb
|
|
@@ -214,6 +241,15 @@ files:
|
|
|
214
241
|
- lib/generators/bug_bunny/install/install_generator.rb
|
|
215
242
|
- lib/generators/bug_bunny/install/templates/initializer.rb
|
|
216
243
|
- sig/bug_bunny.rbs
|
|
244
|
+
- test/integration/fire_and_forget_test.rb
|
|
245
|
+
- test/integration/rpc_flow_test.rb
|
|
246
|
+
- test/test_helper.rb
|
|
247
|
+
- test/unit/configuration_test.rb
|
|
248
|
+
- test/unit/consumer_test.rb
|
|
249
|
+
- test/unit/controller_headers_test.rb
|
|
250
|
+
- test/unit/hybrid_resource_test.rb
|
|
251
|
+
- test/unit/middleware_test.rb
|
|
252
|
+
- test/unit/resource_test.rb
|
|
217
253
|
- test_controller.rb
|
|
218
254
|
- test_helper.rb
|
|
219
255
|
- test_resource.rb
|
data/lib/bug_bunny/rabbit.rb
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
# lib/bug_bunny/rabbit.rb
|
|
2
|
-
|
|
3
|
-
module BugBunny
|
|
4
|
-
# Clase de soporte e infraestructura para gestionar la conexión global de la aplicación.
|
|
5
|
-
#
|
|
6
|
-
# Actúa como un Singleton que mantiene una instancia de `Bunny::Session`.
|
|
7
|
-
# Es utilizada principalmente por tareas administrativas (Rake tasks), inicializadores
|
|
8
|
-
# y para lanzar consumidores (Workers).
|
|
9
|
-
#
|
|
10
|
-
# @note ¡IMPORTANTE!
|
|
11
|
-
# No utilizar esta clase para publicar mensajes desde controladores o servicios web.
|
|
12
|
-
# Esta clase mantiene una sola conexión TCP. Para publicar en entornos concurrentes (Puma/Sidekiq),
|
|
13
|
-
# se debe utilizar siempre {BugBunny::Client} inyectándole un `ConnectionPool`.
|
|
14
|
-
class Rabbit
|
|
15
|
-
class << self
|
|
16
|
-
# Permite inyectar una conexión manualmente (útil para tests).
|
|
17
|
-
# @api private
|
|
18
|
-
attr_writer :connection
|
|
19
|
-
|
|
20
|
-
# Obtiene la conexión global actual (Singleton).
|
|
21
|
-
#
|
|
22
|
-
# Implementa "Lazy Initialization": si la conexión no existe o está cerrada,
|
|
23
|
-
# crea una nueva automáticamente.
|
|
24
|
-
#
|
|
25
|
-
# @return [Bunny::Session] La sesión cruda de Bunny.
|
|
26
|
-
def connection
|
|
27
|
-
return @connection if @connection&.open?
|
|
28
|
-
|
|
29
|
-
@connection = create_connection
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Crea una nueva conexión utilizando la configuración global de la gema.
|
|
33
|
-
# Delega la creación al factory principal.
|
|
34
|
-
#
|
|
35
|
-
# @see BugBunny.create_connection
|
|
36
|
-
# @return [Bunny::Session] Una nueva sesión iniciada.
|
|
37
|
-
def create_connection
|
|
38
|
-
BugBunny.create_connection
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Cierra la conexión global de forma segura.
|
|
42
|
-
#
|
|
43
|
-
# Es un método idempotente: verifica si la conexión existe y está abierta antes de intentar cerrarla.
|
|
44
|
-
# Utilizado comúnmente en los hooks de `at_exit`, o por Railties al recargar código en Spring/Puma.
|
|
45
|
-
#
|
|
46
|
-
# @return [void]
|
|
47
|
-
def disconnect
|
|
48
|
-
return unless @connection
|
|
49
|
-
|
|
50
|
-
@connection.close if @connection.open?
|
|
51
|
-
@connection = nil
|
|
52
|
-
BugBunny.configuration.logger.info("[BugBunny] Global connection closed.")
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Helper de conveniencia para instanciar y ejecutar un Consumidor (Worker).
|
|
56
|
-
#
|
|
57
|
-
# Simplifica el arranque de workers desde tareas Rake, encapsulando la creación
|
|
58
|
-
# de la instancia {BugBunny::Consumer} y la suscripción.
|
|
59
|
-
#
|
|
60
|
-
# @param connection [Bunny::Session] Conexión dedicada para el consumidor (no usar la compartida si es posible).
|
|
61
|
-
# @param exchange [String] Nombre del exchange.
|
|
62
|
-
# @param exchange_type [String] Tipo de exchange ('topic', 'direct', etc).
|
|
63
|
-
# @param queue_name [String] Nombre de la cola.
|
|
64
|
-
# @param routing_key [String] Routing key para el binding.
|
|
65
|
-
# @param queue_opts [Hash] Opciones adicionales para la cola (:durable, etc).
|
|
66
|
-
# @return [void] Este método suele bloquear la ejecución (loop infinito del consumidor).
|
|
67
|
-
def run_consumer(connection:, exchange:, exchange_type:, queue_name:, routing_key:, queue_opts: {})
|
|
68
|
-
# 1. Instanciamos el Consumidor (que crea su propia Session interna)
|
|
69
|
-
consumer = BugBunny::Consumer.new(connection)
|
|
70
|
-
|
|
71
|
-
# 2. Iniciamos la suscripción (Bloqueante por defecto)
|
|
72
|
-
consumer.subscribe(
|
|
73
|
-
queue_name: queue_name,
|
|
74
|
-
exchange_name: exchange,
|
|
75
|
-
exchange_type: exchange_type,
|
|
76
|
-
routing_key: routing_key,
|
|
77
|
-
queue_opts: queue_opts
|
|
78
|
-
)
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|