enhanced_errors 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1381112bfa16b295aa6916a6248fba5951ae7362984fd7741d8cef0c81d60769
4
- data.tar.gz: e60c4a237637dae49192c670ed291d1b6d90d97ea868572b834df2ec17c0e048
3
+ metadata.gz: c52d576256ec4fc2c77dde8744813310bb49c1108e123725b610d6fc9a09902a
4
+ data.tar.gz: 7917a2419c729feb708b100a19ee7c3a8b9defec42d34f991331e054cd1800f5
5
5
  SHA512:
6
- metadata.gz: 387e0660918b06a32515f2ef928d9caacf4394640bce877438b4d25d278664999d831aef693bb128b24efbed490e66991b32a1663927b099fa50fb1d77d1e620
7
- data.tar.gz: fbfdee8971f463d7697321b4873fd0bc4a48ca39acd59f172ca81e64b8e52bde4c5a83d3c56599e772bfdc61eae034b179fbd7bec42dee1442685fd23e00919d
6
+ metadata.gz: 225ec06e204a1783a479e1eed7d648a0c564e4fe93408d96e7d9e7f20153cb6ec481eb254e7d230c888a8d512b69333ff245244fe638d4257a7899de62896410
7
+ data.tar.gz: aacbe2caa5ddbf1b73cc3544136ddec8f97975f5ad2a977a14163200874d02db8aa75d421878206d275f78d859876bb6c96770aba97668842f2aa3c1c198f63a
data/.yardoc/checksums ADDED
@@ -0,0 +1,4 @@
1
+ lib/colors.rb a4314ef9531d4713907c3fea22955c943fdb8cf3
2
+ lib/binding.rb fdd7d5a2dd2edde22e3b10773510738dcdce4aeb
3
+ lib/enhanced_errors.rb 314e2109290db51b63e2e417f67b834425131726
4
+ lib/error_enhancements.rb 5ff3b60d76a44979b9745d1c47e77f7569fd03ac
data/.yardoc/complete ADDED
File without changes
Binary file
Binary file
Binary file
data/README.md CHANGED
@@ -7,10 +7,13 @@
7
7
  **EnhancedErrors** leverages Ruby's built-in [TracePoint](https://ruby-doc.org/core-3.1.0/TracePoint.html) feature to provide detailed context for exceptions, making debugging easier without significant performance overhead.
8
8
 
9
9
  When an exception is raised, EnhancedErrors captures the surrounding context. It works like this:
10
+ <br>
11
+
12
+ #### Enhanced Exception In Code:
10
13
 
11
14
  ```ruby
12
15
 
13
- require './lib/enhanced_errors'
16
+ require 'enhanced_errors'
14
17
  require 'awesome_print' # Optional, for better output
15
18
 
16
19
  EnhancedErrors.enhance!
@@ -29,10 +32,13 @@ foo
29
32
 
30
33
  ```
31
34
 
32
- #### Enhanced Exception In Code:
35
+ ##### Output:
33
36
 
34
37
  <img src="./doc/images/enhanced-error.png" style="height: 171px; width: 440px;"></img>
35
38
 
39
+ <br>
40
+
41
+ #### Enhanced Exception In Specs:
36
42
 
37
43
  ```ruby
38
44
  describe 'attains enlightenment' do
@@ -51,7 +57,7 @@ foo
51
57
  end
52
58
  ```
53
59
 
54
- #### Enhanced Exception In Specs:
60
+ #### Output:
55
61
 
56
62
  <img src="./doc/images/enhanced-spec.png" style="height: 426px; width: 712px;"></img>
57
63
 
@@ -71,26 +77,24 @@ foo
71
77
 
72
78
  EnhancedErrors has a few big use-cases:
73
79
 
74
- * Data-driven bugs. For example, if, while processing a 10 gig file, you get an error, you can't just re-run the code with a debugger.
80
+ * **Catch Data-driven bugs**. For example, if, while processing a 10 gig file, you get an error, you can't just re-run the code with a debugger.
75
81
  You also can't just print out all the data, because it's too big. You want to know what the data was the cause of the error.
