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.
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.5
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-17 00:00:00.000000000 Z
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/config.rb
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
@@ -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