solid_callback 2.0.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec2603bc833fcd5fe3d1920836c91d4ea76f20556939465c84e88e800d9130ff
4
- data.tar.gz: 9d2c2af601e98fa48092ddf0df1e9b1a160049fa259e83e3a51f2cb4a044c6b4
3
+ metadata.gz: 8d4868400ada59602777596c75942cdb942d5be9e44ad383d766706ce1bc14b0
4
+ data.tar.gz: 8131d95e2f3c04527216b38c4a030bfcb9e623e6b1912e344fa7fa592237aee0
5
5
  SHA512:
6
- metadata.gz: 9de0006260b24e041fa74d0cbff672bfc2444ca9ae45f67ae9defbb4370e77c1e42719f989e1640bd292561549a62905ee874630e11f5a481b5662601af26356
7
- data.tar.gz: c2c62fa4b2e2d8f3c69d558150f78ca421b39582d369781b7bf408924e7128459f0aa2faa975dad453ef66192234a5e4e915b9839f54bd885bfc62bffa321021
6
+ metadata.gz: 11fd8d6357fe2b71c683443f03bb0db6eb45a7467cf048ea5a0a30b06aee63f4a75329cbc39220524828cf596b871c1bdcba781b264bc646f7fa64899cb8818c
7
+ data.tar.gz: 7373f5b5c012a02d8cd6c4dbde06bf25e5bac6ad35591f4e3043245a03dd4b0043f5c201ced775864838d56426b6cd76af56b483996f8320677ba3b2da9b96cd
data/Gemfile.lock CHANGED
@@ -25,13 +25,14 @@ GEM
25
25
 
26
26
  PLATFORMS
27
27
  x86_64-darwin-23
28
+ x86_64-darwin-25
28
29
 
29
30
  DEPENDENCIES
30
- bundler (~> 2.0)
31
+ bundler (>= 2.0)
31
32
  rake (~> 13.0)
32
33
  rspec (~> 3.0)
33
34
  solid_callback!
34
- yard
35
+ yard (~> 0.9, >= 0)
35
36
 
36
37
  BUNDLED WITH