76
- Ideally, without long instrument-re-run-fix loops.
82
+ Ideally, without long instrument-re-run-fix loops. If your logging didn't capture the data, normally, you'd be stuck.
77
83
 
78
- If your logging didn't capture the data, normally, you'd be stuck.
84
+ * **Debug** a complex application erroring deep in the stack when you can't tell where the error originates
79
85
 
80
- * Debug a complex application erroring deep in the stack when you can't tell where the error originates
86
+ * **Faster TDD** - Often, you won't have to re-run to see an error--you can go straight to the fix.
81
87
 
82
- * Faster TDD - Often, you won't have to re-run to see an error--you can go straight to the fix.
83
-
84
- * Faster CI -> Dev fixes. When a bug happens in CI, usually there's a step where you first reproduce it locally.
88
+ * **Faster CI -> Fix loop**. When a bug happens in CI, usually there's a step where you first reproduce it locally.
85
89
  EnhancedErrors can help you skip that step.
86
90
 
87
- * Faster debugging. In general, you can skip the add-instrumentation step and jump to the fix.
91
+ * **Faster debugging**. In general, you can skip the add-instrumentation step and jump to the fix.
88
92
 
89
- * Heisenbugs - bugs that disappear when you try to debug them. EnhancedErrors can help you capture the data that causes the bug before it disappears.
93
+ * **Heisenbugs** - bugs that disappear when you try to debug them. EnhancedErrors can help you capture the data that causes the bug before it disappears.
90
94
 
91
- * "Unknown Unknowns" - you can't pre-emptively log variables from failure cases you never imagined.
95
+ * **Unknown Unknowns** - you can't pre-emptively log variables from failure cases you never imagined.
92
96
 
93
- * Cron jobs and daemons - when it fails for unknown reasons at 4am, check the log and fix--it probably has what you need.
97
+ * **Cron jobs** and **daemons** - when it fails for unknown reasons at 4am, check the log and fix--it probably has what you need.
94
98
 
95
99
  ## Installation
96
100
 
@@ -117,11 +121,19 @@ $ gem install enhanced_errors
117
121
  To enable EnhancedErrors, call the `enhance!` method:
118
122
 
119
123
  ```ruby
124
+ # For a rails app, put this in an initializer, or spec_helper.rb
125
+ # ex: config/initializers/enhanced_errors.rb
126
+
127
+ require 'awesome_print' # Optional, for better output
120
128
  EnhancedErrors.enhance!
129
+
130
+ # -> now your error messages will have variables and their values appended to them.
131
+
121
132
  ```
122
133
 
123
134
  This activates the TracePoint to start capturing exceptions and their surrounding context.
124
135
 
136
+
125
137
  ### Configuration Options
126
138
 
127
139
  You can pass configuration options to `enhance!`:
@@ -133,6 +145,7 @@ EnhancedErrors.enhance!(enabled: true, max_length: 2000) do
133
145
  end
134
146
 
135
147
  ```
148
+ - `add_to_skip_list`: Variables to ignore, as symbols. ex: :@instance_variable_to_skip, :local_to_skip`
136
149
  - `enabled`: Enables or disables the enhancement (default: `true`).
137
150
  - `max_length`: Sets the maximum length of the enhanced message (default: `2500`).
138
151
 
@@ -319,7 +332,7 @@ encryptor = ENCRYPTOR
319
332
  EnhancedErrors.on_format = lambda do |formatted_string|
320
333
  encrypted_data = encryptor.encrypt_and_sign(formatted_string)
321
334
  encrypted_base64 = Base64.strict_encode64(encrypted_data)
322
- "ENCRYPTED[#{encrypted_data}]"
335
+ "ENCRYPTED[#{encrypted_base64}]"
323
336
  end
