better_errors 1.0.0 → 2.9.1
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 +5 -5
- data/.coveralls.yml +1 -0
- data/.github/workflows/ci.yml +130 -0
- data/.github/workflows/release.yml +64 -0
- data/.gitignore +10 -5
- data/.ruby-version +1 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +7 -7
- data/LICENSE.txt +1 -1
- data/README.md +103 -33
- data/better_errors.gemspec +26 -8
- data/gemfiles/pry010.gemfile +10 -0
- data/gemfiles/pry011.gemfile +9 -0
- data/gemfiles/pry09.gemfile +9 -0
- data/gemfiles/rack.gemfile +8 -0
- data/gemfiles/rack_boc.gemfile +9 -0
- data/gemfiles/rails42.gemfile +10 -0
- data/gemfiles/rails42_boc.gemfile +11 -0
- data/gemfiles/rails42_haml.gemfile +11 -0
- data/gemfiles/rails50.gemfile +9 -0
- data/gemfiles/rails50_boc.gemfile +10 -0
- data/gemfiles/rails50_haml.gemfile +10 -0
- data/gemfiles/rails51.gemfile +9 -0
- data/gemfiles/rails51_boc.gemfile +10 -0
- data/gemfiles/rails51_haml.gemfile +10 -0
- data/gemfiles/rails52.gemfile +9 -0
- data/gemfiles/rails52_boc.gemfile +10 -0
- data/gemfiles/rails52_haml.gemfile +10 -0
- data/gemfiles/rails60.gemfile +8 -0
- data/gemfiles/rails60_boc.gemfile +9 -0
- data/gemfiles/rails60_haml.gemfile +9 -0
- data/lib/better_errors/code_formatter/html.rb +1 -1
- data/lib/better_errors/code_formatter.rb +7 -7
- data/lib/better_errors/editor.rb +99 -0
- data/lib/better_errors/error_page.rb +83 -49
- data/lib/better_errors/exception_extension.rb +17 -0
- data/lib/better_errors/exception_hint.rb +29 -0
- data/lib/better_errors/inspectable_value.rb +45 -0
- data/lib/better_errors/middleware.rb +101 -21
- data/lib/better_errors/raised_exception.rb +89 -0
- data/lib/better_errors/repl/basic.rb +3 -3
- data/lib/better_errors/repl/pry.rb +20 -10
- data/lib/better_errors/repl.rb +6 -4
- data/lib/better_errors/stack_frame.rb +48 -71
- data/lib/better_errors/templates/main.erb +167 -94
- data/lib/better_errors/templates/text.erb +6 -3
- data/lib/better_errors/templates/variable_info.erb +33 -24
- data/lib/better_errors/version.rb +1 -1
- data/lib/better_errors.rb +35 -37
- metadata +150 -46
- data/.travis.yml +0 -6
- data/Rakefile +0 -4
- data/ext/mkrf_conf.rb +0 -11
- data/lib/better_errors/core_ext/exception.rb +0 -21
- data/spec/better_errors/code_formatter_spec.rb +0 -92
- data/spec/better_errors/error_page_spec.rb +0 -76
- data/spec/better_errors/middleware_spec.rb +0 -112
- data/spec/better_errors/repl/basic_spec.rb +0 -18
- data/spec/better_errors/repl/pry_spec.rb +0 -36
- data/spec/better_errors/repl/shared_examples.rb +0 -18
- data/spec/better_errors/stack_frame_spec.rb +0 -161
- data/spec/better_errors/support/my_source.rb +0 -20
- data/spec/better_errors_spec.rb +0 -73
- data/spec/spec_helper.rb +0 -7
data/lib/better_errors.rb
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
require "pp"
|
|
2
|
-
require "
|
|
2
|
+
require "erubi"
|
|
3
3
|
require "coderay"
|
|
4
4
|
require "uri"
|
|
5
5
|
|
|
6
6
|
require "better_errors/version"
|
|
7
|
+
require "better_errors/code_formatter"
|
|
8
|
+
require "better_errors/inspectable_value"
|
|
7
9
|
require "better_errors/error_page"
|
|
8
|
-
require "better_errors/stack_frame"
|
|
9
10
|
require "better_errors/middleware"
|
|
10
|
-
require "better_errors/
|
|
11
|
+
require "better_errors/raised_exception"
|
|
11
12
|
require "better_errors/repl"
|
|
13
|
+
require "better_errors/stack_frame"
|
|
14
|
+
require "better_errors/editor"
|
|
12
15
|
|
|
13
16
|
module BetterErrors
|
|
14
|
-
POSSIBLE_EDITOR_PRESETS = [
|
|
15
|
-
{ symbols: [:emacs, :emacsclient], sniff: /emacs/i, url: "emacs://open?url=file://%{file}&line=%{line}" },
|
|
16
|
-
{ symbols: [:macvim, :mvim], sniff: /vim/i, url: proc { |file, line| "mvim://open?url=file://#{file}&line=#{line}" } },
|
|
17
|
-
{ symbols: [:sublime, :subl, :st], sniff: /subl/i, url: "subl://open?url=file://%{file}&line=%{line}" },
|
|
18
|
-
{ symbols: [:textmate, :txmt, :tm], sniff: /mate/i, url: "txmt://open?url=file://%{file}&line=%{line}" },
|
|
19
|
-
]
|
|
20
|
-
|
|
21
17
|
class << self
|
|
22
18
|
# The path to the root of the application. Better Errors uses this property
|
|
23
19
|
# to determine if a file in a backtrace should be considered an application
|
|
@@ -43,20 +39,32 @@ module BetterErrors
|
|
|
43
39
|
# The ignored instance variables.
|
|
44
40
|
# @return [Array]
|
|
45
41
|
attr_accessor :ignored_instance_variables
|
|
42
|
+
|
|
43
|
+
# The maximum variable payload size. If variable.inspect exceeds this,
|
|
44
|
+
# the variable won't be returned.
|
|
45
|
+
# @return int
|
|
46
|
+
attr_accessor :maximum_variable_inspect_size
|
|
47
|
+
|
|
48
|
+
# List of classes that are excluded from inspection.
|
|
49
|
+
# @return [Array]
|
|
50
|
+
attr_accessor :ignored_classes
|
|
46
51
|
end
|
|
47
52
|
@ignored_instance_variables = []
|
|
53
|
+
@maximum_variable_inspect_size = 100_000
|
|
54
|
+
@ignored_classes = ['ActionDispatch::Request', 'ActionDispatch::Response']
|
|
48
55
|
|
|
49
|
-
# Returns
|
|
56
|
+
# Returns an object which responds to #url, which when called with
|
|
57
|
+
# a filename and line number argument,
|
|
50
58
|
# returns a URL to open the filename and line in the selected editor.
|
|
51
59
|
#
|
|
52
60
|
# Generates TextMate URLs by default.
|
|
53
61
|
#
|
|
54
|
-
# BetterErrors.editor
|
|
62
|
+
# BetterErrors.editor.url("/some/file", 123)
|
|
55
63
|
# # => txmt://open?url=file:///some/file&line=123
|
|
56
64
|
#
|
|
57
65
|
# @return [Proc]
|
|
58
66
|
def self.editor
|
|
59
|
-
@editor
|
|
67
|
+
@editor ||= default_editor
|
|
60
68
|
end
|
|
61
69
|
|
|
62
70
|
# Configures how Better Errors generates open-in-editor URLs.
|
|
@@ -67,6 +75,7 @@ module BetterErrors
|
|
|
67
75
|
# * `:textmate`, `:txmt`, `:tm`
|
|
68
76
|
# * `:sublime`, `:subl`, `:st`
|
|
69
77
|
# * `:macvim`
|
|
78
|
+
# * `:atom`
|
|
70
79
|
#
|
|
71
80
|
# @param [Symbol] sym
|
|
72
81
|
#
|
|
@@ -96,27 +105,22 @@ module BetterErrors
|
|
|
96
105
|
# @param [Proc] proc
|
|
97
106
|
#
|
|
98
107
|
def self.editor=(editor)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
self.editor = proc { |file, line| editor % { file: URI.encode_www_form_component(file), line: line } }
|
|
108
|
+
if editor.is_a? Symbol
|
|
109
|
+
@editor = Editor.editor_from_symbol(editor)
|
|
110
|
+
raise(ArgumentError, "Symbol #{editor} is not a symbol in the list of supported errors.") unless editor
|
|
111
|
+
elsif editor.is_a? String
|
|
112
|
+
@editor = Editor.for_formatting_string(editor)
|
|
113
|
+
elsif editor.respond_to? :call
|
|
114
|
+
@editor = Editor.for_proc(editor)
|
|
107
115
|
else
|
|
108
|
-
|
|
109
|
-
@editor = editor
|
|
110
|
-
else
|
|
111
|
-
raise TypeError, "Expected editor to be a valid editor key, a format string or a callable."
|
|
112
|
-
end
|
|
116
|
+
raise ArgumentError, "Expected editor to be a valid editor key, a format string or a callable."
|
|
113
117
|
end
|
|
114
118
|
end
|
|
115
119
|
|
|
116
120
|
# Enables experimental Pry support in the inline REPL
|
|
117
121
|
#
|
|
118
122
|
# If you encounter problems while using Pry, *please* file a bug report at
|
|
119
|
-
# https://github.com/
|
|
123
|
+
# https://github.com/BetterErrors/better_errors/issues
|
|
120
124
|
def self.use_pry!
|
|
121
125
|
REPL::PROVIDERS.unshift const: :Pry, impl: "better_errors/repl/pry"
|
|
122
126
|
end
|
|
@@ -126,22 +130,16 @@ module BetterErrors
|
|
|
126
130
|
#
|
|
127
131
|
# @return [Symbol]
|
|
128
132
|
def self.default_editor
|
|
129
|
-
|
|
130
|
-
ENV["EDITOR"] =~ config[:sniff]
|
|
131
|
-
}[:url] || :textmate
|
|
133
|
+
Editor.default_editor
|
|
132
134
|
end
|
|
133
|
-
|
|
134
|
-
BetterErrors.editor = default_editor
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
|
|
138
|
-
gem "binding_of_caller", "0.7.2"
|
|
137
|
+
begin
|
|
139
138
|
require "binding_of_caller"
|
|
139
|
+
require "better_errors/exception_extension"
|
|
140
140
|
BetterErrors.binding_of_caller_available = true
|
|
141
|
-
|
|
141
|
+
rescue LoadError
|
|
142
142
|
BetterErrors.binding_of_caller_available = false
|
|
143
143
|
end
|
|
144
144
|
|
|
145
|
-
require "better_errors/core_ext/exception"
|
|
146
|
-
|
|
147
145
|
require "better_errors/rails" if defined? Rails::Railtie
|
metadata
CHANGED
|
@@ -1,70 +1,193 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: better_errors
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.9.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Charlie Somerville
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-11-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: rake
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: '10.0'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '10.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: rspec
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '3.5'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '3.5'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: rspec-html-matchers
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rspec-its
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: yard
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: kramdown
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: 2.0.0
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - ">"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: 2.0.0
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: erubi
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - ">="
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: 1.0.0
|
|
20
104
|
type: :runtime
|
|
21
105
|
prerelease: false
|
|
22
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
107
|
requirements:
|
|
24
|
-
- -
|
|
108
|
+
- - ">="
|
|
25
109
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
110
|
+
version: 1.0.0
|
|
27
111
|
- !ruby/object:Gem::Dependency
|
|
28
112
|
name: coderay
|
|
29
113
|
requirement: !ruby/object:Gem::Requirement
|
|
30
114
|
requirements:
|
|
31
|
-
- -
|
|
115
|
+
- - ">="
|
|
32
116
|
- !ruby/object:Gem::Version
|
|
33
117
|
version: 1.0.0
|
|
34
118
|
type: :runtime
|
|
35
119
|
prerelease: false
|
|
36
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
121
|
requirements:
|
|
38
|
-
- -
|
|
122
|
+
- - ">="
|
|
39
123
|
- !ruby/object:Gem::Version
|
|
40
124
|
version: 1.0.0
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: rack
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - ">="
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: 0.9.0
|
|
132
|
+
type: :runtime
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - ">="
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: 0.9.0
|
|
41
139
|
description: Provides a better error page for Rails and other Rack apps. Includes
|
|
42
140
|
source code inspection, a live REPL and local/instance variable inspection for all
|
|
43
141
|
stack frames.
|
|
44
142
|
email:
|
|
45
143
|
- charlie@charliesomerville.com
|
|
46
144
|
executables: []
|
|
47
|
-
extensions:
|
|
48
|
-
- ext/mkrf_conf.rb
|
|
145
|
+
extensions: []
|
|
49
146
|
extra_rdoc_files: []
|
|
50
147
|
files:
|
|
51
|
-
- .
|
|
52
|
-
- .
|
|
53
|
-
- .
|
|
148
|
+
- ".coveralls.yml"
|
|
149
|
+
- ".github/workflows/ci.yml"
|
|
150
|
+
- ".github/workflows/release.yml"
|
|
151
|
+
- ".gitignore"
|
|
152
|
+
- ".ruby-version"
|
|
153
|
+
- ".yardopts"
|
|
154
|
+
- CHANGELOG.md
|
|
54
155
|
- Gemfile
|
|
55
156
|
- LICENSE.txt
|
|
56
157
|
- README.md
|
|
57
|
-
- Rakefile
|
|
58
158
|
- better_errors.gemspec
|
|
59
|
-
-
|
|
159
|
+
- gemfiles/pry010.gemfile
|
|
160
|
+
- gemfiles/pry011.gemfile
|
|
161
|
+
- gemfiles/pry09.gemfile
|
|
162
|
+
- gemfiles/rack.gemfile
|
|
163
|
+
- gemfiles/rack_boc.gemfile
|
|
164
|
+
- gemfiles/rails42.gemfile
|
|
165
|
+
- gemfiles/rails42_boc.gemfile
|
|
166
|
+
- gemfiles/rails42_haml.gemfile
|
|
167
|
+
- gemfiles/rails50.gemfile
|
|
168
|
+
- gemfiles/rails50_boc.gemfile
|
|
169
|
+
- gemfiles/rails50_haml.gemfile
|
|
170
|
+
- gemfiles/rails51.gemfile
|
|
171
|
+
- gemfiles/rails51_boc.gemfile
|
|
172
|
+
- gemfiles/rails51_haml.gemfile
|
|
173
|
+
- gemfiles/rails52.gemfile
|
|
174
|
+
- gemfiles/rails52_boc.gemfile
|
|
175
|
+
- gemfiles/rails52_haml.gemfile
|
|
176
|
+
- gemfiles/rails60.gemfile
|
|
177
|
+
- gemfiles/rails60_boc.gemfile
|
|
178
|
+
- gemfiles/rails60_haml.gemfile
|
|
60
179
|
- lib/better_errors.rb
|
|
61
180
|
- lib/better_errors/code_formatter.rb
|
|
62
181
|
- lib/better_errors/code_formatter/html.rb
|
|
63
182
|
- lib/better_errors/code_formatter/text.rb
|
|
64
|
-
- lib/better_errors/
|
|
183
|
+
- lib/better_errors/editor.rb
|
|
65
184
|
- lib/better_errors/error_page.rb
|
|
185
|
+
- lib/better_errors/exception_extension.rb
|
|
186
|
+
- lib/better_errors/exception_hint.rb
|
|
187
|
+
- lib/better_errors/inspectable_value.rb
|
|
66
188
|
- lib/better_errors/middleware.rb
|
|
67
189
|
- lib/better_errors/rails.rb
|
|
190
|
+
- lib/better_errors/raised_exception.rb
|
|
68
191
|
- lib/better_errors/repl.rb
|
|
69
192
|
- lib/better_errors/repl/basic.rb
|
|
70
193
|
- lib/better_errors/repl/pry.rb
|
|
@@ -73,49 +196,30 @@ files:
|
|
|
73
196
|
- lib/better_errors/templates/text.erb
|
|
74
197
|
- lib/better_errors/templates/variable_info.erb
|
|
75
198
|
- lib/better_errors/version.rb
|
|
76
|
-
|
|
77
|
-
- spec/better_errors/error_page_spec.rb
|
|
78
|
-
- spec/better_errors/middleware_spec.rb
|
|
79
|
-
- spec/better_errors/repl/basic_spec.rb
|
|
80
|
-
- spec/better_errors/repl/pry_spec.rb
|
|
81
|
-
- spec/better_errors/repl/shared_examples.rb
|
|
82
|
-
- spec/better_errors/stack_frame_spec.rb
|
|
83
|
-
- spec/better_errors/support/my_source.rb
|
|
84
|
-
- spec/better_errors_spec.rb
|
|
85
|
-
- spec/spec_helper.rb
|
|
86
|
-
homepage: https://github.com/charliesome/better_errors
|
|
199
|
+
homepage: https://github.com/BetterErrors/better_errors
|
|
87
200
|
licenses:
|
|
88
201
|
- MIT
|
|
89
|
-
metadata:
|
|
202
|
+
metadata:
|
|
203
|
+
changelog_uri: https://github.com/BetterErrors/better_errors/releases
|
|
204
|
+
source_code_uri: https://github.com/BetterErrors/better_errors
|
|
205
|
+
bug_tracker_uri: https://github.com/BetterErrors/better_errors/issues
|
|
90
206
|
post_install_message:
|
|
91
207
|
rdoc_options: []
|
|
92
208
|
require_paths:
|
|
93
209
|
- lib
|
|
94
210
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
95
211
|
requirements:
|
|
96
|
-
- -
|
|
212
|
+
- - ">="
|
|
97
213
|
- !ruby/object:Gem::Version
|
|
98
|
-
version:
|
|
214
|
+
version: 2.0.0
|
|
99
215
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
216
|
requirements:
|
|
101
|
-
- -
|
|
217
|
+
- - ">="
|
|
102
218
|
- !ruby/object:Gem::Version
|
|
103
219
|
version: '0'
|
|
104
220
|
requirements: []
|
|
105
|
-
|
|
106
|
-
rubygems_version: 2.0.3
|
|
221
|
+
rubygems_version: 3.1.4
|
|
107
222
|
signing_key:
|
|
108
223
|
specification_version: 4
|
|
109
224
|
summary: Better error page for Rails and other Rack apps
|
|
110
|
-
test_files:
|
|
111
|
-
- spec/better_errors/code_formatter_spec.rb
|
|
112
|
-
- spec/better_errors/error_page_spec.rb
|
|
113
|
-
- spec/better_errors/middleware_spec.rb
|
|
114
|
-
- spec/better_errors/repl/basic_spec.rb
|
|
115
|
-
- spec/better_errors/repl/pry_spec.rb
|
|
116
|
-
- spec/better_errors/repl/shared_examples.rb
|
|
117
|
-
- spec/better_errors/stack_frame_spec.rb
|
|
118
|
-
- spec/better_errors/support/my_source.rb
|
|
119
|
-
- spec/better_errors_spec.rb
|
|
120
|
-
- spec/spec_helper.rb
|
|
121
|
-
has_rdoc:
|
|
225
|
+
test_files: []
|
data/.travis.yml
DELETED
data/Rakefile
DELETED
data/ext/mkrf_conf.rb
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
require 'rubygems/dependency_installer'
|
|
2
|
-
|
|
3
|
-
gem = Gem::DependencyInstaller.new
|
|
4
|
-
|
|
5
|
-
if ["rbx", "ruby"].include?(RUBY_ENGINE)
|
|
6
|
-
# This MUST match the version specified in lib/better_errors.rb, or else
|
|
7
|
-
# weird shit will happen.
|
|
8
|
-
if Gem::Dependency.new("binding_of_caller", "0.7.2").matching_specs.empty?
|
|
9
|
-
gem.install "binding_of_caller", "0.7.2"
|
|
10
|
-
end
|
|
11
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
class Exception
|
|
2
|
-
original_set_backtrace = instance_method(:set_backtrace)
|
|
3
|
-
|
|
4
|
-
if BetterErrors.binding_of_caller_available?
|
|
5
|
-
define_method :set_backtrace do |*args|
|
|
6
|
-
unless Thread.current[:__better_errors_exception_lock]
|
|
7
|
-
Thread.current[:__better_errors_exception_lock] = true
|
|
8
|
-
begin
|
|
9
|
-
@__better_errors_bindings_stack = binding.callers.drop(1)
|
|
10
|
-
ensure
|
|
11
|
-
Thread.current[:__better_errors_exception_lock] = false
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
original_set_backtrace.bind(self).call(*args)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def __better_errors_bindings_stack
|
|
19
|
-
@__better_errors_bindings_stack || []
|
|
20
|
-
end
|
|
21
|
-
end
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
module BetterErrors
|
|
4
|
-
describe CodeFormatter do
|
|
5
|
-
let(:filename) { File.expand_path("../support/my_source.rb", __FILE__) }
|
|
6
|
-
|
|
7
|
-
let(:formatter) { CodeFormatter.new(filename, 8) }
|
|
8
|
-
|
|
9
|
-
it "picks an appropriate scanner" do
|
|
10
|
-
formatter.coderay_scanner.should == :ruby
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it "shows 5 lines of context" do
|
|
14
|
-
formatter.line_range.should == (3..13)
|
|
15
|
-
|
|
16
|
-
formatter.context_lines.should == [
|
|
17
|
-
"three\n",
|
|
18
|
-
"four\n",
|
|
19
|
-
"five\n",
|
|
20
|
-
"six\n",
|
|
21
|
-
"seven\n",
|
|
22
|
-
"eight\n",
|
|
23
|
-
"nine\n",
|
|
24
|
-
"ten\n",
|
|
25
|
-
"eleven\n",
|
|
26
|
-
"twelve\n",
|
|
27
|
-
"thirteen\n"
|
|
28
|
-
]
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
it "works when the line is right on the edge" do
|
|
32
|
-
formatter = CodeFormatter.new(filename, 20)
|
|
33
|
-
formatter.line_range.should == (15..20)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
describe CodeFormatter::HTML do
|
|
37
|
-
it "highlights the erroring line" do
|
|
38
|
-
formatter = CodeFormatter::HTML.new(filename, 8)
|
|
39
|
-
formatter.output.should =~ /highlight.*eight/
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "works when the line is right on the edge" do
|
|
43
|
-
formatter = CodeFormatter::HTML.new(filename, 20)
|
|
44
|
-
formatter.output.should_not == formatter.source_unavailable
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it "doesn't barf when the lines don't make any sense" do
|
|
48
|
-
formatter = CodeFormatter::HTML.new(filename, 999)
|
|
49
|
-
formatter.output.should == formatter.source_unavailable
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
it "doesn't barf when the file doesn't exist" do
|
|
53
|
-
formatter = CodeFormatter::HTML.new("fkdguhskd7e l", 1)
|
|
54
|
-
formatter.output.should == formatter.source_unavailable
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
describe CodeFormatter::Text do
|
|
59
|
-
it "highlights the erroring line" do
|
|
60
|
-
formatter = CodeFormatter::Text.new(filename, 8)
|
|
61
|
-
formatter.output.should == <<-TEXT.gsub(/^ /, "")
|
|
62
|
-
3 three
|
|
63
|
-
4 four
|
|
64
|
-
5 five
|
|
65
|
-
6 six
|
|
66
|
-
7 seven
|
|
67
|
-
> 8 eight
|
|
68
|
-
9 nine
|
|
69
|
-
10 ten
|
|
70
|
-
11 eleven
|
|
71
|
-
12 twelve
|
|
72
|
-
13 thirteen
|
|
73
|
-
TEXT
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
it "works when the line is right on the edge" do
|
|
77
|
-
formatter = CodeFormatter::Text.new(filename, 20)
|
|
78
|
-
formatter.output.should_not == formatter.source_unavailable
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
it "doesn't barf when the lines don't make any sense" do
|
|
82
|
-
formatter = CodeFormatter::Text.new(filename, 999)
|
|
83
|
-
formatter.output.should == formatter.source_unavailable
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it "doesn't barf when the file doesn't exist" do
|
|
87
|
-
formatter = CodeFormatter::Text.new("fkdguhskd7e l", 1)
|
|
88
|
-
formatter.output.should == formatter.source_unavailable
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
require "spec_helper"
|
|
2
|
-
|
|
3
|
-
module BetterErrors
|
|
4
|
-
describe ErrorPage do
|
|
5
|
-
let!(:exception) { raise ZeroDivisionError, "you divided by zero you silly goose!" rescue $! }
|
|
6
|
-
|
|
7
|
-
let(:error_page) { ErrorPage.new exception, { "PATH_INFO" => "/some/path" } }
|
|
8
|
-
|
|
9
|
-
let(:response) { error_page.render }
|
|
10
|
-
|
|
11
|
-
let(:empty_binding) {
|
|
12
|
-
local_a = :value_for_local_a
|
|
13
|
-
local_b = :value_for_local_b
|
|
14
|
-
|
|
15
|
-
@inst_c = :value_for_inst_c
|
|
16
|
-
@inst_d = :value_for_inst_d
|
|
17
|
-
|
|
18
|
-
binding
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
it "includes the error message" do
|
|
22
|
-
response.should include("you divided by zero you silly goose!")
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
it "includes the request path" do
|
|
26
|
-
response.should include("/some/path")
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
it "includes the exception class" do
|
|
30
|
-
response.should include("ZeroDivisionError")
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
context "variable inspection" do
|
|
34
|
-
let(:exception) { empty_binding.eval("raise") rescue $! }
|
|
35
|
-
|
|
36
|
-
if BetterErrors.binding_of_caller_available?
|
|
37
|
-
it "shows local variables" do
|
|
38
|
-
html = error_page.do_variables("index" => 0)[:html]
|
|
39
|
-
html.should include("local_a")
|
|
40
|
-
html.should include(":value_for_local_a")
|
|
41
|
-
html.should include("local_b")
|
|
42
|
-
html.should include(":value_for_local_b")
|
|
43
|
-
end
|
|
44
|
-
else
|
|
45
|
-
it "tells the user to add binding_of_caller to their gemfile to get fancy features" do
|
|
46
|
-
html = error_page.do_variables("index" => 0)[:html]
|
|
47
|
-
html.should include(%{gem "binding_of_caller"})
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "shows instance variables" do
|
|
52
|
-
html = error_page.do_variables("index" => 0)[:html]
|
|
53
|
-
html.should include("inst_c")
|
|
54
|
-
html.should include(":value_for_inst_c")
|
|
55
|
-
html.should include("inst_d")
|
|
56
|
-
html.should include(":value_for_inst_d")
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "shows filter instance variables" do
|
|
60
|
-
BetterErrors.stub(:ignored_instance_variables).and_return([ :@inst_d ])
|
|
61
|
-
html = error_page.do_variables("index" => 0)[:html]
|
|
62
|
-
html.should include("inst_c")
|
|
63
|
-
html.should include(":value_for_inst_c")
|
|
64
|
-
html.should_not include('<td class="name">@inst_d</td>')
|
|
65
|
-
html.should_not include("<pre>:value_for_inst_d</pre>")
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "doesn't die if the source file is not a real filename" do
|
|
70
|
-
exception.stub(:backtrace).and_return([
|
|
71
|
-
"<internal:prelude>:10:in `spawn_rack_application'"
|
|
72
|
-
])
|
|
73
|
-
response.should include("Source unavailable")
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
end
|