hammertime 0.0.2 → 0.0.3
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.
- data/VERSION +1 -1
- data/examples/loaderror.rb +11 -0
- data/hammertime.gemspec +22 -32
- data/lib/hammertime.rb +28 -5
- metadata +50 -25
- data/.gitignore +0 -22
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.3
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# IN A WORLD... where ruby-debug and IRB is not in the load
|
2
|
+
# path... one man will raise an exception.
|
3
|
+
require 'rubygems'
|
4
|
+
require '../lib/hammertime'
|
5
|
+
|
6
|
+
# Clear out load path. Now LoadError will be raised when
|
7
|
+
# Hammertime tries to load IRB or the debugger.
|
8
|
+
$:.clear
|
9
|
+
|
10
|
+
include Hammertime
|
11
|
+
raise "Holy smokes!"
|
data/hammertime.gemspec
CHANGED
@@ -1,54 +1,44 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.0.
|
7
|
+
s.name = "hammertime"
|
8
|
+
s.version = "0.0.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Avdi Grimm"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
|
15
|
-
enabling them to ignore the error, view a stack trace, debug the error using IRB
|
16
|
-
or ruby-debug, and more.
|
17
|
-
}
|
18
|
-
s.email = %q{avdi@avdi.org}
|
12
|
+
s.date = "2012-01-30"
|
13
|
+
s.description = "When this library is required, it replaces the default Ruby exception-raising\nbehavior. When an error is raised, the developer is presented with a menu\nenabling them to ignore the error, view a stack trace, debug the error using IRB\nor ruby-debug, and more.\n"
|
14
|
+
s.email = "avdi@avdi.org"
|
19
15
|
s.extra_rdoc_files = [
|
20
16
|
"LICENSE",
|
21
|
-
|
17
|
+
"README.rdoc"
|
22
18
|
]
|
23
19
|
s.files = [
|
24
20
|
".document",
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
"spec/hammertime_spec.rb",
|
34
|
-
"spec/spec.opts",
|
35
|
-
"spec/spec_helper.rb"
|
36
|
-
]
|
37
|
-
s.homepage = %q{http://github.com/avdi/hammertime}
|
38
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
39
|
-
s.require_paths = ["lib"]
|
40
|
-
s.rubygems_version = %q{1.3.5}
|
41
|
-
s.summary = %q{Exception debugging console for Ruby}
|
42
|
-
s.test_files = [
|
21
|
+
"LICENSE",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"example.rb",
|
26
|
+
"examples/loaderror.rb",
|
27
|
+
"hammertime.gemspec",
|
28
|
+
"lib/hammertime.rb",
|
43
29
|
"spec/hammertime_spec.rb",
|
44
|
-
|
30
|
+
"spec/spec.opts",
|
31
|
+
"spec/spec_helper.rb"
|
45
32
|
]
|
33
|
+
s.homepage = "http://github.com/avdi/hammertime"
|
34
|
+
s.require_paths = ["lib"]
|
35
|
+
s.rubygems_version = "1.8.10"
|
36
|
+
s.summary = "Exception debugging console for Ruby"
|
46
37
|
|
47
38
|
if s.respond_to? :specification_version then
|
48
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
49
39
|
s.specification_version = 3
|
50
40
|
|
51
|
-
if Gem::Version.new(Gem::
|
41
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
52
42
|
s.add_runtime_dependency(%q<ruby-debug>, ["~> 0.10"])
|
53
43
|
s.add_runtime_dependency(%q<highline>, ["~> 1.5"])
|
54
44
|
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
data/lib/hammertime.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'thread'
|
1
2
|
require 'highline'
|
2
3
|
|
3
4
|
module Hammertime
|
@@ -28,12 +29,15 @@ module Hammertime
|
|
28
29
|
|
29
30
|
def hammertime_raise(*args)
|
30
31
|
backtrace = caller(2)
|
31
|
-
|
32
|
-
|
32
|
+
fallback = lambda do
|
33
|
+
hammertime_original_raise(*args)
|
34
|
+
end
|
35
|
+
exclusive_and_non_reentrant(fallback) do
|
36
|
+
error, backtrace =
|
33
37
|
case args.size
|
34
38
|
when 0 then [($!.nil? ? RuntimeError.new : $!), backtrace]
|
35
|
-
when 1 then
|
36
|
-
if args[0].is_a?(String)
|
39
|
+
when 1 then
|
40
|
+
if args[0].is_a?(String)
|
37
41
|
[RuntimeError.exception(args[0]), backtrace]
|
38
42
|
else
|
39
43
|
[args[0].exception, backtrace]
|
@@ -52,7 +56,7 @@ module Hammertime
|
|
52
56
|
else
|
53
57
|
::Hammertime.stopped = true
|
54
58
|
end
|
55
|
-
|
59
|
+
|
56
60
|
c = ::Hammertime.hammertime_console
|
57
61
|
c.say "\n"
|
58
62
|
c.say "=== Stop! Hammertime. ==="
|
@@ -118,6 +122,14 @@ module Hammertime
|
|
118
122
|
|
119
123
|
private
|
120
124
|
|
125
|
+
# No lazy initialization where threads are concerned. We still use
|
126
|
+
# ||= on the off chance that this file gets loaded twice in 1.8.
|
127
|
+
@mutex ||= Mutex.new
|
128
|
+
|
129
|
+
def self.mutex
|
130
|
+
@mutex
|
131
|
+
end
|
132
|
+
|
121
133
|
def self.hammertime_console
|
122
134
|
@console ||= HighLine.new($stdin, $stderr)
|
123
135
|
end
|
@@ -128,6 +140,17 @@ module Hammertime
|
|
128
140
|
return true if ::Hammertime.ignored_lines.include?(backtrace.first)
|
129
141
|
return false
|
130
142
|
end
|
143
|
+
|
144
|
+
def exclusive_and_non_reentrant(fallback, &block)
|
145
|
+
lock_acquired = ::Hammertime.mutex.try_lock
|
146
|
+
if lock_acquired
|
147
|
+
yield
|
148
|
+
::Hammertime.mutex.unlock
|
149
|
+
else
|
150
|
+
fallback.call
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
131
154
|
end
|
132
155
|
|
133
156
|
unless ::Object < Hammertime
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hammertime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 25
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Avdi Grimm
|
@@ -9,39 +15,54 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
13
|
-
default_executable:
|
18
|
+
date: 2012-01-30 00:00:00 Z
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: ruby-debug
|
17
|
-
|
18
|
-
|
19
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
20
25
|
requirements:
|
21
26
|
- - ~>
|
22
27
|
- !ruby/object:Gem::Version
|
28
|
+
hash: 31
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 10
|
23
32
|
version: "0.10"
|
24
|
-
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: highline
|
27
|
-
|
28
|
-
|
29
|
-
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
30
40
|
requirements:
|
31
41
|
- - ~>
|
32
42
|
- !ruby/object:Gem::Version
|
43
|
+
hash: 5
|
44
|
+
segments:
|
45
|
+
- 1
|
46
|
+
- 5
|
33
47
|
version: "1.5"
|
34
|
-
|
48
|
+
type: :runtime
|
49
|
+
version_requirements: *id002
|
35
50
|
- !ruby/object:Gem::Dependency
|
36
51
|
name: rspec
|
37
|
-
|
38
|
-
|
39
|
-
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
40
55
|
requirements:
|
41
56
|
- - ">="
|
42
57
|
- !ruby/object:Gem::Version
|
58
|
+
hash: 13
|
59
|
+
segments:
|
60
|
+
- 1
|
61
|
+
- 2
|
62
|
+
- 9
|
43
63
|
version: 1.2.9
|
44
|
-
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
45
66
|
description: |
|
46
67
|
When this library is required, it replaces the default Ruby exception-raising
|
47
68
|
behavior. When an error is raised, the developer is presented with a menu
|
@@ -58,45 +79,49 @@ extra_rdoc_files:
|
|
58
79
|
- README.rdoc
|
59
80
|
files:
|
60
81
|
- .document
|
61
|
-
- .gitignore
|
62
82
|
- LICENSE
|
63
83
|
- README.rdoc
|
64
84
|
- Rakefile
|
65
85
|
- VERSION
|
66
86
|
- example.rb
|
87
|
+
- examples/loaderror.rb
|
67
88
|
- hammertime.gemspec
|
68
89
|
- lib/hammertime.rb
|
69
90
|
- spec/hammertime_spec.rb
|
70
91
|
- spec/spec.opts
|
71
92
|
- spec/spec_helper.rb
|
72
|
-
has_rdoc: true
|
73
93
|
homepage: http://github.com/avdi/hammertime
|
74
94
|
licenses: []
|
75
95
|
|
76
96
|
post_install_message:
|
77
|
-
rdoc_options:
|
78
|
-
|
97
|
+
rdoc_options: []
|
98
|
+
|
79
99
|
require_paths:
|
80
100
|
- lib
|
81
101
|
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
82
103
|
requirements:
|
83
104
|
- - ">="
|
84
105
|
- !ruby/object:Gem::Version
|
106
|
+
hash: 3
|
107
|
+
segments:
|
108
|
+
- 0
|
85
109
|
version: "0"
|
86
|
-
version:
|
87
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
88
112
|
requirements:
|
89
113
|
- - ">="
|
90
114
|
- !ruby/object:Gem::Version
|
115
|
+
hash: 3
|
116
|
+
segments:
|
117
|
+
- 0
|
91
118
|
version: "0"
|
92
|
-
version:
|
93
119
|
requirements: []
|
94
120
|
|
95
121
|
rubyforge_project:
|
96
|
-
rubygems_version: 1.
|
122
|
+
rubygems_version: 1.8.10
|
97
123
|
signing_key:
|
98
124
|
specification_version: 3
|
99
125
|
summary: Exception debugging console for Ruby
|
100
|
-
test_files:
|
101
|
-
|
102
|
-
- spec/spec_helper.rb
|
126
|
+
test_files: []
|
127
|
+
|