better_errors 0.9.0 → 1.0.0.rc1

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.

Potentially problematic release.


This version of better_errors might be problematic. Click here for more details.

@@ -3,21 +3,21 @@ require "spec_helper"
3
3
  module BetterErrors
4
4
  describe StackFrame do
5
5
  context "#application?" do
6
- it "should be true for application filenames" do
7
- BetterErrors.stub!(:application_root).and_return("/abc/xyz")
6
+ it "is true for application filenames" do
7
+ BetterErrors.stub(:application_root).and_return("/abc/xyz")
8
8
  frame = StackFrame.new("/abc/xyz/app/controllers/crap_controller.rb", 123, "index")
9
9
 
10
10
  frame.application?.should be_true
11
11
  end
12
12
 
13
- it "should be false for everything else" do
14
- BetterErrors.stub!(:application_root).and_return("/abc/xyz")
13
+ it "is false for everything else" do
14
+ BetterErrors.stub(:application_root).and_return("/abc/xyz")
15
15
  frame = StackFrame.new("/abc/nope", 123, "foo")
16
16
 
17
17
  frame.application?.should be_false
18
18
  end
19
19
 
20
- it "should not care if no application_root is set" do
20
+ it "doesn't care if no application_root is set" do
21
21
  frame = StackFrame.new("/abc/xyz/app/controllers/crap_controller.rb", 123, "index")
22
22
 
23
23
  frame.application?.should be_false
@@ -25,15 +25,15 @@ module BetterErrors
25
25
  end
26
26
 
27
27
  context "#gem?" do
28
- it "should be true for gem filenames" do
29
- Gem.stub!(:path).and_return(["/abc/xyz"])
28
+ it "is true for gem filenames" do
29
+ Gem.stub(:path).and_return(["/abc/xyz"])
30
30
  frame = StackFrame.new("/abc/xyz/gems/whatever-1.2.3/lib/whatever.rb", 123, "foo")
31
31
 
32
32
  frame.gem?.should be_true
33
33
  end
34
34
 
35
- it "should be false for everything else" do
36
- Gem.stub!(:path).and_return(["/abc/xyz"])
35
+ it "is false for everything else" do
36
+ Gem.stub(:path).and_return(["/abc/xyz"])
37
37
  frame = StackFrame.new("/abc/nope", 123, "foo")
38
38
 
39
39
  frame.gem?.should be_false
@@ -41,8 +41,8 @@ module BetterErrors
41
41
  end
42
42
 
43
43
  context "#application_path" do
44
- it "should chop off the application root" do
45
- BetterErrors.stub!(:application_root).and_return("/abc/xyz")
44
+ it "chops off the application root" do
45
+ BetterErrors.stub(:application_root).and_return("/abc/xyz")
46
46
  frame = StackFrame.new("/abc/xyz/app/controllers/crap_controller.rb", 123, "index")
47
47
 
48
48
  frame.application_path.should == "app/controllers/crap_controller.rb"
@@ -50,16 +50,16 @@ module BetterErrors
50
50
  end
51
51
 
52
52
  context "#gem_path" do
53
- it "should chop of the gem path and stick (gem) there" do
54
- Gem.stub!(:path).and_return(["/abc/xyz"])
53
+ it "chops of the gem path and stick (gem) there" do
54
+ Gem.stub(:path).and_return(["/abc/xyz"])
55
55
  frame = StackFrame.new("/abc/xyz/gems/whatever-1.2.3/lib/whatever.rb", 123, "foo")
56
56
 
57
57
  frame.gem_path.should == "whatever (1.2.3) lib/whatever.rb"
58
58
  end
59
59
 
60
- it "should prioritize gem path over application path" do
61
- BetterErrors.stub!(:application_root).and_return("/abc/xyz")
62
- Gem.stub!(:path).and_return(["/abc/xyz/vendor"])
60
+ it "prioritizes gem path over application path" do
61
+ BetterErrors.stub(:application_root).and_return("/abc/xyz")
62
+ Gem.stub(:path).and_return(["/abc/xyz/vendor"])
63
63
  frame = StackFrame.new("/abc/xyz/vendor/gems/whatever-1.2.3/lib/whatever.rb", 123, "foo")
