puts_debuggerer 0.6.1 → 0.7.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/README.md +74 -3
- data/lib/puts_debuggerer.rb +147 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6051847f09b1366d57fe622110440f277c85a872
|
4
|
+
data.tar.gz: d8ee66acfbb3daea757a5bb5599aed56f9f7d182
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7df9317401c68f2f90bc10f3bccc5410883e3c712339432299aacf6761f516576c62d58477bfa00cb8648a68c7d94a6b166f21d36e81a26fcc0f73fc1b9ad60f
|
7
|
+
data.tar.gz: 02f85ec1f441cfc02785b5701a4b0104203fd0e2b2bdc020301b54d66435d87d12ce634b235f1be8338289cf88d2f033c34f2b078a7020853a474ed47b4a2fec
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# puts_debuggerer v0.
|
1
|
+
# puts_debuggerer v0.7.0
|
2
2
|
[](http://badge.fury.io/rb/puts_debuggerer)
|
3
3
|
[](https://travis-ci.org/AndyObtiva/puts_debuggerer)
|
4
4
|
[](https://coveralls.io/github/AndyObtiva/puts_debuggerer?branch=master)
|
@@ -25,7 +25,7 @@ Love PD?! Why not promote with [merchandise](https://www.zazzle.com/i+heart+pd+g
|
|
25
25
|
Add the following to bundler's `Gemfile`.
|
26
26
|
|
27
27
|
```ruby
|
28
|
-
gem 'puts_debuggerer', '~> 0.
|
28
|
+
gem 'puts_debuggerer', '~> 0.7.0'
|
29
29
|
```
|
30
30
|
|
31
31
|
This is the recommended way for [Rails](rubyonrails.org) apps. Optionally, you may create an initializer under `config/initializers` named `puts_debuggerer_options.rb` to enable further customizations as per the [Options](#options) section below.
|
@@ -35,7 +35,7 @@ This is the recommended way for [Rails](rubyonrails.org) apps. Optionally, you m
|
|
35
35
|
Or manually install and require library.
|
36
36
|
|
37
37
|
```bash
|
38
|
-
gem install puts_debuggerer -v0.
|
38
|
+
gem install puts_debuggerer -v0.7.0
|
39
39
|
```
|
40
40
|
|
41
41
|
```ruby
|
@@ -348,6 +348,75 @@ Prints out:
|
|
348
348
|
/Users/User/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/irb/context.rb:381:in \`evaluate\'
|
349
349
|
```
|
350
350
|
|
351
|
+
#### `PutsDebuggerer.run_at`
|
352
|
+
(default = nil)
|
353
|
+
|
354
|
+
Set condition for when to run as specified by an index, array, or range.
|
355
|
+
* Default value is `nil` meaning always
|
356
|
+
* Value as an Integer index (1-based) specifies at which run to print once
|
357
|
+
* Value as an Array of indices specifies at which runs to print multiple times
|
358
|
+
* Value as a range specifies at which runs to print multiple times,
|
359
|
+
indefinitely if it ends with ..-1 or ...-1
|
360
|
+
|
361
|
+
Can be set globally via `PutsDebuggerer.run_at` or piecemeal via `pd object, run_at: run_at_value`
|
362
|
+
|
363
|
+
Global usage should be good enough for most cases. When there is a need to track
|
364
|
+
a single expression among several, you may add the option piecemeal, but it expects
|
365
|
+
the same exact `object` passed to `pd` for counting.
|
366
|
+
|
367
|
+
Examples (global):
|
368
|
+
|
369
|
+
PutsDebuggerer.run_at = 1
|
370
|
+
pd (x=1) # prints standard PD output
|
371
|
+
pd (x=1) # prints nothing
|
372
|
+
|
373
|
+
PutsDebuggerer.run_at = 2
|
374
|
+
pd (x=1) # prints nothing
|
375
|
+
pd (x=1) # prints standard PD output
|
376
|
+
|
377
|
+
PutsDebuggerer.run_at = [1, 3]
|
378
|
+
pd (x=1) # prints standard PD output
|
379
|
+
pd (x=1) # prints nothing
|
380
|
+
pd (x=1) # prints standard PD output
|
381
|
+
pd (x=1) # prints nothing
|
382
|
+
|
383
|
+
PutsDebuggerer.run_at = 3..5
|
384
|
+
pd (x=1) # prints nothing
|
385
|
+
pd (x=1) # prints nothing
|
386
|
+
pd (x=1) # prints standard PD output
|
387
|
+
pd (x=1) # prints standard PD output
|
388
|
+
pd (x=1) # prints standard PD output
|
389
|
+
pd (x=1) # prints nothing
|
390
|
+
pd (x=1) # prints nothing
|
391
|
+
|
392
|
+
PutsDebuggerer.run_at = 3...6
|
393
|
+
pd (x=1) # prints nothing
|
394
|
+
pd (x=1) # prints nothing
|
395
|
+
pd (x=1) # prints standard PD output
|
396
|
+
pd (x=1) # prints standard PD output
|
397
|
+
pd (x=1) # prints standard PD output
|
398
|
+
pd (x=1) # prints nothing
|
399
|
+
|
400
|
+
PutsDebuggerer.run_at = 3..-1
|
401
|
+
pd (x=1) # prints nothing
|
402
|
+
pd (x=1) # prints nothing
|
403
|
+
pd (x=1) # prints standard PD output
|
404
|
+
pd (x=1) ... continue printing indefinitely on all subsequent runs
|
405
|
+
|
406
|
+
PutsDebuggerer.run_at = 3...-1
|
407
|
+
pd (x=1) # prints nothing
|
408
|
+
pd (x=1) # prints nothing
|
409
|
+
pd (x=1) # prints standard PD output
|
410
|
+
pd (x=1) ... continue printing indefinitely on all subsequent runs
|
411
|
+
|
412
|
+
You may reset the run_at number counter via:
|
413
|
+
`PutsDebuggerer.reset_run_at_global_number` for global usage.
|
414
|
+
|
415
|
+
And:
|
416
|
+
`PutsDebuggerer.reset_run_at_number` or
|
417
|
+
`PutsDebuggerer.reset_run_at_numbers`
|
418
|
+
for piecemeal usage.
|
419
|
+
|
351
420
|
### Bonus
|
352
421
|
|
353
422
|
puts_debuggerer comes with a number of bonus goodies.
|
@@ -405,6 +474,8 @@ Prints out `puts __caller_source_line__`
|
|
405
474
|
|
406
475
|
## Release Notes
|
407
476
|
|
477
|
+
* v0.7.0: `run_at` option, global and piecemeal.
|
478
|
+
* v0.6.1: updated README and broke apart specs
|
408
479
|
* v0.6.0: unofficial erb support, returning evaluated object/expression, removed static syntax support (replaced with header support)
|
409
480
|
* v0.5.1: support for print engine lambdas and smart defaults for leveraging Rails and AwesomePrint debuggers in Rails
|
410
481
|
* v0.5.0: custom formatter, caller backtrace, per-puts piecemeal options, and multi-line support
|
data/lib/puts_debuggerer.rb
CHANGED
@@ -14,6 +14,9 @@ module PutsDebuggerer
|
|
14
14
|
puts data[:footer] if data[:footer]
|
15
15
|
}
|
16
16
|
CALLER_DEPTH_ZERO = 4 #depth includes pd + with_options method + nested block + build_pd_data method
|
17
|
+
OBJECT_RUN_AT = {}
|
18
|
+
STACK_TRACE_CALL_LINE_NUMBER_REGEX = /\:(\d+)\:in /
|
19
|
+
STACK_TRACE_CALL_SOURCE_FILE_REGEX = /[ ]*([^:]+)\:\d+\:in /
|
17
20
|
|
18
21
|
class << self
|
19
22
|
# Application root path to exclude when printing out file path
|
@@ -258,7 +261,8 @@ module PutsDebuggerer
|
|
258
261
|
app_path: app_path,
|
259
262
|
announcer: announcer,
|
260
263
|
formatter: formatter,
|
261
|
-
caller: caller
|
264
|
+
caller: caller,
|
265
|
+
run_at: run_at
|
262
266
|
}
|
263
267
|
end
|
264
268
|
|
@@ -268,14 +272,115 @@ module PutsDebuggerer
|
|
268
272
|
send("#{option}=", value)
|
269
273
|
end
|
270
274
|
end
|
275
|
+
|
276
|
+
# When to run as specified by an index, array, or range.
|
277
|
+
# * Default value is `nil` meaning always
|
278
|
+
# * Value as an Integer index (1-based) specifies at which run to print once
|
279
|
+
# * Value as an Array of indices specifies at which runs to print multiple times
|
280
|
+
# * Value as a range specifies at which runs to print multiple times,
|
281
|
+
# indefinitely if it ends with ..-1
|
282
|
+
#
|
283
|
+
# Example:
|
284
|
+
#
|
285
|
+
# PutsDebuggerer.run_at = 1
|
286
|
+
# pd (x=1) # prints standard PD output
|
287
|
+
# pd (x=1) # prints nothing
|
288
|
+
#
|
289
|
+
# PutsDebuggerer.run_at = 2
|
290
|
+
# pd (x=1) # prints nothing
|
291
|
+
# pd (x=1) # prints standard PD output
|
292
|
+
#
|
293
|
+
# PutsDebuggerer.run_at = [1, 3]
|
294
|
+
# pd (x=1) # prints standard PD output
|
295
|
+
# pd (x=1) # prints nothing
|
296
|
+
# pd (x=1) # prints standard PD output
|
297
|
+
# pd (x=1) # prints nothing
|
298
|
+
#
|
299
|
+
# PutsDebuggerer.run_at = 3..5
|
300
|
+
# pd (x=1) # prints nothing
|
301
|
+
# pd (x=1) # prints nothing
|
302
|
+
# pd (x=1) # prints standard PD output
|
303
|
+
# pd (x=1) # prints standard PD output
|
304
|
+
# pd (x=1) # prints standard PD output
|
305
|
+
# pd (x=1) # prints nothing
|
306
|
+
# pd (x=1) # prints nothing
|
307
|
+
#
|
308
|
+
# PutsDebuggerer.run_at = 3...6
|
309
|
+
# pd (x=1) # prints nothing
|
310
|
+
# pd (x=1) # prints nothing
|
311
|
+
# pd (x=1) # prints standard PD output
|
312
|
+
# pd (x=1) # prints standard PD output
|
313
|
+
# pd (x=1) # prints standard PD output
|
314
|
+
# pd (x=1) # prints nothing
|
315
|
+
#
|
316
|
+
# PutsDebuggerer.run_at = 3..-1
|
317
|
+
# pd (x=1) # prints nothing
|
318
|
+
# pd (x=1) # prints nothing
|
319
|
+
# pd (x=1) # prints standard PD output
|
320
|
+
# pd (x=1) ... continue printing indefinitely on all subsequent runs
|
321
|
+
#
|
322
|
+
# PutsDebuggerer.run_at = 3...-1
|
323
|
+
# pd (x=1) # prints nothing
|
324
|
+
# pd (x=1) # prints nothing
|
325
|
+
# pd (x=1) # prints standard PD output
|
326
|
+
# pd (x=1) ... continue printing indefinitely on all subsequent runs
|
327
|
+
attr_reader :run_at
|
328
|
+
|
329
|
+
def run_at=(value)
|
330
|
+
@run_at = value
|
331
|
+
end
|
332
|
+
|
333
|
+
def run_at?
|
334
|
+
!!@run_at
|
335
|
+
end
|
336
|
+
|
337
|
+
attr_reader :run_at_global_number
|
338
|
+
|
339
|
+
def run_at_global_number=(value)
|
340
|
+
@run_at_global_number = value
|
341
|
+
end
|
342
|
+
|
343
|
+
def init_run_at_global_number(object, run_at)
|
344
|
+
@run_at_global_number = 1
|
345
|
+
end
|
346
|
+
|
347
|
+
def increment_run_at_global_number(object, run_at)
|
348
|
+
@run_at_global_number += 1
|
349
|
+
end
|
350
|
+
|
351
|
+
def reset_run_at_global_number(object, run_at)
|
352
|
+
@run_at_global_number = nil
|
353
|
+
end
|
354
|
+
|
355
|
+
def run_at_number(object, run_at)
|
356
|
+
PutsDebuggerer::OBJECT_RUN_AT[[object,run_at]]
|
357
|
+
end
|
358
|
+
|
359
|
+
def init_run_at_number(object, run_at)
|
360
|
+
PutsDebuggerer::OBJECT_RUN_AT[[object,run_at]] = 1
|
361
|
+
end
|
362
|
+
|
363
|
+
def increment_run_at_number(object, run_at)
|
364
|
+
PutsDebuggerer::OBJECT_RUN_AT[[object,run_at]] += 1
|
365
|
+
end
|
366
|
+
|
367
|
+
def reset_run_at_number(object, run_at)
|
368
|
+
PutsDebuggerer::OBJECT_RUN_AT.delete([object, run_at])
|
369
|
+
end
|
370
|
+
|
371
|
+
def reset_run_at_numbers
|
372
|
+
PutsDebuggerer::OBJECT_RUN_AT.clear
|
373
|
+
end
|
374
|
+
|
271
375
|
end
|
272
376
|
end
|
273
377
|
|
274
378
|
PutsDebuggerer.print_engine = PutsDebuggerer::PRINT_ENGINE_DEFAULT
|
275
379
|
PutsDebuggerer.announcer = PutsDebuggerer::ANNOUNCER_DEFAULT
|
276
380
|
PutsDebuggerer.formatter = PutsDebuggerer::FORMATTER_DEFAULT
|
277
|
-
PutsDebuggerer.app_path = nil
|
381
|
+
PutsDebuggerer.app_path = nil
|
278
382
|
PutsDebuggerer.caller = nil
|
383
|
+
PutsDebuggerer.run_at = nil
|
279
384
|
|
280
385
|
# Prints object with bonus info such as file name, line number and source
|
281
386
|
# expression. Optionally prints out header and footer.
|
@@ -307,16 +412,48 @@ PutsDebuggerer.caller = nil
|
|
307
412
|
# => "Show me the source of the bug: beattle"
|
308
413
|
# [PD] /Users/User/finance_calculator_app/pd_test.rb:4 "What line number am I?"
|
309
414
|
def pd(object, options=nil)
|
310
|
-
|
311
|
-
|
312
|
-
|
415
|
+
run_at = ((options && options[:run_at]) || PutsDebuggerer.run_at)
|
416
|
+
|
417
|
+
if __run_pd__(object, run_at)
|
418
|
+
__with_pd_options__(options) do |print_engine_options|
|
419
|
+
formatter_pd_data = __build_pd_data__(object, print_engine_options) #depth adds build method
|
420
|
+
PutsDebuggerer.formatter.call(formatter_pd_data)
|
421
|
+
end
|
313
422
|
end
|
423
|
+
|
314
424
|
object
|
315
425
|
end
|
316
426
|
|
317
|
-
|
318
|
-
|
319
|
-
|
427
|
+
def __run_pd__(object, run_at)
|
428
|
+
run_pd = false
|
429
|
+
if run_at.nil?
|
430
|
+
run_pd = true
|
431
|
+
else
|
432
|
+
if PutsDebuggerer.run_at_global_number.nil?
|
433
|
+
if PutsDebuggerer.run_at_number(object, run_at).nil?
|
434
|
+
PutsDebuggerer.init_run_at_number(object, run_at)
|
435
|
+
else
|
436
|
+
PutsDebuggerer.increment_run_at_number(object, run_at)
|
437
|
+
end
|
438
|
+
run_number = PutsDebuggerer.run_at_number(object, run_at)
|
439
|
+
else
|
440
|
+
if PutsDebuggerer.run_at_global_number.nil?
|
441
|
+
PutsDebuggerer.init_run_at_global_number
|
442
|
+
else
|
443
|
+
PutsDebuggerer.increment_run_at_global_number
|
444
|
+
end
|
445
|
+
run_number = PutsDebuggerer.run_at_global_number
|
446
|
+
end
|
447
|
+
if run_at.is_a?(Integer)
|
448
|
+
run_pd = true if run_at == run_number
|
449
|
+
elsif run_at.is_a?(Array)
|
450
|
+
run_pd = true if run_at.include?(run_number)
|
451
|
+
elsif run_at.is_a?(Range)
|
452
|
+
run_pd = true if run_at.cover?(run_number) || (run_at.end == -1 && run_number >= run_at.begin)
|
453
|
+
end
|
454
|
+
end
|
455
|
+
run_pd
|
456
|
+
end
|
320
457
|
|
321
458
|
# Provides caller line number starting 1 level above caller of
|
322
459
|
# this method.
|
@@ -329,7 +466,7 @@ STACK_TRACE_CALL_SOURCE_FILE_REGEX = /[ ]*([^:]+)\:\d+\:in /
|
|
329
466
|
#
|
330
467
|
# prints out `3`
|
331
468
|
def __caller_line_number__(caller_depth=0)
|
332
|
-
caller[caller_depth][STACK_TRACE_CALL_LINE_NUMBER_REGEX, 1].to_i
|
469
|
+
caller[caller_depth][PutsDebuggerer::STACK_TRACE_CALL_LINE_NUMBER_REGEX, 1].to_i
|
333
470
|
end
|
334
471
|
|
335
472
|
# Provides caller file starting 1 level above caller of
|
@@ -342,7 +479,7 @@ end
|
|
342
479
|
#
|
343
480
|
# prints out `lib/example.rb`
|
344
481
|
def __caller_file__(caller_depth=0)
|
345
|
-
caller[caller_depth][STACK_TRACE_CALL_SOURCE_FILE_REGEX, 1]
|
482
|
+
caller[caller_depth][PutsDebuggerer::STACK_TRACE_CALL_SOURCE_FILE_REGEX, 1]
|
346
483
|
end
|
347
484
|
|
348
485
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: puts_debuggerer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Maleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|