bug_bunny 4.0.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b06b89852caa37c57d4db098d7f2f51f6d6f7361898ce5fc3484ad81e31068fd
4
- data.tar.gz: cc53173b422e52e54e3a3a8af54676f6a954279ab81847335be3b37a5251b882
3
+ metadata.gz: ef1416747a080c5d6af30ac97412688c0419e8b3635b410d93580ad869d78924
4
+ data.tar.gz: e362258f131a6fefdad0b835a410218e349d8d56966bfef67586dd573375ffcb
5
5
  SHA512:
6
- metadata.gz: 6643abb20472bea870426d694d3481c6ced6bd1bf2d0a26e6cbc0526f60050b016de265785611cd4e7046304cc88058104845172d676475be1dc7c6b6ad79d10
7
- data.tar.gz: 3f60029f149d765752616323fcf53ce9406ca80e3cffeeaf008bf8a54daac0f06366495081629b1f22127e6bc171080a5946f89341d5cebb5929596d70275bc1
6
+ metadata.gz: e788b41069a507289245398fc56ab5829df1139665319a254b6136aa26eb44a607b0f7d0843b517f4ed3298095629bed97e64d9aaace5cc81313f4995392d12d
7
+ data.tar.gz: cfff2337042002bf850200a8b63739502e2c4607d2c26d661756f980cf7c8c8986a96545811c03aba7b8fc3c23fe929e62240f63dada14c55ddb02cd38feda30
data/CHANGELOG.md CHANGED
@@ -1,4 +1,17 @@
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
+
10
+ ## [4.0.1] - 2026-03-13
11
+
12
+ ### 🐛 Bug Fixes
13
+ * **Rails Autoload (Zeitwerk):** Corrige el registro de `app/rabbit` para autoload/eager load usando `app.config.paths.add` en lugar de mutar `autoload_paths`/`eager_load_paths`.
14
+
2
15
  ## [4.0.0] - 2026-03-02
3
16
 
4
17
  ### ⚠ Breaking Changes
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
  ```
@@ -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
- run_in_pool(:rpc, url, args) do |req|
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
- run_in_pool(:fire, url, args) do |req|
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(method_name, url, args)
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
 
@@ -15,8 +15,7 @@ module BugBunny
15
15
  initializer 'bug_bunny.add_autoload_paths' do |app|
16
16
  rabbit_path = File.join(app.root, 'app', 'rabbit')
17
17
  if Dir.exist?(rabbit_path)
18
- app.config.autoload_paths << rabbit_path
19
- app.config.eager_load_paths << rabbit_path
18
+ app.config.paths.add 'app/rabbit', eager_load: true
20
19
  end
21
20
  end
22
21
 
@@ -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".
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BugBunny
4
- VERSION = "4.0.0"
4
+ VERSION = "4.1.0"
5
5
  end
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.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-02 00:00:00.000000000 Z
11
+ date: 2026-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bunny