64
64
 
65
65
  frame.gem_path.should == "whatever (1.2.3) lib/whatever.rb"
@@ -67,54 +67,95 @@ module BetterErrors
67
67
  end
68
68
 
69
69
  context "#pretty_path" do
70
- it "should return #application_path for application paths" do
71
- BetterErrors.stub!(:application_root).and_return("/abc/xyz")
70
+ it "returns #application_path for application paths" do
71
+ BetterErrors.stub(:application_root).and_return("/abc/xyz")
72
72
  frame = StackFrame.new("/abc/xyz/app/controllers/crap_controller.rb", 123, "index")
73
73
  frame.pretty_path.should == frame.application_path
74
74
  end
75
75
 
76
- it "should return #gem_path for gem paths" do
77
- Gem.stub!(:path).and_return(["/abc/xyz"])
76
+ it "returns #gem_path for gem paths" do
77
+ Gem.stub(:path).and_return(["/abc/xyz"])
78
78
  frame = StackFrame.new("/abc/xyz/gems/whatever-1.2.3/lib/whatever.rb", 123, "foo")
79
79
 
80
80
  frame.pretty_path.should == frame.gem_path
81
81
  end
82
82
  end
83
83
 
84
- it "should special case SyntaxErrors" do
85
- syntax_error = SyntaxError.allocate
86
- Exception.instance_method(:initialize).bind(syntax_error).call("my_file.rb:123: you wrote bad ruby!")
84
+ it "special cases SyntaxErrors" do
85
+ begin
86
+ eval(%{ raise SyntaxError, "you wrote bad ruby!" }, nil, "my_file.rb", 123)
87
+ rescue SyntaxError => syntax_error
88
+ end
87
89
  frames = StackFrame.from_exception(syntax_error)
88
90
  frames.first.filename.should == "my_file.rb"
89
91
  frames.first.line.should == 123
90
92
  end
91
93
 
92
- it "should not blow up if no method name is given" do
94
+ it "doesn't blow up if no method name is given" do
93
95
  error = StandardError.allocate
94
96
 
95
- error.stub!(:backtrace).and_return(["foo.rb:123"])
97
+ error.stub(:backtrace).and_return(["foo.rb:123"])
96
98
  frames = StackFrame.from_exception(error)
97
99
  frames.first.filename.should == "foo.rb"
98
100
  frames.first.line.should == 123
99
101
 
100
- error.stub!(:backtrace).and_return(["foo.rb:123: this is an error message"])
102
+ error.stub(:backtrace).and_return(["foo.rb:123: this is an error message"])
101
103
  frames = StackFrame.from_exception(error)
102
104
  frames.first.filename.should == "foo.rb"
103
105
  frames.first.line.should == 123
104
106
  end
105
107
 
106
- it "should ignore a backtrace line if its format doesn't make any sense at all" do
108
+ it "ignores a backtrace line if its format doesn't make any sense at all" do
107
109
  error = StandardError.allocate
108
- error.stub!(:backtrace).and_return(["foo.rb:123:in `foo'", "C:in `find'", "bar.rb:123:in `bar'"])
110
+ error.stub(:backtrace).and_return(["foo.rb:123:in `foo'", "C:in `find'", "bar.rb:123:in `bar'"])
109
111
  frames = StackFrame.from_exception(error)
110
112
  frames.count.should == 2
111
113
  end
112
114
 
113
- it "should not blow up if a filename contains a colon" do
115
+ it "doesn't blow up if a filename contains a colon" do
114
116
  error = StandardError.allocate
115
- error.stub!(:backtrace).and_return(["crap:filename.rb:123"])
117
+ error.stub(:backtrace).and_return(["crap:filename.rb:123"])
116
118
  frames = StackFrame.from_exception(error)
