pretty_debug 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pretty_debug.rb +39 -16
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 04efe0cf9dba9901b76596d083e6e2d7bcaedefe
4
- data.tar.gz: 161511fa41ee80e11bbcf24d2b04449a972ad0c2
3
+ metadata.gz: 3372f676070f6a1209686705bac0b4ae7a107781
4
+ data.tar.gz: 3d9249542e962fb8272bc97f77025b05a5f35360
5
5
  SHA512:
6
- metadata.gz: 49766af15d06ede86a35499730605b8dd5c618c62a2f44cf3657950a96c6a6eaf44bda77f52bd2fe3dbdd20b66a2a141d301c3a6adbe69cc0d2bc779be2dfedf
7
- data.tar.gz: a2e8df34f7e48cb2bafe0ac02c6d1f9e1c73c4823a37a4cd4a5f0d131e58a7e63b5c1425c0442a3a01b46baf5d47da7f75773ed571c27362a54b2a54a4067c47
6
+ metadata.gz: 20f1867e724f838a20b0b52951cb79260617742129bb1e94742f9e0a4d7c698749ac8a678a7cd7d329400bf5a62bb0082cde83ef7ad8b6905d32136449e0f40a
7
+ data.tar.gz: 124d332e151d164cb3f5188758084d74993f0c8d2c0ac40d3e86b1b5bb933dcfd47928f86676d83b6dae544bb344f8ae7c8cdcb6a5a70388b0227ca5092724a0
data/lib/pretty_debug.rb CHANGED
@@ -2,13 +2,41 @@
2
2
  require "string"
3
3
  require "utility"
4
4
 
5
+ class Exception
6
+ attr_accessor :backtrace_locations
7
+ def complement_backtrace_locations
8
+ @backtrace_locations ||=
9
+ backtrace.map{|l| Thread::Backtrace::PseudoLocation.new(l)}
10
+ end
11
+ end
12
+
13
+ class Thread::Backtrace::PseudoLocation
14
+ Pattern = /\A(?'f'.+?):(?'li'\d+)(?::in `(?'lb'.*)'|(?'lb'.*))?\z/m
15
+ attr_accessor :to_s, :absolute_path, :lineno, :label, :path, :base_label
16
+ def initialize to_s
17
+ @to_s = to_s
18
+ @absolute_path, @lineno, @label =
19
+ @to_s.match(Pattern).chain{|m| [m[:f], m[:li].to_i, m[:lb]]}
20
+ @path = File.basename(@absolute_path)
21
+ @base_label = @label.gsub(/\Ablock in /, "")
22
+ end
23
+ end
24
+
5
25
  module Kernel
26
+ alias old_raise :raise
27
+ def raise *args
28
+ old_raise *args
29
+ rescue => e
30
+ e.backrace_locations = caller_locations
31
+ old_raise(e)
32
+ end
6
33
  at_exit do
7
34
  case $!
8
35
  when nil, SystemExit, Interrupt
9
36
  else
10
- puts PrettyDebug.message
11
- puts PrettyDebug.clean($@).align.map{|row| row.join(":")}
37
+ puts \
38
+ PrettyDebug.message($!),
39
+ PrettyDebug.backtrace_locations($!).align.map{|row| row.join(":")}
12
40
  end
13
41
  $stderr.reopen(IO::NULL)
14
42
  $stdout.reopen(IO::NULL)
@@ -16,27 +44,22 @@ module Kernel
16
44
  end
17
45
 
18
46
  class PrettyDebug
19
- attr_accessor :backtrace, :message
20
- def self.new_internal
21
- new.tap do |error|
22
- called_location = clean(caller_locations)[2]
23
- error.backtrace = clean($@).take_while{|a| a != called_location}
24
- error.message = $!.message
25
- end
47
+ def self.message e
48
+ e.complement_backtrace_locations
49
+ e.message.dup.tap{|s| s[0] = s[0].upcase}.sub(/(?<=[^.])\z/, ".")
50
+ end
51
+ def self.backtrace_locations e
52
+ e.complement_backtrace_locations
53
+ caller_locations(e.backtrace_locations)
26
54
  end
27
- def self.message; $!.message.dup.tap{|s| s[0] = s[0].upcase}.sub(/(?<=[^.])\z/, ".") end
28
- def self.clean stack
29
- return [] if stack.to_a.empty?
30
- caller_file_i = $LOADED_FEATURES.index(caller_location(0).path).to_i
31
- stack
55
+ def self.caller_locations a
56
+ a
32
57
  .map{|l| [l.path.ellipsis(55), l.lineno, l.base_label]}
33
58
  .transpose.tap do |_, _, m|
34
59
  m.rotate!(-1)
35
60
  m[0] = ""
36
61
  while i = m.index{|m| m == "method_missing"}; m[i] = m[i - 1] end
37
62
  end.transpose
38
- # .reject{|f, _, _| $LOADED_FEATURES.include?(f)}
39
- # .reject{|f, _, _| $LOADED_FEATURES.index(f).to_i > caller_file_i}
40
63
  end
41
64
  end
42
65
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pretty_debug
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - sawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-12 00:00:00.000000000 Z
11
+ date: 2013-08-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: ''
14
14
  email: []