37
- 2.2.33
38
+ 4.0.7
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/solid_callback.svg?icon=si%3Arubygems)](https://badge.fury.io/rb/solid_callback)
4
4
  [![Test](https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml/badge.svg)](https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml)
5
- [![Downloads](https://img.shields.io/gem/dt/simple_http_service.svg)](https://badge.fury.io/rb/simple_http_service)
5
+ [![Downloads](https://img.shields.io/gem/dt/solid_callback.svg)](https://badge.fury.io/rb/solid_callback)
6
6
  [![Github forks](https://img.shields.io/github/forks/gklsan/solid_callback.svg)](https://github.com/gklsan/solid_callback/network)
7
7
  [![Github stars](https://img.shields.io/github/stars/gklsan/solid_callback.svg)](https://github.com/gklsan/solid_callback/stargazers)
8
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
@@ -18,6 +18,10 @@ SolidCallback adds powerful method interception capabilities to your Ruby classe
18
18
  - 🔒 **Thread-safe**: Safely use in concurrent applications
19
19
  - 📝 **Conditional execution**: Run callbacks only when specific conditions are met
20
20
 
21
+ ## Requirements
22
+
23
+ - Ruby >= 3.3.0
24
+
21
25
  ## Installation
22
26
 
23
27
  Add this line to your application's Gemfile:
@@ -138,15 +142,13 @@ before_call :notify_admin, if: -> { Rails.env.production? }
138
142
 
139
143
  ### Skipping Callbacks
140
144
 
141
- Skip callbacks for specific methods:
145
+ Use `except:` to exclude specific methods from a callback:
142
146
 
143
147
  ```ruby
144
148
  class ApiService
145
149
  include SolidCallback
146
150
 
147
- before_call :rate_limit
148
-
149
- skip_callbacks_for :health_check
151
+ before_call :rate_limit, except: [:health_check]
150
152
 
151
153
  def get_data
152
154
  # Implementation...
@@ -159,6 +161,10 @@ class ApiService
159
161
  end
160
162
  ```
161
163
 
164
+ > **Note:** `skip_callbacks_for` is also available on the class, but it currently only
165
+ > records the given method names — it does not yet suppress callback execution. Prefer
166
+ > `except:` (as above) until that's wired up.
167
+
162
168
  ## Callback Options
163
169
 
164
170
  Each callback method accepts the following options:
@@ -172,12 +178,24 @@ Each callback method accepts the following options:
172
178
 
173
179
  ## How It Works
174
180
 
175
- Callbacker uses Ruby's metaprogramming to wrap your methods with callback functionality:
176
-
177
- 1. When included, it extends your class with callback registration methods
178
- 2. When a callback is registered, it stores the configuration
179
- 3. When a method is defined, it wraps the method with callback handling code
180
- 4. When the method is called, it executes the callbacks in the proper order
181
+ SolidCallback uses Ruby's metaprogramming to wrap your methods with callback functionality:
182
+
183
+ 1. `include SolidCallback` extends your class with the callback registration API and
184
+ hooks into `method_added` so newly defined methods can be wrapped automatically.
185
+ 2. `before_call`, `after_call`, and `around_call` just store the callback configuration
186
+ (method name, `only`/`except`/`if`/`unless`) on the class they don't need to run
187
+ before the target method is defined.
188
+ 3. Each time a **public** instance method is defined, it's aliased to
189
+ `_solid_callback_original_<method>` and replaced with a wrapper that runs the
190
+ applicable `before` callbacks, then the `around` chain (which ultimately calls the
191
+ original method), then the applicable `after` callbacks. Private/protected methods
192
+ are left untouched.
193
+ 4. Applicability (`only`, `except`, `if`, `unless`) is evaluated per call, against the
194
+ actual instance, so the same callback can behave differently per invocation.
195
+ 5. `around_call` callbacks are nested in registration order (the first one registered is
196
+ outermost) and must `yield` to continue the chain, much like Rack middleware.
197
+ 6. If a method needs wrapping outside the normal `method_added` flow, call
198
+ `wrap_methods(:method_name, ...)` explicitly.
181
199
 
182
200
  ## 📚 Use Cases
183
201
 
@@ -645,9 +645,9 @@
645
645
  </div>
646
646
 
647
647
  <div id="footer">
648
- Generated on Wed Mar 12 18:55:58 2025 by
648
+ Generated on Tue Mar 3 12:41:11 2026 by
649
649
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
650
- 0.9.37 (ruby-3.3.0).
650
+ 0.9.37 (ruby-4.0.1).
651
651
  </div>
652
652
 
653
653
  </div>
@@ -114,9 +114,9 @@
114
114
  </div>
115
115
 
116
116
  <div id="footer">
117
- Generated on Wed Mar 12 18:55:58 2025 by
117
+ Generated on Tue Mar 3 12:41:11 2026 by
118
118
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
119
- 0.9.37 (ruby-3.3.0).
119
+ 0.9.37 (ruby-4.0.1).
120
120
  </div>
121
121
 
122
122
  </div>
@@ -443,9 +443,9 @@
443
443
  </div>
444
444
 
445
445
  <div id="footer">
446
- Generated on Wed Mar 12 18:55:58 2025 by
446
+ Generated on Tue Mar 3 12:41:11 2026 by
447
447
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
448
- 0.9.37 (ruby-3.3.0).
448
+ 0.9.37 (ruby-4.0.1).
449
449
  </div>
450
450
 
451
451
  </div>
@@ -95,9 +95,9 @@
95
95
  </div>
96
96
 
97
97
  <div id="footer">
98
- Generated on Wed Mar 12 18:55:58 2025 by
98
+ Generated on Tue Mar 3 12:41:11 2026 by
99
99
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
100
- 0.9.37 (ruby-3.3.0).
100
+ 0.9.37 (ruby-4.0.1).
101
101
  </div>
102
102
 
103
103
  </div>
@@ -109,7 +109,7 @@
109
109
  <dt id="VERSION-constant" class="">VERSION =
110
110
 
111
111
  </dt>
112
- <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>1.0.1</span><span class='tstring_end'>&quot;</span></span></pre></dd>
112
+ <dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>2.0.2</span><span class='tstring_end'>&quot;</span></span></pre></dd>
113
113
 
114
114
  </dl>
115
115
 
@@ -243,9 +243,9 @@
243
243
  </div>
244
244
 
245
245
  <div id="footer">
246
- Generated on Wed Mar 12 18:55:58 2025 by
246
+ Generated on Tue Mar 3 12:41:11 2026 by
247
247
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
248
- 0.9.37 (ruby-3.3.0).
248
+ 0.9.37 (ruby-4.0.1).
249
249
  </div>
250
250
 
251
251
  </div>
data/doc/_index.html CHANGED
@@ -157,9 +157,9 @@
157
157
  </div>
158
158
 
159
159
  <div id="footer">
160
- Generated on Wed Mar 12 18:55:58 2025 by
160
+ Generated on Tue Mar 3 12:41:11 2026 by
161
161
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
162
- 0.9.37 (ruby-3.3.0).
162
+ 0.9.37 (ruby-4.0.1).
163
163
  </div>
164
164
 
165
165
  </div>
data/doc/file.README.html CHANGED
@@ -58,13 +58,13 @@
58
58
  </div>
59
59
 
60
60
  <div id="content"><div id='filecontents'>
61
- <h1 id="label-SolidCallback">SolidCallback</h1>
61
+ <h1 id="solidcallback">SolidCallback</h1>
62
62
 
63
- <p><a href="https://badge.fury.io/rb/solid_callback"><img src="https://badge.fury.io/rb/solid_callback.svg"></a> <a href="https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml"><img src="https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml/badge.svg"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg"></a></p>
63
+ <p><a href="https://badge.fury.io/rb/solid_callback"><img src="https://badge.fury.io/rb/solid_callback.svg?icon=si%3Arubygems" alt="Gem Version"></a> <a href="https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml"><img src="https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml/badge.svg" alt="Test"></a> <a href="https://badge.fury.io/rb/simple_http_service"><img src="https://img.shields.io/gem/dt/simple_http_service.svg" alt="Downloads"></a> <a href="https://github.com/gklsan/solid_callback/network"><img src="https://img.shields.io/github/forks/gklsan/solid_callback.svg" alt="Github forks"></a> <a href="https://github.com/gklsan/solid_callback/stargazers"><img src="https://img.shields.io/github/stars/gklsan/solid_callback.svg" alt="Github stars"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a></p>
64
64
 
65
65
  <p>SolidCallback adds powerful method interception capabilities to your Ruby classes with near-zero overhead. Clean, flexible, and unobtrusive.</p>
66
66
 
67
- <h2 id="label-Features">Features</h2>
67
+ <h2 id="features">Features</h2>
68
68
  <ul><li>
69
69
  <p>🔄 <strong>Method Lifecycle Hooks</strong>: <code>before_call</code>, <code>after_call</code>, and <code>around_call</code> - intercept methods without modifying their code</p>
70
70
  </li><li>
@@ -79,7 +79,7 @@
79
79
  <p>📝 <strong>Conditional execution</strong>: Run callbacks only when specific conditions are met</p>
80
80
  </li></ul>
81
81
 
82
- <h2 id="label-Installation">Installation</h2>
82
+ <h2 id="installation">Installation</h2>
83
83
 
84
84
  <p>Add this line to your application’s Gemfile:</p>
85
85
 
@@ -96,9 +96,9 @@
96
96
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='id identifier rubyid_install'>install</span> <span class='id identifier rubyid_solid_callback'>solid_callback</span>
97
97
  </code></pre>
98
98
 
99
- <h2 id="label-Usage">Usage</h2>
99
+ <h2 id="usage">Usage</h2>
100
100
 
101
- <h3 id="label-Basic+Example">Basic Example</h3>
101
+ <h3 id="basic-example">Basic Example</h3>
102
102
 
103
103
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>solid_callback</span><span class='tstring_end'>&#39;</span></span>
104
104
 
@@ -142,7 +142,7 @@
142
142
  <span class='id identifier rubyid_service'>service</span><span class='period'>.</span><span class='id identifier rubyid_find_user'>find_user</span><span class='lparen'>(</span><span class='int'>42</span><span class='rparen'>)</span>
143
143
  </code></pre>
144
144
 
145
- <h3 id="label-Advanced+Usage">Advanced Usage</h3>
145
+ <h3 id="advanced-usage">Advanced Usage</h3>
146
146
 
147
147
  <p>Apply callbacks to specific methods:</p>
148
148
 
@@ -190,7 +190,7 @@
190
190
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_before_call'>before_call</span> <span class='symbol'>:notify_admin</span><span class='comma'>,</span> <span class='label'>if:</span> <span class='tlambda'>-&gt;</span> <span class='tlambeg'>{</span> <span class='const'>Rails</span><span class='period'>.</span><span class='id identifier rubyid_env'>env</span><span class='period'>.</span><span class='id identifier rubyid_production?'>production?</span> <span class='rbrace'>}</span>
191
191
  </code></pre>
192
192
 
193
- <h3 id="label-Skipping+Callbacks">Skipping Callbacks</h3>
193
+ <h3 id="skipping-callbacks">Skipping Callbacks</h3>
194
194
 
195
195
  <p>Skip callbacks for specific methods:</p>
196
196
 
@@ -212,7 +212,7 @@
212
212
  <span class='kw'>end</span>
213
213
  </code></pre>
214
214
 
215
- <h2 id="label-Callback+Options">Callback Options</h2>
215
+ <h2 id="callback-options">Callback Options</h2>
216
216
 
217
217
  <p>Each callback method accepts the following options:</p>
218
218
 
@@ -225,25 +225,25 @@
225
225
  </thead>
226
226
  <tbody>
227
227
  <tr>
228
- <td>‘only`</td>
228
+ <td><code>only</code></td>
229
229
  <td>Array of method names to which the callback applies</td>
230
230
  </tr>
231
231
  <tr>
232
- <td>‘except`</td>
232
+ <td><code>except</code></td>
233
233
  <td>Array of method names to which the callback does not apply</td>
234
234
  </tr>
235
235
  <tr>
236
- <td>‘if`</td>
236
+ <td><code>if</code></td>
237
237
  <td>Symbol (method name) or Proc that must return true for the callback to run</td>
238
238
  </tr>
239
239
  <tr>
240
- <td>‘unless`</td>
240
+ <td><code>unless</code></td>
241
241
  <td>Symbol (method name) or Proc that must return false for the callback to run</td>
242
242
  </tr>
243
243
  </tbody>
244
244
  </table>
245
245
 
246
- <h2 id="label-How+It+Works">How It Works</h2>
246
+ <h2 id="how-it-works">How It Works</h2>
247
247
 
248
248
  <p>Callbacker uses Ruby’s metaprogramming to wrap your methods with callback functionality:</p>
249
249
  <ol><li>
@@ -256,7 +256,7 @@
256
256
  <p>When the method is called, it executes the callbacks in the proper order</p>
257
257
  </li></ol>
258
258
 
259
- <h2 id="label-F0-9F-93-9A+Use+Cases">📚 Use Cases</h2>
259
+ <h2 id="-use-cases">📚 Use Cases</h2>
260
260
  <ul><li>
261
261
  <p>Authentication &amp; Authorization</p>
262
262
  </li><li>
@@ -277,19 +277,19 @@
277
277
  <p>Data transformation</p>
278
278
  </li></ul>
279
279
 
280
- <h2 id="label-F0-9F-A4-9D+Contributing">🤝 Contributing</h2>
280
+ <h2 id="-contributing">🤝 Contributing</h2>
281
281
 
282
282
  <p>Bug reports and pull requests are welcome on GitHub at <a href="https://github.com/gklsan/solid_callback/issues">github.com/gklsan/solid_callback/issues</a>.</p>
283
283
 
284
- <h2 id="label-F0-9F-93-84+License">📄 License</h2>
284
+ <h2 id="-license">📄 License</h2>
285
285
 
286
286
  <p>The gem is available as open source under the terms of the <a href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
287
287
  </div></div>
288
288
 
289
289
  <div id="footer">
290
- Generated on Wed Mar 12 18:55:58 2025 by
290
+ Generated on Tue Mar 3 12:41:11 2026 by
291
291
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
292
- 0.9.37 (ruby-3.3.0).
292
+ 0.9.37 (ruby-4.0.1).
293
293
  </div>
294
294
 
295
295
  </div>
data/doc/index.html CHANGED
@@ -58,13 +58,13 @@
58
58
  </div>
59
59
 
60
60
  <div id="content"><div id='filecontents'>
61
- <h1 id="label-SolidCallback">SolidCallback</h1>
61
+ <h1 id="solidcallback">SolidCallback</h1>
62
62
 
63
- <p><a href="https://badge.fury.io/rb/solid_callback"><img src="https://badge.fury.io/rb/solid_callback.svg"></a> <a href="https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml"><img src="https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml/badge.svg"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg"></a></p>
63
+ <p><a href="https://badge.fury.io/rb/solid_callback"><img src="https://badge.fury.io/rb/solid_callback.svg?icon=si%3Arubygems" alt="Gem Version"></a> <a href="https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml"><img src="https://github.com/gklsan/solid_callback/actions/workflows/ruby.yml/badge.svg" alt="Test"></a> <a href="https://badge.fury.io/rb/simple_http_service"><img src="https://img.shields.io/gem/dt/simple_http_service.svg" alt="Downloads"></a> <a href="https://github.com/gklsan/solid_callback/network"><img src="https://img.shields.io/github/forks/gklsan/solid_callback.svg" alt="Github forks"></a> <a href="https://github.com/gklsan/solid_callback/stargazers"><img src="https://img.shields.io/github/stars/gklsan/solid_callback.svg" alt="Github stars"></a> <a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License: MIT"></a></p>
64
64
 
65
65
  <p>SolidCallback adds powerful method interception capabilities to your Ruby classes with near-zero overhead. Clean, flexible, and unobtrusive.</p>
66
66
 
67
- <h2 id="label-Features">Features</h2>
67
+ <h2 id="features">Features</h2>
68
68
  <ul><li>
69
69
  <p>🔄 <strong>Method Lifecycle Hooks</strong>: <code>before_call</code>, <code>after_call</code>, and <code>around_call</code> - intercept methods without modifying their code</p>
70
70
  </li><li>
@@ -79,7 +79,7 @@
79
79
  <p>📝 <strong>Conditional execution</strong>: Run callbacks only when specific conditions are met</p>
80
80
  </li></ul>
81
81
 
82
- <h2 id="label-Installation">Installation</h2>
82
+ <h2 id="installation">Installation</h2>
83
83
 
84
84
  <p>Add this line to your application’s Gemfile:</p>
85
85
 
@@ -96,9 +96,9 @@
96
96
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_gem'>gem</span> <span class='id identifier rubyid_install'>install</span> <span class='id identifier rubyid_solid_callback'>solid_callback</span>
97
97
  </code></pre>
98
98
 
99
- <h2 id="label-Usage">Usage</h2>
99
+ <h2 id="usage">Usage</h2>
100
100
 
101
- <h3 id="label-Basic+Example">Basic Example</h3>
101
+ <h3 id="basic-example">Basic Example</h3>
102
102
 
103
103
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>solid_callback</span><span class='tstring_end'>&#39;</span></span>
104
104
 
@@ -142,7 +142,7 @@
142
142
  <span class='id identifier rubyid_service'>service</span><span class='period'>.</span><span class='id identifier rubyid_find_user'>find_user</span><span class='lparen'>(</span><span class='int'>42</span><span class='rparen'>)</span>
143
143
  </code></pre>
144
144
 
145
- <h3 id="label-Advanced+Usage">Advanced Usage</h3>
145
+ <h3 id="advanced-usage">Advanced Usage</h3>
146
146
 
147
147
  <p>Apply callbacks to specific methods:</p>
148
148
 
@@ -190,7 +190,7 @@
190
190
  <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_before_call'>before_call</span> <span class='symbol'>:notify_admin</span><span class='comma'>,</span> <span class='label'>if:</span> <span class='tlambda'>-&gt;</span> <span class='tlambeg'>{</span> <span class='const'>Rails</span><span class='period'>.</span><span class='id identifier rubyid_env'>env</span><span class='period'>.</span><span class='id identifier rubyid_production?'>production?</span> <span class='rbrace'>}</span>
191
191
  </code></pre>
192
192
 
193
- <h3 id="label-Skipping+Callbacks">Skipping Callbacks</h3>
193
+ <h3 id="skipping-callbacks">Skipping Callbacks</h3>
194
194
 
195
195
  <p>Skip callbacks for specific methods:</p>
196
196
 
@@ -212,7 +212,7 @@
212
212
  <span class='kw'>end</span>
213
213
  </code></pre>
214
214
 
215
- <h2 id="label-Callback+Options">Callback Options</h2>
215
+ <h2 id="callback-options">Callback Options</h2>
216
216
 
217
217
  <p>Each callback method accepts the following options:</p>
218
218
 
@@ -225,25 +225,25 @@
225
225
  </thead>
226
226
  <tbody>
227
227
  <tr>
228
- <td>‘only`</td>
228
+ <td><code>only</code></td>
229
229
  <td>Array of method names to which the callback applies</td>
230
230
  </tr>
231
231
  <tr>
232
- <td>‘except`</td>
232
+ <td><code>except</code></td>
233
233
  <td>Array of method names to which the callback does not apply</td>
234
234
  </tr>
235
235
  <tr>
236
- <td>‘if`</td>
236
+ <td><code>if</code></td>
237
237
  <td>Symbol (method name) or Proc that must return true for the callback to run</td>
238
238
  </tr>
239
239
  <tr>
240
- <td>‘unless`</td>
240
+ <td><code>unless</code></td>
241
241
  <td>Symbol (method name) or Proc that must return false for the callback to run</td>
242
242
  </tr>
243
243
  </tbody>
244
244
  </table>
245
245
 
246
- <h2 id="label-How+It+Works">How It Works</h2>
246
+ <h2 id="how-it-works">How It Works</h2>
247
247
 
248
248
  <p>Callbacker uses Ruby’s metaprogramming to wrap your methods with callback functionality:</p>
249
249
  <ol><li>
@@ -256,7 +256,7 @@
256
256
  <p>When the method is called, it executes the callbacks in the proper order</p>
257
257
  </li></ol>
258
258
 
259
- <h2 id="label-F0-9F-93-9A+Use+Cases">📚 Use Cases</h2>
259
+ <h2 id="-use-cases">📚 Use Cases</h2>
260
260
  <ul><li>
261
261
  <p>Authentication &amp; Authorization</p>
262
262
  </li><li>
@@ -277,19 +277,19 @@
277
277
  <p>Data transformation</p>
278
278
  </li></ul>
279
279
 
280
- <h2 id="label-F0-9F-A4-9D+Contributing">🤝 Contributing</h2>
280
+ <h2 id="-contributing">🤝 Contributing</h2>
281
281
 
282
282
  <p>Bug reports and pull requests are welcome on GitHub at <a href="https://github.com/gklsan/solid_callback/issues">github.com/gklsan/solid_callback/issues</a>.</p>
283
283
 
284
- <h2 id="label-F0-9F-93-84+License">📄 License</h2>
284
+ <h2 id="-license">📄 License</h2>
285
285
 
286
286
  <p>The gem is available as open source under the terms of the <a href="https://opensource.org/licenses/MIT">MIT License</a>.</p>
287
287
  </div></div>
288
288
 
289
289
  <div id="footer">
290
- Generated on Wed Mar 12 18:55:58 2025 by
290
+ Generated on Tue Mar 3 12:41:11 2026 by
291
291
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
292
- 0.9.37 (ruby-3.3.0).
292
+ 0.9.37 (ruby-4.0.1).
293
293
  </div>
294
294
 
295
295
  </div>
@@ -100,9 +100,9 @@
100
100
  </div>
101
101
 
102
102
  <div id="footer">
103
- Generated on Wed Mar 12 18:55:58 2025 by
103
+ Generated on Tue Mar 3 12:41:11 2026 by
104
104
  <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
105
- 0.9.37 (ruby-3.3.0).
105
+ 0.9.37 (ruby-4.0.1).
106
106
  </div>
107
107
 
108
108
  </div>
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidCallback
4
- VERSION = "2.0.2"
4
+ VERSION = "3.1.0"
5
5
  end
data/mise.toml ADDED
@@ -0,0 +1,2 @@
1
+ [tools]
2
+ ruby = "3.4.2"
metadata CHANGED
@@ -1,27 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_callback
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gokul (gklsan)
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-03-31 00:00:00.000000000 Z
10
+ date: 2026-07-07 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
18
17
  - !ruby/object:Gem::Version
19
18
  version: '2.0'
20
19
  type: :development
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
- - - "~>"
23
+ - - ">="
25
24
  - !ruby/object:Gem::Version
26
25
  version: '2.0'
27
26
  - !ruby/object:Gem::Dependency
@@ -108,6 +107,7 @@ files:
108
107
  - lib/solid_callback/hooks.rb
109
108
  - lib/solid_callback/method_wrapper.rb
110
109
  - lib/solid_callback/version.rb
110
+ - mise.toml
111
111
  - sig/solid_callback.rbs
112
112
  homepage: https://github.com/gklsan/solid_callback
113
113
  licenses:
@@ -117,7 +117,6 @@ metadata:
117
117
  changelog_uri: https://github.com/gklsan/solid_callback/releases
118
118
  bug_tracker_uri: https://github.com/gklsan/solid_callback/issues
119
119
  documentation_uri: https://rubydoc.info/github/gklsan/solid_callback
120
- post_install_message:
121
120
  rdoc_options: []
122
121
  require_paths:
123
122
  - lib
@@ -132,8 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
131
  - !ruby/object:Gem::Version
133
132
  version: '0'
134
133
  requirements: []
135
- rubygems_version: 3.5.3
136
- signing_key:
134
+ rubygems_version: 3.6.6
137
135
  specification_version: 4
138
136
  summary: SolidCallback adds powerful method interception capabilities to your Ruby
139
137
  classes with near-zero overhead. Clean, flexible, and unobtrusive.