324
337
  ```
325
338
 
@@ -342,10 +355,11 @@ The captured data is then appended to the exception's message, providing rich co
342
355
 
343
356
  ## Awesome Print
344
357
 
345
- EnhancedErrors uses the [awesome_print](https://github.com/awesome-print/awesome_print)
346
- gem to format the captured data, if it is installed and available.
347
- If not, errors should still work, but the output may be less readable. AwesomePrint is not
348
- required directly by EnhancedErrors, so you will need to add it to your Gemfile if you want to use it.
358
+ EnhancedErrors automatically uses the [awesome_print](https://github.com/awesome-print/awesome_print)
359
+ gem to format the captured data, ___if___ it is installed and available.
360
+ If not, error enhancement will work, but the output may be less pretty (er, awesome).
361
+ AwesomePrint is not required directly by EnhancedErrors, so you will need to add it to your Gemfile
362
+ if you want to use it.
349
363
 
350
364
  ```ruby
351
365
  gem 'awesome_print'
data/doc/Binding.html ADDED
@@ -0,0 +1,137 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Class: Binding
8
+
9
+ &mdash; Documentation by YARD 0.9.37
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "Binding";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index (B)</a> &raquo;
40
+
41
+
42
+ <span class="title">Binding</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Class: Binding
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+ <dl>
70
+ <dt>Inherits:</dt>
71
+ <dd>
72
+ <span class="inheritName">Object</span>
73
+
74
+ <ul class="fullTree">
75
+ <li>Object</li>
76
+
77
+ <li class="next">Binding</li>
78
+
79
+ </ul>
80
+ <a href="#" class="inheritanceTree">show all</a>
81
+
82
+ </dd>
83
+ </dl>
84
+
85
+
86
+
87
+
88
+
89
+
90
+ <dl>
91
+ <dt>Includes:</dt>
92
+ <dd><span class='object_link'><a href="Debugging.html" title="Debugging (module)">Debugging</a></span></dd>
93
+ </dl>
94
+
95
+
96
+
97
+
98
+
99
+
100
+ <dl>
101
+ <dt>Defined in:</dt>
102
+ <dd>lib/binding.rb</dd>
103
+ </dl>
104
+
105
+ </div>
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+ <h2>Method Summary</h2>
122
+
123
+ <h3 class="inherited">Methods included from <span class='object_link'><a href="Debugging.html" title="Debugging (module)">Debugging</a></span></h3>
124
+ <p class="inherited"><span class='object_link'><a href="Debugging.html#let_vars_hash-instance_method" title="Debugging#let_vars_hash (method)">#let_vars_hash</a></span></p>
125
+
126
+
127
+ </div>
128
+
129
+ <div id="footer">
130
+ Generated on Tue Oct 22 23:16:25 2024 by
131
+ <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
132
+ 0.9.37 (ruby-3.1.3).
133
+ </div>
134
+
135
+ </div>
136
+ </body>
137
+ </html>
data/doc/Colors.html ADDED
@@ -0,0 +1,384 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ Class: Colors
8
+
9
+ &mdash; Documentation by YARD 0.9.37
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" />
16
+
17
+ <script type="text/javascript">
18
+ pathId = "Colors";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="class_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index (C)</a> &raquo;
40
+
41
+
42
+ <span class="title">Colors</span>
43
+
44
+ </div>
45
+
46
+ <div id="search">
47
+
48
+ <a class="full_list_link" id="class_list_link"
49
+ href="class_list.html">
50
+
51
+ <svg width="24" height="24">
52
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
+ </svg>
56
+ </a>
57
+
58
+ </div>
59
+ <div class="clear"></div>
60
+ </div>
61
+
62
+ <div id="content"><h1>Class: Colors
63
+
64
+
65
+
66
+ </h1>
67
+ <div class="box_info">
68
+
69
+ <dl>
70
+ <dt>Inherits:</dt>
71
+ <dd>
72
+ <span class="inheritName">Object</span>
73
+
74
+ <ul class="fullTree">
75
+ <li>Object</li>
76
+
77
+ <li class="next">Colors</li>
78
+
79
+ </ul>
80
+ <a href="#" class="inheritanceTree">show all</a>
81
+
82
+ </dd>
83
+ </dl>
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+ <dl>
96
+ <dt>Defined in:</dt>
97
+ <dd>lib/colors.rb</dd>
98
+ </dl>
99
+
100
+ </div>
101
+
102
+
103
+
104
+ <h2>
105
+ Constant Summary
106
+ <small><a href="#" class="constants_summary_toggle">collapse</a></small>
107
+ </h2>
108
+
109
+ <dl class="constants">
110
+
111
+ <dt id="COLORS-constant" class="">COLORS =
112
+
113
+ </dt>
114
+ <dd><pre class="code"><span class='lbrace'>{</span> <span class='label'>red:</span> <span class='int'>31</span><span class='comma'>,</span> <span class='label'>green:</span> <span class='int'>32</span><span class='comma'>,</span> <span class='label'>yellow:</span> <span class='int'>33</span><span class='comma'>,</span> <span class='label'>blue:</span> <span class='int'>34</span><span class='comma'>,</span> <span class='label'>purple:</span> <span class='int'>35</span><span class='comma'>,</span> <span class='label'>cyan:</span> <span class='int'>36</span><span class='comma'>,</span> <span class='label'>white:</span> <span class='int'>0</span> <span class='rbrace'>}</span></pre></dd>
115
+
116
+ </dl>
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+ <h2>
127
+ Class Method Summary
128
+ <small><a href="#" class="summary_toggle">collapse</a></small>
129
+ </h2>
130
+
131
+ <ul class="summary">
132
+
133
+ <li class="public ">
134
+ <span class="summary_signature">
135
+
136
+ <a href="#code-class_method" title="code (class method)">.<strong>code</strong>(num) &#x21d2; Object </a>
137
+
138
+
139
+
140
+ </span>
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+ <span class="summary_desc"><div class='inline'></div></span>
151
+
152
+ </li>
153
+
154
+
155
+ <li class="public ">
156
+ <span class="summary_signature">
157
+
158
+ <a href="#color-class_method" title="color (class method)">.<strong>color</strong>(num, string) &#x21d2; Object </a>
159
+
160
+
161
+
162
+ </span>
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+ <span class="summary_desc"><div class='inline'></div></span>
173
+
174
+ </li>
175
+
176
+
177
+ <li class="public ">
178
+ <span class="summary_signature">
179
+
180
+ <a href="#enabled=-class_method" title="enabled= (class method)">.<strong>enabled=</strong>(value) &#x21d2; Object </a>
181
+
182
+
183
+
184
+ </span>
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+ <span class="summary_desc"><div class='inline'></div></span>
195
+
196
+ </li>
197
+
198
+
199
+ <li class="public ">
200
+ <span class="summary_signature">
201
+
202
+ <a href="#enabled%3F-class_method" title="enabled? (class method)">.<strong>enabled?</strong> &#x21d2; Boolean </a>
203
+
204
+
205
+
206
+ </span>
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+ <span class="summary_desc"><div class='inline'></div></span>
217
+
218
+ </li>
219
+
220
+
221
+ </ul>
222
+
223
+
224
+
225
+
226
+ <div id="class_method_details" class="method_details_list">
227
+ <h2>Class Method Details</h2>
228
+
229
+
230
+ <div class="method_details first">
231
+ <h3 class="signature first" id="code-class_method">
232
+
233
+ .<strong>code</strong>(num) &#x21d2; <tt>Object</tt>
234
+
235
+
236
+
237
+
238
+
239
+ </h3><table class="source_code">
240
+ <tr>
241
+ <td>
242
+ <pre class="lines">
243
+
244
+
245
+ 17
246
+ 18
247
+ 19</pre>
248
+ </td>
249
+ <td>
250
+ <pre class="code"><span class="info file"># File 'lib/colors.rb', line 17</span>
251
+
252
+ <span class='kw'>def</span> <span class='id identifier rubyid_code'>code</span><span class='lparen'>(</span><span class='id identifier rubyid_num'>num</span><span class='rparen'>)</span>
253
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>\e[</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_num'>num</span><span class='embexpr_end'>}</span><span class='tstring_content'>m</span><span class='tstring_end'>&quot;</span></span>
254
+ <span class='kw'>end</span></pre>
255
+ </td>
256
+ </tr>
257
+ </table>
258
+ </div>
259
+
260
+ <div class="method_details ">
261
+ <h3 class="signature " id="color-class_method">
262
+
263
+ .<strong>color</strong>(num, string) &#x21d2; <tt>Object</tt>
264
+
265
+
266
+
267
+
268
+
269
+ </h3><table class="source_code">
270
+ <tr>
271
+ <td>
272
+ <pre class="lines">
273
+
274
+
275
+ 13
276
+ 14
277
+ 15</pre>
278
+ </td>
279
+ <td>
280
+ <pre class="code"><span class="info file"># File 'lib/colors.rb', line 13</span>
281
+
282
+ <span class='kw'>def</span> <span class='id identifier rubyid_color'>color</span><span class='lparen'>(</span><span class='id identifier rubyid_num'>num</span><span class='comma'>,</span> <span class='id identifier rubyid_string'>string</span><span class='rparen'>)</span>
283
+ <span class='ivar'>@enabled</span> <span class='op'>?</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_code'>code</span><span class='lparen'>(</span><span class='id identifier rubyid_num'>num</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_string'>string</span><span class='embexpr_end'>}</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_code'>code</span><span class='lparen'>(</span><span class='int'>0</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='op'>:</span> <span class='id identifier rubyid_string'>string</span>
284
+ <span class='kw'>end</span></pre>
285
+ </td>
286
+ </tr>
287
+ </table>
288
+ </div>
289
+
290
+ <div class="method_details ">
291
+ <h3 class="signature " id="enabled=-class_method">
292
+
293
+ .<strong>enabled=</strong>(value) &#x21d2; <tt>Object</tt>
294
+
295
+
296
+
297
+
298
+
299
+ </h3><table class="source_code">
300
+ <tr>
301
+ <td>
302
+ <pre class="lines">
303
+
304
+
305
+ 9
306
+ 10
307
+ 11</pre>
308
+ </td>
309
+ <td>
310
+ <pre class="code"><span class="info file"># File 'lib/colors.rb', line 9</span>
311
+
312
+ <span class='kw'>def</span> <span class='id identifier rubyid_enabled='>enabled=</span><span class='lparen'>(</span><span class='id identifier rubyid_value'>value</span><span class='rparen'>)</span>
313
+ <span class='ivar'>@enabled</span> <span class='op'>=</span> <span class='id identifier rubyid_value'>value</span>
314
+ <span class='kw'>end</span></pre>
315
+ </td>
316
+ </tr>
317
+ </table>
318
+ </div>
319
+
320
+ <div class="method_details ">
321
+ <h3 class="signature " id="enabled?-class_method">
322
+
323
+ .<strong>enabled?</strong> &#x21d2; <tt>Boolean</tt>
324
+
325
+
326
+
327
+
328
+
329
+ </h3><div class="docstring">
330
+ <div class="discussion">
331
+
332
+
333
+ </div>
334
+ </div>
335
+ <div class="tags">
336
+
337
+ <p class="tag_title">Returns:</p>
338
+ <ul class="return">
339
+
340
+ <li>
341
+
342
+
343
+ <span class='type'>(<tt>Boolean</tt>)</span>
344
+
345
+
346
+
347
+ </li>
348
+
349
+ </ul>
350
+
351
+ </div><table class="source_code">
352
+ <tr>
353
+ <td>
354
+ <pre class="lines">
355
+
356
+
357
+ 5
358
+ 6
359
+ 7</pre>
360
+ </td>
361
+ <td>
362
+ <pre class="code"><span class="info file"># File 'lib/colors.rb', line 5</span>
363
+
364
+ <span class='kw'>def</span> <span class='id identifier rubyid_enabled?'>enabled?</span>
365
+ <span class='ivar'>@enabled</span>
366
+ <span class='kw'>end</span></pre>
367
+ </td>
368
+ </tr>
369
+ </table>
370
+ </div>
371
+
372
+ </div>
373
+
374
+ </div>
375
+
376
+ <div id="footer">
377
+ Generated on Tue Oct 22 23:16:25 2024 by
378
+ <a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
379
+ 0.9.37 (ruby-3.1.3).
380
+ </div>
381
+
382
+ </div>
383
+ </body>
384
+ </html>