117
119
  frames.first.filename.should == "crap:filename.rb"
118
120
  end
121
+
122
+ it "doesn't blow up with a BasicObject as frame binding" do
123
+ obj = BasicObject.new
124
+ def obj.my_binding
125
+ ::Kernel.binding
126
+ end
127
+ frame = StackFrame.new("/abc/xyz/app/controllers/crap_controller.rb", 123, "index", obj.my_binding)
128
+ if RUBY_VERSION >= "2.0.0"
129
+ frame.class_name.should == 'BasicObject'
130
+ else
131
+ frame.class_name.should be_nil
132
+ end
133
+ end
134
+
135
+ it "sets method names properly" do
136
+ obj = "string"
137
+ def obj.my_method
138
+ begin
139
+ raise "foo"
140
+ rescue => err
141
+ err
142
+ end
143
+ end
144
+
145
+ frame = StackFrame.from_exception(obj.my_method).first
146
+ if RUBY_VERSION >= "2.0.0"
147
+ frame.method_name.should == "#my_method"
148
+ frame.class_name.should == "String"
149
+ else
150
+ frame.method_name.should == "my_method"
151
+ frame.class_name.should be_nil
152
+ end
153
+ end
154
+
155
+ if RUBY_ENGINE == "java"
156
+ it "doesn't blow up on a native Java exception" do
157
+ expect { StackFrame.from_exception(java.lang.Exception.new) }.to_not raise_error
158
+ end
159
+ end
119
160
  end
120
161
  end
@@ -2,12 +2,72 @@ require "spec_helper"
2
2
 
3
3
  describe BetterErrors do
4
4
  context ".editor" do
5
- it "should default to textmate" do
5
+ it "defaults to textmate" do
6
6
  subject.editor["foo.rb", 123].should == "txmt://open?url=file://foo.rb&line=123"
7
7
  end
8
-
9
- it "should url escape the filename" do
8
+
9
+ it "url escapes the filename" do
10
10
  subject.editor["&.rb", 0].should == "txmt://open?url=file://%26.rb&line=0"
11
11
  end
12
+
13
+ [:emacs, :emacsclient].each do |editor|
14
+ it "uses emacs:// scheme when set to #{editor.inspect}" do
15
+ subject.editor = editor
16
+ subject.editor[].should start_with "emacs://"
17
+ end
18
+ end
19
+
20
+ [:macvim, :mvim].each do |editor|
21
+ it "uses mvim:// scheme when set to #{editor.inspect}" do
22
+ subject.editor = editor
23
+ subject.editor[].should start_with "mvim://"
24
+ end
25
+ end
26
+
27
+ [:sublime, :subl, :st].each do |editor|
28
+ it "uses subl:// scheme when set to #{editor.inspect}" do
29
+ subject.editor = editor
30
+ subject.editor[].should start_with "subl://"
31
+ end
32
+ end
33
+
34
+ [:textmate, :txmt, :tm].each do |editor|
35
+ it "uses txmt:// scheme when set to #{editor.inspect}" do
36
+ subject.editor = editor
37
+ subject.editor[].should start_with "txmt://"
38
+ end
39
+ end
40
+
41
+ ["emacsclient", "/usr/local/bin/emacsclient"].each do |editor|
42
+ it "uses emacs:// scheme when EDITOR=#{editor}" do
43
+ ENV["EDITOR"] = editor
44
+ subject.editor = subject.default_editor
45
+ subject.editor[].should start_with "emacs://"
46
+ end
47
+ end
48
+
49
+ ["mvim -f", "/usr/local/bin/mvim -f"].each do |editor|
50
+ it "uses mvim:// scheme when EDITOR=#{editor}" do
51
+ ENV["EDITOR"] = editor
52
+ subject.editor = subject.default_editor
53
+ subject.editor[].should start_with "mvim://"
54
+ end
55
+ end
56
+
57
+ ["subl -w", "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl"].each do |editor|
58
+ it "uses mvim:// scheme when EDITOR=#{editor}" do
59
+ ENV["EDITOR"] = editor
60
+ subject.editor = subject.default_editor
61
+ subject.editor[].should start_with "subl://"
62
+ end
63
+ end
64
+
65
+ ["mate -w", "/usr/bin/mate -w"].each do |editor|
66
+ it "uses txmt:// scheme when EDITOR=#{editor}" do
67
+ ENV["EDITOR"] = editor
68
+ subject.editor = subject.default_editor
69
+ subject.editor[].should start_with "txmt://"
70
+ end
71
+ end
12
72
  end
