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.
Files changed (64) hide show
  1. checksums.yaml +5 -5
  2. data/.coveralls.yml +1 -0
  3. data/.github/workflows/ci.yml +130 -0
  4. data/.github/workflows/release.yml +64 -0
  5. data/.gitignore +10 -5
  6. data/.ruby-version +1 -0
  7. data/CHANGELOG.md +3 -0
  8. data/Gemfile +7 -7
  9. data/LICENSE.txt +1 -1
  10. data/README.md +103 -33
  11. data/better_errors.gemspec +26 -8
  12. data/gemfiles/pry010.gemfile +10 -0
  13. data/gemfiles/pry011.gemfile +9 -0
  14. data/gemfiles/pry09.gemfile +9 -0
  15. data/gemfiles/rack.gemfile +8 -0
  16. data/gemfiles/rack_boc.gemfile +9 -0
  17. data/gemfiles/rails42.gemfile +10 -0
  18. data/gemfiles/rails42_boc.gemfile +11 -0
  19. data/gemfiles/rails42_haml.gemfile +11 -0
  20. data/gemfiles/rails50.gemfile +9 -0
  21. data/gemfiles/rails50_boc.gemfile +10 -0
  22. data/gemfiles/rails50_haml.gemfile +10 -0
  23. data/gemfiles/rails51.gemfile +9 -0
  24. data/gemfiles/rails51_boc.gemfile +10 -0
  25. data/gemfiles/rails51_haml.gemfile +10 -0
  26. data/gemfiles/rails52.gemfile +9 -0
  27. data/gemfiles/rails52_boc.gemfile +10 -0
  28. data/gemfiles/rails52_haml.gemfile +10 -0
  29. data/gemfiles/rails60.gemfile +8 -0
  30. data/gemfiles/rails60_boc.gemfile +9 -0
  31. data/gemfiles/rails60_haml.gemfile +9 -0
  32. data/lib/better_errors/code_formatter/html.rb +1 -1
  33. data/lib/better_errors/code_formatter.rb +7 -7
  34. data/lib/better_errors/editor.rb +99 -0
  35. data/lib/better_errors/error_page.rb +83 -49
  36. data/lib/better_errors/exception_extension.rb +17 -0
  37. data/lib/better_errors/exception_hint.rb +29 -0
  38. data/lib/better_errors/inspectable_value.rb +45 -0
  39. data/lib/better_errors/middleware.rb +101 -21
  40. data/lib/better_errors/raised_exception.rb +89 -0
  41. data/lib/better_errors/repl/basic.rb +3 -3
  42. data/lib/better_errors/repl/pry.rb +20 -10
  43. data/lib/better_errors/repl.rb +6 -4
  44. data/lib/better_errors/stack_frame.rb +48 -71
  45. data/lib/better_errors/templates/main.erb +167 -94
  46. data/lib/better_errors/templates/text.erb +6 -3
  47. data/lib/better_errors/templates/variable_info.erb +33 -24
  48. data/lib/better_errors/version.rb +1 -1
  49. data/lib/better_errors.rb +35 -37
  50. metadata +150 -46
  51. data/.travis.yml +0 -6
  52. data/Rakefile +0 -4
  53. data/ext/mkrf_conf.rb +0 -11
  54. data/lib/better_errors/core_ext/exception.rb +0 -21
  55. data/spec/better_errors/code_formatter_spec.rb +0 -92
  56. data/spec/better_errors/error_page_spec.rb +0 -76
  57. data/spec/better_errors/middleware_spec.rb +0 -112
  58. data/spec/better_errors/repl/basic_spec.rb +0 -18
  59. data/spec/better_errors/repl/pry_spec.rb +0 -36
  60. data/spec/better_errors/repl/shared_examples.rb +0 -18
  61. data/spec/better_errors/stack_frame_spec.rb +0 -161
  62. data/spec/better_errors/support/my_source.rb +0 -20
  63. data/spec/better_errors_spec.rb +0 -73
  64. data/spec/spec_helper.rb +0 -7
data/lib/better_errors.rb CHANGED
@@ -1,23 +1,19 @@
1
1
  require "pp"
2
- require "erubis"
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/code_formatter"
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 a proc, which when called with a filename and line number argument,
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["/some/file", 123]
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
- POSSIBLE_EDITOR_PRESETS.each do |config|
100
- if config[:symbols].include?(editor)
101
- return self.editor = config[:url]
102
- end
103
- end
104
-
105
- if editor.is_a? String
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
- if editor.respond_to? :call
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/charliesome/better_errors/issues
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
- POSSIBLE_EDITOR_PRESETS.detect(-> { {} }) { |config|
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
- if Gem::Dependency.new("binding_of_caller", "0.7.2").matching_specs.any?
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
- else
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: 1.0.0
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: 2013-09-08 00:00:00.000000000 Z
11
+ date: 2020-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: erubis
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.6.6
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: 2.6.6
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
- - .gitignore
52
- - .travis.yml
53
- - .yardopts
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
- - ext/mkrf_conf.rb
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/core_ext/exception.rb
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
- - spec/better_errors/code_formatter_spec.rb
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: 1.9.2
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
- rubyforge_project:
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
@@ -1,6 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.0.0
4
- - 1.9.3
5
- - 1.9.2
6
- - jruby-1.7.4
data/Rakefile DELETED
@@ -1,4 +0,0 @@
1
- require "bundler/gem_tasks"
2
- task :default => :spec
3
- task :test => :spec
4
- task :spec do sh 'bundle exec rspec' end
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