better_errors 2.7.1 → 2.9.0
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 +4 -4
- data/.github/workflows/ci.yml +130 -0
- data/.github/workflows/release.yml +64 -0
- data/.ruby-version +1 -0
- data/Gemfile +6 -1
- data/README.md +24 -2
- data/gemfiles/pry010.gemfile +2 -1
- data/gemfiles/pry011.gemfile +2 -1
- data/gemfiles/pry09.gemfile +2 -1
- data/gemfiles/rack.gemfile +2 -1
- data/gemfiles/rack_boc.gemfile +2 -1
- data/gemfiles/rails42.gemfile +2 -1
- data/gemfiles/rails42_boc.gemfile +2 -1
- data/gemfiles/rails42_haml.gemfile +2 -1
- data/gemfiles/rails50.gemfile +2 -1
- data/gemfiles/rails50_boc.gemfile +2 -1
- data/gemfiles/rails50_haml.gemfile +2 -1
- data/gemfiles/rails51.gemfile +2 -1
- data/gemfiles/rails51_boc.gemfile +2 -1
- data/gemfiles/rails51_haml.gemfile +2 -1
- data/gemfiles/rails52.gemfile +2 -1
- data/gemfiles/rails52_boc.gemfile +2 -1
- data/gemfiles/rails52_haml.gemfile +2 -1
- data/gemfiles/rails60.gemfile +2 -1
- data/gemfiles/rails60_boc.gemfile +2 -1
- data/gemfiles/rails60_haml.gemfile +2 -1
- data/lib/better_errors.rb +15 -34
- data/lib/better_errors/editor.rb +99 -0
- data/lib/better_errors/error_page.rb +24 -3
- data/lib/better_errors/exception_hint.rb +29 -0
- data/lib/better_errors/middleware.rb +58 -11
- data/lib/better_errors/raised_exception.rb +20 -7
- data/lib/better_errors/templates/main.erb +61 -17
- data/lib/better_errors/templates/text.erb +5 -2
- data/lib/better_errors/templates/variable_info.erb +9 -2
- data/lib/better_errors/version.rb +1 -1
- metadata +8 -4
- data/.travis.yml +0 -98
@@ -90,7 +90,7 @@
|
|
90
90
|
nav.sidebar,
|
91
91
|
.frame_info {
|
92
92
|
position: fixed;
|
93
|
-
top:
|
93
|
+
top: 102px;
|
94
94
|
bottom: 0;
|
95
95
|
|
96
96
|
box-sizing: border-box;
|
@@ -102,7 +102,7 @@
|
|
102
102
|
nav.sidebar {
|
103
103
|
width: 40%;
|
104
104
|
left: 20px;
|
105
|
-
top:
|
105
|
+
top: 122px;
|
106
106
|
bottom: 20px;
|
107
107
|
}
|
108
108
|
|
@@ -131,7 +131,7 @@
|
|
131
131
|
header.exception {
|
132
132
|
padding: 18px 20px;
|
133
133
|
|
134
|
-
height:
|
134
|
+
height: 66px;
|
135
135
|
min-height: 59px;
|
136
136
|
|
137
137
|
overflow: hidden;
|
@@ -146,6 +146,14 @@
|
|
146
146
|
}
|
147
147
|
|
148
148
|
/* Heading */
|
149
|
+
header.exception .fix-actions {
|
150
|
+
margin-top: .5em;
|
151
|
+
}
|
152
|
+
|
153
|
+
header.exception .fix-actions input[type=submit] {
|
154
|
+
font-weight: bold;
|
155
|
+
}
|
156
|
+
|
149
157
|
header.exception h2 {
|
150
158
|
font-weight: 200;
|
151
159
|
font-size: 11pt;
|
@@ -153,7 +161,7 @@
|
|
153
161
|
|
154
162
|
header.exception h2,
|
155
163
|
header.exception p {
|
156
|
-
line-height: 1.
|
164
|
+
line-height: 1.5em;
|
157
165
|
overflow: hidden;
|
158
166
|
white-space: pre;
|
159
167
|
text-overflow: ellipsis;
|
@@ -166,7 +174,7 @@
|
|
166
174
|
|
167
175
|
header.exception p {
|
168
176
|
font-weight: 200;
|
169
|
-
font-size:
|
177
|
+
font-size: 17pt;
|
170
178
|
color: white;
|
171
179
|
}
|
172
180
|
|
@@ -587,6 +595,9 @@
|
|
587
595
|
color: #8080a0;
|
588
596
|
padding-left: 20px;
|
589
597
|
}
|
598
|
+
.console-has-been-used .live-console-hint {
|
599
|
+
display: none;
|
600
|
+
}
|
590
601
|
|
591
602
|
.hint:before {
|
592
603
|
content: '\25b2';
|
@@ -603,17 +614,6 @@
|
|
603
614
|
margin: 10px 0;
|
604
615
|
}
|
605
616
|
|
606
|
-
.sub:before {
|
607
|
-
content: '';
|
608
|
-
display: block;
|
609
|
-
width: 100%;
|
610
|
-
height: 4px;
|
611
|
-
|
612
|
-
border-radius: 2px;
|
613
|
-
background: rgba(0, 150, 200, 0.05);
|
614
|
-
box-shadow: 1px 1px 0 rgba(255, 255, 255, 0.7), inset 0 0 0 1px rgba(0, 0, 0, 0.04), inset 2px 2px 2px rgba(0, 0, 0, 0.07);
|
615
|
-
}
|
616
|
-
|
617
617
|
.sub h3 {
|
618
618
|
color: #39a;
|
619
619
|
font-size: 1.1em;
|
@@ -744,6 +744,21 @@
|
|
744
744
|
<header class="exception">
|
745
745
|
<h2><strong><%= exception_type %></strong> <span>at <%= request_path %></span></h2>
|
746
746
|
<p><%= exception_message %></p>
|
747
|
+
<% unless active_support_actions.empty? %>
|
748
|
+
<div class='fix-actions'>
|
749
|
+
<% active_support_actions.each do |action, _| %>
|
750
|
+
<form class="button_to" method="post" action="<%= action_dispatch_action_endpoint %>">
|
751
|
+
<input type="submit" value="<%= action %>">
|
752
|
+
<input type="hidden" name="action" value="<%= action %>">
|
753
|
+
<input type="hidden" name="error" value="<%= exception_type %>">
|
754
|
+
<input type="hidden" name="location" value="<%= request_path %>">
|
755
|
+
</form>
|
756
|
+
<% end %>
|
757
|
+
</div>
|
758
|
+
<% end %>
|
759
|
+
<% if exception_hint %>
|
760
|
+
<h2>Hint: <%= exception_hint %></h2>
|
761
|
+
<% end %>
|
747
762
|
</header>
|
748
763
|
</div>
|
749
764
|
|
@@ -780,6 +795,7 @@
|
|
780
795
|
(function() {
|
781
796
|
|
782
797
|
var OID = "<%= id %>";
|
798
|
+
var csrfToken = "<%= csrf_token %>";
|
783
799
|
|
784
800
|
var previousFrame = null;
|
785
801
|
var previousFrameInfo = null;
|
@@ -790,6 +806,7 @@
|
|
790
806
|
var req = new XMLHttpRequest();
|
791
807
|
req.open("POST", "//" + window.location.host + <%== uri_prefix.gsub("<", "<").inspect %> + "/__better_errors/" + OID + "/" + method, true);
|
792
808
|
req.setRequestHeader("Content-Type", "application/json");
|
809
|
+
opts.csrfToken = csrfToken;
|
793
810
|
req.send(JSON.stringify(opts));
|
794
811
|
req.onreadystatechange = function() {
|
795
812
|
if(req.readyState == 4) {
|
@@ -803,6 +820,28 @@
|
|
803
820
|
return html.replace(/&/, "&").replace(/</g, "<");
|
804
821
|
}
|
805
822
|
|
823
|
+
function hasConsoleBeenUsedPreviously() {
|
824
|
+
return !!document.cookie.split('; ').find(function(cookie) {
|
825
|
+
return cookie.startsWith('BetterErrors-has-used-console=');
|
826
|
+
});
|
827
|
+
}
|
828
|
+
|
829
|
+
var consoleHasBeenUsed = hasConsoleBeenUsedPreviously();
|
830
|
+
|
831
|
+
function consoleWasJustUsed() {
|
832
|
+
if (consoleHasBeenUsed) {
|
833
|
+
return;
|
834
|
+
}
|
835
|
+
|
836
|
+
hideConsoleHint();
|
837
|
+
consoleHasBeenUsed = true;
|
838
|
+
document.cookie = "BetterErrors-has-used-console=true;path=/;max-age=31536000;samesite"
|
839
|
+
}
|
840
|
+
|
841
|
+
function hideConsoleHint() {
|
842
|
+
document.querySelector('body').className += " console-has-been-used";
|
843
|
+
}
|
844
|
+
|
806
845
|
function REPL(index) {
|
807
846
|
this.index = index;
|
808
847
|
|
@@ -824,15 +863,20 @@
|
|
824
863
|
this.inputElement = this.container.querySelector("input");
|
825
864
|
this.outputElement = this.container.querySelector("pre");
|
826
865
|
|
866
|
+
if (consoleHasBeenUsed) {
|
867
|
+
hideConsoleHint();
|
868
|
+
}
|
869
|
+
|
827
870
|
var self = this;
|
828
871
|
this.inputElement.onkeydown = function(ev) {
|
829
872
|
self.onKeyDown(ev);
|
873
|
+
consoleWasJustUsed();
|
830
874
|
};
|
831
875
|
|
832
876
|
this.setPrompt(">>");
|
833
877
|
|
834
878
|
REPL.all[this.index] = this;
|
835
|
-
}
|
879
|
+
};
|
836
880
|
|
837
881
|
REPL.prototype.focus = function() {
|
838
882
|
this.inputElement.focus();
|
@@ -1,7 +1,10 @@
|
|
1
1
|
<%== text_heading("=", "%s at %s" % [exception_type, request_path]) %>
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
<%== exception_message %>
|
4
|
+
|
5
|
+
> To access an interactive console with this error, point your browser to: /__better_errors
|
6
|
+
|
7
|
+
<% if backtrace_frames.any? -%>
|
5
8
|
|
6
9
|
<%== text_heading("-", "%s, line %i" % [first_frame.pretty_path, first_frame.line]) %>
|
7
10
|
|
@@ -1,7 +1,14 @@
|
|
1
1
|
<header class="trace_info clearfix">
|
2
2
|
<div class="title">
|
3
3
|
<h2 class="name"><%= @frame.name %></h2>
|
4
|
-
<div class="location"
|
4
|
+
<div class="location">
|
5
|
+
<span class="filename">
|
6
|
+
<a
|
7
|
+
href="<%= editor_url(@frame) %>"
|
8
|
+
<%= ENV.key?('BETTER_ERRORS_INSIDE_FRAME') ? "target=_blank" : '' %>
|
9
|
+
><%= @frame.pretty_path %></a>
|
10
|
+
</span>
|
11
|
+
</div>
|
5
12
|
</div>
|
6
13
|
<div class="code_block clearfix">
|
7
14
|
<%== html_formatted_code_block @frame %>
|
@@ -18,7 +25,7 @@
|
|
18
25
|
</header>
|
19
26
|
|
20
27
|
<% if BetterErrors.binding_of_caller_available? && @frame.frame_binding %>
|
21
|
-
<div class="hint">
|
28
|
+
<div class="hint live-console-hint">
|
22
29
|
This is a live shell. Type in here.
|
23
30
|
</div>
|
24
31
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: better_errors
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charlie Somerville
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -146,8 +146,10 @@ extensions: []
|
|
146
146
|
extra_rdoc_files: []
|
147
147
|
files:
|
148
148
|
- ".coveralls.yml"
|
149
|
+
- ".github/workflows/ci.yml"
|
150
|
+
- ".github/workflows/release.yml"
|
149
151
|
- ".gitignore"
|
150
|
-
- ".
|
152
|
+
- ".ruby-version"
|
151
153
|
- ".yardopts"
|
152
154
|
- CHANGELOG.md
|
153
155
|
- Gemfile
|
@@ -178,8 +180,10 @@ files:
|
|
178
180
|
- lib/better_errors/code_formatter.rb
|
179
181
|
- lib/better_errors/code_formatter/html.rb
|
180
182
|
- lib/better_errors/code_formatter/text.rb
|
183
|
+
- lib/better_errors/editor.rb
|
181
184
|
- lib/better_errors/error_page.rb
|
182
185
|
- lib/better_errors/exception_extension.rb
|
186
|
+
- lib/better_errors/exception_hint.rb
|
183
187
|
- lib/better_errors/inspectable_value.rb
|
184
188
|
- lib/better_errors/middleware.rb
|
185
189
|
- lib/better_errors/rails.rb
|
@@ -214,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
218
|
- !ruby/object:Gem::Version
|
215
219
|
version: '0'
|
216
220
|
requirements: []
|
217
|
-
rubygems_version: 3.1.
|
221
|
+
rubygems_version: 3.1.4
|
218
222
|
signing_key:
|
219
223
|
specification_version: 4
|
220
224
|
summary: Better error page for Rails and other Rack apps
|
data/.travis.yml
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
cache: bundler
|
3
|
-
notifications:
|
4
|
-
webhooks:
|
5
|
-
# With COVERALLS_PARALLEL, coverage information sent to coveralls will not be processed until
|
6
|
-
# this webhook is sent.
|
7
|
-
# https://coveralls.zendesk.com/hc/en-us/articles/203484329-Parallel-Build-Webhook
|
8
|
-
- secure: "YnHYbTq51ySistjvOxsuNhyg4GLuUffEJstTYeGYXiBF7HG5h43IVYo8KNuLzwkgsOYBcNo+YMdQX7qCqJffSbhsr1FZRSzBmjFFxcyD4hu+ukM2theZ4mePVAZiePscYvQPRNY4hIb4d3egStJEytkalDhB3sOebF57tIaCssg="
|
9
|
-
rvm:
|
10
|
-
- 2.2.10
|
11
|
-
- 2.3.8
|
12
|
-
- 2.4.9
|
13
|
-
- 2.5.7
|
14
|
-
- 2.6.5
|
15
|
-
- 2.7.0
|
16
|
-
- ruby-head
|
17
|
-
gemfile:
|
18
|
-
- gemfiles/rails42.gemfile
|
19
|
-
- gemfiles/rails50.gemfile
|
20
|
-
- gemfiles/rails51.gemfile
|
21
|
-
- gemfiles/rails52.gemfile
|
22
|
-
- gemfiles/rails60.gemfile
|
23
|
-
- gemfiles/rails42_haml.gemfile
|
24
|
-
- gemfiles/rails50_haml.gemfile
|
25
|
-
- gemfiles/rails51_haml.gemfile
|
26
|
-
- gemfiles/rails52_haml.gemfile
|
27
|
-
- gemfiles/rails60_haml.gemfile
|
28
|
-
- gemfiles/rails42_boc.gemfile
|
29
|
-
- gemfiles/rails50_boc.gemfile
|
30
|
-
- gemfiles/rails51_boc.gemfile
|
31
|
-
- gemfiles/rails52_boc.gemfile
|
32
|
-
- gemfiles/rails60_boc.gemfile
|
33
|
-
- gemfiles/rack.gemfile
|
34
|
-
- gemfiles/rack_boc.gemfile
|
35
|
-
- gemfiles/pry09.gemfile
|
36
|
-
- gemfiles/pry010.gemfile
|
37
|
-
- gemfiles/pry011.gemfile
|
38
|
-
matrix:
|
39
|
-
fast_finish: true
|
40
|
-
allow_failures:
|
41
|
-
- rvm: ruby-head
|
42
|
-
- gemfile: gemfiles/pry010.gemfile
|
43
|
-
- gemfile: gemfiles/pry011.gemfile
|
44
|
-
exclude:
|
45
|
-
- rvm: 2.2.10
|
46
|
-
gemfile: gemfiles/rails60.gemfile
|
47
|
-
- rvm: 2.2.10
|
48
|
-
gemfile: gemfiles/rails60_boc.gemfile
|
49
|
-
- rvm: 2.2.10
|
50
|
-
gemfile: gemfiles/rails60_haml.gemfile
|
51
|
-
- rvm: 2.3.8
|
52
|
-
gemfile: gemfiles/rails42.gemfile
|
53
|
-
- rvm: 2.3.8
|
54
|
-
gemfile: gemfiles/rails42_boc.gemfile
|
55
|
-
- rvm: 2.3.8
|
56
|
-
gemfile: gemfiles/rails42_haml.gemfile
|
57
|
-
- rvm: 2.3.8
|
58
|
-
gemfile: gemfiles/rails60.gemfile
|
59
|
-
- rvm: 2.3.8
|
60
|
-
gemfile: gemfiles/rails60_boc.gemfile
|
61
|
-
- rvm: 2.3.8
|
62
|
-
gemfile: gemfiles/rails60_haml.gemfile
|
63
|
-
- rvm: 2.4.9
|
64
|
-
gemfile: gemfiles/rails42.gemfile
|
65
|
-
- rvm: 2.4.9
|
66
|
-
gemfile: gemfiles/rails42_boc.gemfile
|
67
|
-
- rvm: 2.4.9
|
68
|
-
gemfile: gemfiles/rails42_haml.gemfile
|
69
|
-
- rvm: 2.4.9
|
70
|
-
gemfile: gemfiles/rails60.gemfile
|
71
|
-
- rvm: 2.4.9
|
72
|
-
gemfile: gemfiles/rails60_boc.gemfile
|
73
|
-
- rvm: 2.4.9
|
74
|
-
gemfile: gemfiles/rails60_haml.gemfile
|
75
|
-
- rvm: 2.5.7
|
76
|
-
gemfile: gemfiles/rails42.gemfile
|
77
|
-
- rvm: 2.5.7
|
78
|
-
gemfile: gemfiles/rails42_boc.gemfile
|
79
|
-
- rvm: 2.5.7
|
80
|
-
gemfile: gemfiles/rails42_haml.gemfile
|
81
|
-
- rvm: 2.6.5
|
82
|
-
gemfile: gemfiles/rails42.gemfile
|
83
|
-
- rvm: 2.6.5
|
84
|
-
gemfile: gemfiles/rails42_boc.gemfile
|
85
|
-
- rvm: 2.6.5
|
86
|
-
gemfile: gemfiles/rails42_haml.gemfile
|
87
|
-
- rvm: 2.7.0
|
88
|
-
gemfile: gemfiles/rails42.gemfile
|
89
|
-
- rvm: 2.7.0
|
90
|
-
gemfile: gemfiles/rails42_boc.gemfile
|
91
|
-
- rvm: 2.7.0
|
92
|
-
gemfile: gemfiles/rails42_haml.gemfile
|
93
|
-
- rvm: ruby-head
|
94
|
-
gemfile: gemfiles/rails42.gemfile
|
95
|
-
- rvm: ruby-head
|
96
|
-
gemfile: gemfiles/rails42_boc.gemfile
|
97
|
-
- rvm: ruby-head
|
98
|
-
gemfile: gemfiles/rails42_haml.gemfile
|