13
73
  end
data/spec/spec_helper.rb CHANGED
@@ -2,5 +2,6 @@ require "simplecov"
2
2
  SimpleCov.start
3
3
 
4
4
  $: << File.expand_path("../../lib", __FILE__)
5
+ ENV["EDITOR"] = nil
5
6
  require "better_errors"
6
7
  require "ostruct"
metadata CHANGED
@@ -1,139 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_errors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.0.0.rc1
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-05-24 00:00:00.000000000 Z
11
+ date: 2013-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: rake
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: '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: 2.12.0
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ~>
39
- - !ruby/object:Gem::Version
40
- version: 2.12.0
41
- - !ruby/object:Gem::Dependency
42
- name: binding_of_caller
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: pry
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: simplecov
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: yard
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '>='
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '>='
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: redcarpet
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - '>='
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
13
  - !ruby/object:Gem::Dependency
112
14
  name: erubis
113
15
  requirement: !ruby/object:Gem::Requirement
114
16
  requirements:
115
- - - '>='
17
+ - - ! '>='
116
18
  - !ruby/object:Gem::Version
117
19
  version: 2.6.6
118
20
  type: :runtime
119
21
  prerelease: false
120
22
  version_requirements: !ruby/object:Gem::Requirement
121
23
  requirements:
122
- - - '>='
24
+ - - ! '>='
123
25
  - !ruby/object:Gem::Version
124
26
  version: 2.6.6
125
27
  - !ruby/object:Gem::Dependency
126
28
  name: coderay
127
29
  requirement: !ruby/object:Gem::Requirement
128
30
  requirements:
129
- - - '>='
31
+ - - ! '>='
130
32
  - !ruby/object:Gem::Version
131
33
  version: 1.0.0
132
34
  type: :runtime
133
35
  prerelease: false
134
36
  version_requirements: !ruby/object:Gem::Requirement
135
37
  requirements:
136
- - - '>='
38
+ - - ! '>='
137
39
  - !ruby/object:Gem::Version
138
40
  version: 1.0.0
139
41
  description: Provides a better error page for Rails and other Rack apps. Includes
@@ -148,12 +50,10 @@ files:
148
50
  - .gitignore
149
51
  - .travis.yml
150
52
  - .yardopts
151
- - CONTRIBUTING.md
152
53
  - Gemfile
153
54
  - LICENSE.txt
154
55
  - README.md
155
56
  - Rakefile
156
- - TIPS_AND_TRICKS.md
157
57
  - better_errors.gemspec
158
58
  - lib/better_errors.rb
159
59
  - lib/better_errors/code_formatter.rb
@@ -191,17 +91,17 @@ require_paths:
191
91
  - lib
192
92
  required_ruby_version: !ruby/object:Gem::Requirement
193
93
  requirements:
194
- - - '>='
94
+ - - ! '>='
195
95
  - !ruby/object:Gem::Version
196
96
  version: 1.9.2
197
97
  required_rubygems_version: !ruby/object:Gem::Requirement
198
98
  requirements:
199
- - - '>='
99
+ - - ! '>'
200
100
  - !ruby/object:Gem::Version
201
- version: '0'
101
+ version: 1.3.1
202
102
  requirements: []
203
103
  rubyforge_project:
204
- rubygems_version: 2.0.3
104
+ rubygems_version: 2.0.6
205
105
  signing_key:
206
106
  specification_version: 4
207
107
  summary: Better error page for Rails and other Rack apps