bug_bunny 4.0.1 → 4.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 +8 -0
- data/README.md +20 -0
- data/lib/bug_bunny/client.rb +27 -4
- data/lib/bug_bunny/request.rb +3 -1
- data/lib/bug_bunny/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ef1416747a080c5d6af30ac97412688c0419e8b3635b410d93580ad869d78924
|
|
4
|
+
data.tar.gz: e362258f131a6fefdad0b835a410218e349d8d56966bfef67586dd573375ffcb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e788b41069a507289245398fc56ab5829df1139665319a254b6136aa26eb44a607b0f7d0843b517f4ed3298095629bed97e64d9aaace5cc81313f4995392d12d
|
|
7
|
+
data.tar.gz: cfff2337042002bf850200a8b63739502e2c4607d2c26d661756f980cf7c8c8986a96545811c03aba7b8fc3c23fe929e62240f63dada14c55ddb02cd38feda30
|
data/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
|
+
|
|
3
|
+
## [4.1.0] - 2026-03-22
|
|
4
|
+
|
|
5
|
+
### 🚀 New Features & Improvements
|
|
6
|
+
* **Faraday-style Client API:** Se introdujo el método \`Client#send\` como punto de entrada genérico, permitiendo una sintaxis más familiar y flexible.
|
|
7
|
+
* **Flexible Delivery Modes:** Introducción del atributo \`delivery_mode\` (:rpc o :publish). Ahora es posible configurar la estrategia de envÃo a nivel de cliente o por cada petición individual.
|
|
8
|
+
* **Smart Request Defaults:** Los métodos \`request\` y \`publish\` ahora delegan internamente en \`send\`, manteniendo la compatibilidad pero beneficiándose de la nueva arquitectura de peticiones.
|
|
9
|
+
|
|
2
10
|
## [4.0.1] - 2026-03-13
|
|
3
11
|
|
|
4
12
|
### 🐛 Bug Fixes
|
data/README.md
CHANGED
|
@@ -203,6 +203,26 @@ client = BugBunny::Client.new(pool: BUG_BUNNY_POOL) do |stack|
|
|
|
203
203
|
stack.use BugBunny::Middleware::JsonResponse
|
|
204
204
|
end
|
|
205
205
|
|
|
206
|
+
# 1. Método genérico 'send' (Estilo Faraday)
|
|
207
|
+
# El comportamiento (RPC o Fire-and-forget) depende de 'delivery_mode'
|
|
208
|
+
client.delivery_mode = :rpc # Default
|
|
209
|
+
client.send('users/1', method: :get)
|
|
210
|
+
|
|
211
|
+
# 2. Configuración flexible del modo de entrega
|
|
212
|
+
# Por cada petición
|
|
213
|
+
client.send('logs', method: :post, body: { msg: 'system_up' }, delivery_mode: :publish)
|
|
214
|
+
|
|
215
|
+
# O mediante un bloque para configuración avanzada
|
|
216
|
+
client.send('users/1') do |req|
|
|
217
|
+
req.method = :get
|
|
218
|
+
req.delivery_mode = :rpc
|
|
219
|
+
req.timeout = 5
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# 3. Métodos de conveniencia (Atajos)
|
|
223
|
+
client.request('users/1') # Siempre :rpc
|
|
224
|
+
client.publish('events', body: { type: 'click' }) # Siempre :publish
|
|
225
|
+
|
|
206
226
|
# Ahora el cliente devolverá Hashes y lanzará errores si el worker falla
|
|
207
227
|
response = client.request('users/1', method: :get)
|
|
208
228
|
```
|
data/lib/bug_bunny/client.rb
CHANGED
|
@@ -21,6 +21,9 @@ module BugBunny
|
|
|
21
21
|
# @return [BugBunny::Middleware::Stack] La pila de middlewares configurada.
|
|
22
22
|
attr_reader :stack
|
|
23
23
|
|
|
24
|
+
# @return [Symbol] El modo de entrega por defecto para este cliente (:rpc o :publish).
|
|
25
|
+
attr_accessor :delivery_mode
|
|
26
|
+
|
|
24
27
|
# Inicializa un nuevo cliente.
|
|
25
28
|
#
|
|
26
29
|
# @param pool [ConnectionPool] Pool de conexiones a RabbitMQ configurado previamente.
|
|
@@ -30,9 +33,22 @@ module BugBunny
|
|
|
30
33
|
raise ArgumentError, "BugBunny::Client requiere un 'pool:'" if pool.nil?
|
|
31
34
|
@pool = pool
|
|
32
35
|
@stack = BugBunny::Middleware::Stack.new
|
|
36
|
+
@delivery_mode = :rpc
|
|
33
37
|
yield(@stack) if block_given?
|
|
34
38
|
end
|
|
35
39
|
|
|
40
|
+
# Realiza una petición general al estilo Faraday.
|
|
41
|
+
# El comportamiento (RPC o Fire-and-forget) depende de {#delivery_mode}.
|
|
42
|
+
#
|
|
43
|
+
# @param url [String] La ruta del recurso.
|
|
44
|
+
# @param args [Hash] Opciones de configuración.
|
|
45
|
+
# @yield [req] Bloque para configurar el objeto Request directamente.
|
|
46
|
+
def send(url, **args)
|
|
47
|
+
run_in_pool(url, args) do |req|
|
|
48
|
+
yield req if block_given?
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
36
52
|
# Realiza una petición Síncrona (RPC / Request-Response).
|
|
37
53
|
#
|
|
38
54
|
# Envía un mensaje y bloquea la ejecución del hilo actual hasta recibir respuesta.
|
|
@@ -48,7 +64,8 @@ module BugBunny
|
|
|
48
64
|
# @yield [req] Bloque para configurar el objeto Request directamente.
|
|
49
65
|
# @return [Hash] La respuesta del servidor.
|
|
50
66
|
def request(url, **args)
|
|
51
|
-
|
|
67
|
+
send(url, **args) do |req|
|
|
68
|
+
req.delivery_mode = :rpc
|
|
52
69
|
yield req if block_given?
|
|
53
70
|
end
|
|
54
71
|
end
|
|
@@ -60,7 +77,8 @@ module BugBunny
|
|
|
60
77
|
# @yield [req] Bloque para configurar el objeto Request.
|
|
61
78
|
# @return [void]
|
|
62
79
|
def publish(url, **args)
|
|
63
|
-
|
|
80
|
+
send(url, **args) do |req|
|
|
81
|
+
req.delivery_mode = :publish
|
|
64
82
|
yield req if block_given?
|
|
65
83
|
end
|
|
66
84
|
end
|
|
@@ -70,15 +88,16 @@ module BugBunny
|
|
|
70
88
|
# Ejecuta la lógica de envío dentro del contexto del Pool.
|
|
71
89
|
# Mapea los argumentos al objeto Request y ejecuta la cadena de middlewares.
|
|
72
90
|
#
|
|
73
|
-
# @param method_name [Symbol] El método del productor a llamar (:rpc o :fire).
|
|
74
91
|
# @param url [String] La ruta destino.
|
|
75
92
|
# @param args [Hash] Argumentos pasados a los métodos públicos.
|
|
76
93
|
# @yield [req] Bloque para configuración adicional del Request.
|
|
77
|
-
def run_in_pool(
|
|
94
|
+
def run_in_pool(url, args)
|
|
78
95
|
# 1. Builder del Request
|
|
79
96
|
req = BugBunny::Request.new(url)
|
|
80
97
|
|
|
81
98
|
# 2. Syntactic Sugar: Mapeo de argumentos a atributos del Request
|
|
99
|
+
req.delivery_mode = delivery_mode # Default del cliente
|
|
100
|
+
req.delivery_mode = args[:delivery_mode] if args[:delivery_mode]
|
|
82
101
|
req.method = args[:method] if args[:method]
|
|
83
102
|
req.body = args[:body] if args[:body]
|
|
84
103
|
req.exchange = args[:exchange] if args[:exchange]
|
|
@@ -101,6 +120,10 @@ module BugBunny
|
|
|
101
120
|
producer = BugBunny::Producer.new(session)
|
|
102
121
|
|
|
103
122
|
begin
|
|
123
|
+
# Mapeo de delivery_mode al método del productor (:rpc o :fire)
|
|
124
|
+
# :publish se mapea a :fire por consistencia interna.
|
|
125
|
+
method_name = req.delivery_mode == :publish ? :fire : :rpc
|
|
126
|
+
|
|
104
127
|
# Onion Architecture: La acción final es llamar al Producer real.
|
|
105
128
|
final_action = ->(env) { producer.send(method_name, env) }
|
|
106
129
|
|
data/lib/bug_bunny/request.rb
CHANGED
|
@@ -16,6 +16,7 @@ module BugBunny
|
|
|
16
16
|
# @attr routing_key [String] La routing key específica. Si es nil, se usará {#path}.
|
|
17
17
|
# @attr timeout [Integer] Tiempo máximo en segundos para timeout RPC.
|
|
18
18
|
#
|
|
19
|
+
# @attr delivery_mode [Symbol] El modo de entrega (:rpc o :publish).
|
|
19
20
|
# @attr exchange_options [Hash] Opciones específicas para la declaración del Exchange en esta petición.
|
|
20
21
|
# @attr queue_options [Hash] Opciones específicas para la declaración de la Cola en esta petición.
|
|
21
22
|
class Request
|
|
@@ -27,6 +28,7 @@ module BugBunny
|
|
|
27
28
|
attr_accessor :exchange_type
|
|
28
29
|
attr_accessor :routing_key
|
|
29
30
|
attr_accessor :timeout
|
|
31
|
+
attr_accessor :delivery_mode
|
|
30
32
|
|
|
31
33
|
# Configuración de Infraestructura Específica
|
|
32
34
|
attr_accessor :exchange_options
|
|
@@ -48,12 +50,12 @@ module BugBunny
|
|
|
48
50
|
@timestamp = Time.now.to_i
|
|
49
51
|
@persistent = false
|
|
50
52
|
@exchange_type = 'direct'
|
|
53
|
+
@delivery_mode = :rpc
|
|
51
54
|
|
|
52
55
|
# Inicialización de opciones de infraestructura para evitar errores de nil durante el merge.
|
|
53
56
|
@exchange_options = {}
|
|
54
57
|
@queue_options = {}
|
|
55
58
|
end
|
|
56
|
-
|
|
57
59
|
# Calcula la Routing Key final que se usará en RabbitMQ.
|
|
58
60
|
#
|
|
59
61
|
# Principio: "Convention over Configuration".
|
data/lib/bug_bunny/version.rb
CHANGED
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: 4.0
|
|
4
|
+
version: 4.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-03-
|
|
11
|
+
date: 2026-03-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bunny
|