better_errors 2.3.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 +3 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +1 -1
- data/Gemfile +7 -8
- data/README.md +81 -6
- data/better_errors.gemspec +18 -1
- 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/editor.rb +99 -0
- data/lib/better_errors/error_page.rb +39 -9
- data/lib/better_errors/exception_hint.rb +29 -0
- data/lib/better_errors/inspectable_value.rb +45 -0
- data/lib/better_errors/middleware.rb +68 -15
- data/lib/better_errors/raised_exception.rb +25 -4
- data/lib/better_errors/stack_frame.rb +25 -7
- data/lib/better_errors/templates/main.erb +97 -42
- data/lib/better_errors/templates/text.erb +5 -2
- data/lib/better_errors/templates/variable_info.erb +12 -5
- data/lib/better_errors/version.rb +1 -1
- data/lib/better_errors.rb +29 -30
- metadata +119 -7
- data/.travis.yml +0 -9
@@ -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
|
|
@@ -394,7 +402,7 @@
|
|
394
402
|
* Monospace
|
395
403
|
* --------------------------------------------------------------------- */
|
396
404
|
|
397
|
-
pre, code, .repl input, .repl .
|
405
|
+
pre, code, .be-repl input, .be-repl .command-line span, textarea, .code_linenums {
|
398
406
|
font-family: menlo, lucida console, monospace;
|
399
407
|
font-size: 8pt;
|
400
408
|
}
|
@@ -460,7 +468,7 @@
|
|
460
468
|
font-weight: 200;
|
461
469
|
}
|
462
470
|
|
463
|
-
.code, .console, .unavailable {
|
471
|
+
.code, .be-console, .unavailable {
|
464
472
|
background: #fff;
|
465
473
|
padding: 5px;
|
466
474
|
|
@@ -532,13 +540,13 @@
|
|
532
540
|
}
|
533
541
|
|
534
542
|
/* REPL shell */
|
535
|
-
.console {
|
543
|
+
.be-console {
|
536
544
|
padding: 0 1px 10px 1px;
|
537
545
|
border-bottom-left-radius: 2px;
|
538
546
|
border-bottom-right-radius: 2px;
|
539
547
|
}
|
540
548
|
|
541
|
-
.console pre {
|
549
|
+
.be-console pre {
|
542
550
|
padding: 10px 10px 0 10px;
|
543
551
|
max-height: 400px;
|
544
552
|
overflow-x: none;
|
@@ -548,30 +556,31 @@
|
|
548
556
|
white-space: pre-wrap;
|
549
557
|
}
|
550
558
|
|
551
|
-
/* .
|
552
|
-
.console .
|
559
|
+
/* .command-line > span + input */
|
560
|
+
.be-console .command-line {
|
553
561
|
display: table;
|
554
562
|
width: 100%;
|
555
563
|
}
|
556
564
|
|
557
|
-
.console .
|
558
|
-
.console .
|
565
|
+
.be-console .command-line span,
|
566
|
+
.be-console .command-line input {
|
559
567
|
display: table-cell;
|
560
568
|
}
|
561
569
|
|
562
|
-
.console .
|
570
|
+
.be-console .command-line span {
|
563
571
|
width: 1%;
|
564
572
|
padding-right: 5px;
|
565
573
|
padding-left: 10px;
|
574
|
+
white-space: pre;
|
566
575
|
}
|
567
576
|
|
568
|
-
.console .
|
577
|
+
.be-console .command-line input {
|
569
578
|
width: 99%;
|
570
579
|
}
|
571
580
|
|
572
581
|
/* Input box */
|
573
|
-
.console input,
|
574
|
-
.console input:focus {
|
582
|
+
.be-console input,
|
583
|
+
.be-console input:focus {
|
575
584
|
outline: 0;
|
576
585
|
border: 0;
|
577
586
|
padding: 0;
|
@@ -586,6 +595,9 @@
|
|
586
595
|
color: #8080a0;
|
587
596
|
padding-left: 20px;
|
588
597
|
}
|
598
|
+
.console-has-been-used .live-console-hint {
|
599
|
+
display: none;
|
600
|
+
}
|
589
601
|
|
590
602
|
.hint:before {
|
591
603
|
content: '\25b2';
|
@@ -602,17 +614,6 @@
|
|
602
614
|
margin: 10px 0;
|
603
615
|
}
|
604
616
|
|
605
|
-
.sub:before {
|
606
|
-
content: '';
|
607
|
-
display: block;
|
608
|
-
width: 100%;
|
609
|
-
height: 4px;
|
610
|
-
|
611
|
-
border-radius: 2px;
|
612
|
-
background: rgba(0, 150, 200, 0.05);
|
613
|
-
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);
|
614
|
-
}
|
615
|
-
|
616
617
|
.sub h3 {
|
617
618
|
color: #39a;
|
618
619
|
font-size: 1.1em;
|
@@ -669,14 +670,14 @@
|
|
669
670
|
|
670
671
|
nav.sidebar::-webkit-scrollbar,
|
671
672
|
.inset pre::-webkit-scrollbar,
|
672
|
-
.console pre::-webkit-scrollbar,
|
673
|
+
.be-console pre::-webkit-scrollbar,
|
673
674
|
.code::-webkit-scrollbar {
|
674
675
|
width: 10px;
|
675
676
|
height: 10px;
|
676
677
|
}
|
677
678
|
|
678
679
|
.inset pre::-webkit-scrollbar-thumb,
|
679
|
-
.console pre::-webkit-scrollbar-thumb,
|
680
|
+
.be-console pre::-webkit-scrollbar-thumb,
|
680
681
|
.code::-webkit-scrollbar-thumb {
|
681
682
|
background: #ccc;
|
682
683
|
border-radius: 5px;
|
@@ -692,7 +693,7 @@
|
|
692
693
|
background: -webkit-linear-gradient(left, #aaa, #999);
|
693
694
|
}
|
694
695
|
|
695
|
-
.console pre:hover::-webkit-scrollbar-thumb,
|
696
|
+
.be-console pre:hover::-webkit-scrollbar-thumb,
|
696
697
|
.inset pre:hover::-webkit-scrollbar-thumb,
|
697
698
|
.code:hover::-webkit-scrollbar-thumb {
|
698
699
|
background: #888;
|
@@ -720,12 +721,22 @@
|
|
720
721
|
if(document.styleSheets[i].href)
|
721
722
|
document.styleSheets[i].disabled = true;
|
722
723
|
}
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
724
|
+
if (window.Turbolinks.controller) {
|
725
|
+
// Turbolinks > 5 (see https://github.com/turbolinks/turbolinks/issues/6)
|
726
|
+
document.addEventListener("turbolinks:load", function restoreCSS(e) {
|
727
|
+
for(var i=0; i < document.styleSheets.length; i++) {
|
728
|
+
document.styleSheets[i].disabled = false;
|
729
|
+
}
|
730
|
+
document.removeEventListener("turbolinks:load", restoreCSS, false);
|
731
|
+
});
|
732
|
+
} else {
|
733
|
+
document.addEventListener("page:restore", function restoreCSS(e) {
|
734
|
+
for(var i=0; i < document.styleSheets.length; i++) {
|
735
|
+
document.styleSheets[i].disabled = false;
|
736
|
+
}
|
737
|
+
document.removeEventListener("page:restore", restoreCSS, false);
|
738
|
+
});
|
739
|
+
}
|
729
740
|
}
|
730
741
|
</script>
|
731
742
|
|
@@ -733,6 +744,21 @@
|
|
733
744
|
<header class="exception">
|
734
745
|
<h2><strong><%= exception_type %></strong> <span>at <%= request_path %></span></h2>
|
735
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 %>
|
736
762
|
</header>
|
737
763
|
</div>
|
738
764
|
|
@@ -769,6 +795,7 @@
|
|
769
795
|
(function() {
|
770
796
|
|
771
797
|
var OID = "<%= id %>";
|
798
|
+
var csrfToken = "<%= csrf_token %>";
|
772
799
|
|
773
800
|
var previousFrame = null;
|
774
801
|
var previousFrameInfo = null;
|
@@ -779,6 +806,7 @@
|
|
779
806
|
var req = new XMLHttpRequest();
|
780
807
|
req.open("POST", "//" + window.location.host + <%== uri_prefix.gsub("<", "<").inspect %> + "/__better_errors/" + OID + "/" + method, true);
|
781
808
|
req.setRequestHeader("Content-Type", "application/json");
|
809
|
+
opts.csrfToken = csrfToken;
|
782
810
|
req.send(JSON.stringify(opts));
|
783
811
|
req.onreadystatechange = function() {
|
784
812
|
if(req.readyState == 4) {
|
@@ -792,6 +820,28 @@
|
|
792
820
|
return html.replace(/&/, "&").replace(/</g, "<");
|
793
821
|
}
|
794
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
|
+
|
795
845
|
function REPL(index) {
|
796
846
|
this.index = index;
|
797
847
|
|
@@ -809,19 +859,24 @@
|
|
809
859
|
REPL.prototype.install = function(containerElement) {
|
810
860
|
this.container = containerElement;
|
811
861
|
|
812
|
-
this.promptElement = this.container.querySelector(".prompt
|
862
|
+
this.promptElement = this.container.querySelector(".command-line .prompt");
|
813
863
|
this.inputElement = this.container.querySelector("input");
|
814
864
|
this.outputElement = this.container.querySelector("pre");
|
815
865
|
|
866
|
+
if (consoleHasBeenUsed) {
|
867
|
+
hideConsoleHint();
|
868
|
+
}
|
869
|
+
|
816
870
|
var self = this;
|
817
871
|
this.inputElement.onkeydown = function(ev) {
|
818
872
|
self.onKeyDown(ev);
|
873
|
+
consoleWasJustUsed();
|
819
874
|
};
|
820
875
|
|
821
876
|
this.setPrompt(">>");
|
822
877
|
|
823
878
|
REPL.all[this.index] = this;
|
824
|
-
}
|
879
|
+
};
|
825
880
|
|
826
881
|
REPL.prototype.focus = function() {
|
827
882
|
this.inputElement.focus();
|
@@ -924,7 +979,7 @@
|
|
924
979
|
|
925
980
|
el.style.display = "block";
|
926
981
|
|
927
|
-
var replInput = el.querySelector('.console input');
|
982
|
+
var replInput = el.querySelector('.be-console input');
|
928
983
|
if (replInput) replInput.focus();
|
929
984
|
}
|
930
985
|
|
@@ -942,11 +997,11 @@
|
|
942
997
|
if(response.explanation) {
|
943
998
|
el.innerHTML += "<p class='explanation'>" + escapeHTML(response.explanation) + "</p>";
|
944
999
|
}
|
945
|
-
el.innerHTML += "<p><a target='_new' href='https://github.com/
|
1000
|
+
el.innerHTML += "<p><a target='_new' href='https://github.com/BetterErrors/better_errors'>More about Better Errors</a></p>";
|
946
1001
|
} else {
|
947
1002
|
el.innerHTML = response.html;
|
948
1003
|
|
949
|
-
var repl = el.querySelector(".repl .console");
|
1004
|
+
var repl = el.querySelector(".be-repl .be-console");
|
950
1005
|
if(repl) {
|
951
1006
|
new REPL(index).install(repl);
|
952
1007
|
}
|
@@ -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,24 +1,31 @@
|
|
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 %>
|
8
15
|
</div>
|
9
16
|
|
10
17
|
<% if BetterErrors.binding_of_caller_available? && @frame.frame_binding %>
|
11
|
-
<div class="repl">
|
12
|
-
<div class="console">
|
18
|
+
<div class="be-repl">
|
19
|
+
<div class="be-console">
|
13
20
|
<pre></pre>
|
14
|
-
<div class="
|
21
|
+
<div class="command-line"><span class='prompt'>>></span> <input tabindex="1"/></div>
|
15
22
|
</div>
|
16
23
|
</div>
|
17
24
|
<% end %>
|
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
|
|
data/lib/better_errors.rb
CHANGED
@@ -3,22 +3,17 @@ require "erubi"
|
|
3
3
|
require "coderay"
|
4
4
|
require "uri"
|
5
5
|
|
6
|
+
require "better_errors/version"
|
6
7
|
require "better_errors/code_formatter"
|
8
|
+
require "better_errors/inspectable_value"
|
7
9
|
require "better_errors/error_page"
|
8
10
|
require "better_errors/middleware"
|
9
11
|
require "better_errors/raised_exception"
|
10
12
|
require "better_errors/repl"
|
11
13
|
require "better_errors/stack_frame"
|
12
|
-
require "better_errors/
|
14
|
+
require "better_errors/editor"
|
13
15
|
|
14
16
|
module BetterErrors
|
15
|
-
POSSIBLE_EDITOR_PRESETS = [
|
16
|
-
{ symbols: [:emacs, :emacsclient], sniff: /emacs/i, url: "emacs://open?url=file://%{file}&line=%{line}" },
|
17
|
-
{ symbols: [:macvim, :mvim], sniff: /vim/i, url: proc { |file, line| "mvim://open?url=file://#{file}&line=#{line}" } },
|
18
|
-
{ symbols: [:sublime, :subl, :st], sniff: /subl/i, url: "subl://open?url=file://%{file}&line=%{line}" },
|
19
|
-
{ symbols: [:textmate, :txmt, :tm], sniff: /mate/i, url: "txmt://open?url=file://%{file}&line=%{line}" },
|
20
|
-
]
|
21
|
-
|
22
17
|
class << self
|
23
18
|
# The path to the root of the application. Better Errors uses this property
|
24
19
|
# to determine if a file in a backtrace should be considered an application
|
@@ -44,20 +39,32 @@ module BetterErrors
|
|
44
39
|
# The ignored instance variables.
|
45
40
|
# @return [Array]
|
46
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
|
47
51
|
end
|
48
52
|
@ignored_instance_variables = []
|
53
|
+
@maximum_variable_inspect_size = 100_000
|
54
|
+
@ignored_classes = ['ActionDispatch::Request', 'ActionDispatch::Response']
|
49
55
|
|
50
|
-
# Returns
|
56
|
+
# Returns an object which responds to #url, which when called with
|
57
|
+
# a filename and line number argument,
|
51
58
|
# returns a URL to open the filename and line in the selected editor.
|
52
59
|
#
|
53
60
|
# Generates TextMate URLs by default.
|
54
61
|
#
|
55
|
-
# BetterErrors.editor
|
62
|
+
# BetterErrors.editor.url("/some/file", 123)
|
56
63
|
# # => txmt://open?url=file:///some/file&line=123
|
57
64
|
#
|
58
65
|
# @return [Proc]
|
59
66
|
def self.editor
|
60
|
-
@editor
|
67
|
+
@editor ||= default_editor
|
61
68
|
end
|
62
69
|
|
63
70
|
# Configures how Better Errors generates open-in-editor URLs.
|
@@ -68,6 +75,7 @@ module BetterErrors
|
|
68
75
|
# * `:textmate`, `:txmt`, `:tm`
|
69
76
|
# * `:sublime`, `:subl`, `:st`
|
70
77
|
# * `:macvim`
|
78
|
+
# * `:atom`
|
71
79
|
#
|
72
80
|
# @param [Symbol] sym
|
73
81
|
#
|
@@ -97,27 +105,22 @@ module BetterErrors
|
|
97
105
|
# @param [Proc] proc
|
98
106
|
#
|
99
107
|
def self.editor=(editor)
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
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)
|
108
115
|
else
|
109
|
-
|
110
|
-
@editor = editor
|
111
|
-
else
|
112
|
-
raise TypeError, "Expected editor to be a valid editor key, a format string or a callable."
|
113
|
-
end
|
116
|
+
raise ArgumentError, "Expected editor to be a valid editor key, a format string or a callable."
|
114
117
|
end
|
115
118
|
end
|
116
119
|
|
117
120
|
# Enables experimental Pry support in the inline REPL
|
118
121
|
#
|
119
122
|
# If you encounter problems while using Pry, *please* file a bug report at
|
120
|
-
# https://github.com/
|
123
|
+
# https://github.com/BetterErrors/better_errors/issues
|
121
124
|
def self.use_pry!
|
122
125
|
REPL::PROVIDERS.unshift const: :Pry, impl: "better_errors/repl/pry"
|
123
126
|
end
|
@@ -127,12 +130,8 @@ module BetterErrors
|
|
127
130
|
#
|
128
131
|
# @return [Symbol]
|
129
132
|
def self.default_editor
|
130
|
-
|
131
|
-
ENV["EDITOR"] =~ config[:sniff]
|
132
|
-
}[:url] || :textmate
|
133
|
+
Editor.default_editor
|
133
134
|
end
|
134
|
-
|
135
|
-
BetterErrors.editor = default_editor
|
136
135
|
end
|
137
136
|
|
138
137
|
begin
|
metadata
CHANGED
@@ -1,15 +1,99 @@
|
|
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.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
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::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
|
13
97
|
- !ruby/object:Gem::Dependency
|
14
98
|
name: erubi
|
15
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -61,20 +145,46 @@ executables: []
|
|
61
145
|
extensions: []
|
62
146
|
extra_rdoc_files: []
|
63
147
|
files:
|
148
|
+
- ".coveralls.yml"
|
149
|
+
- ".github/workflows/ci.yml"
|
150
|
+
- ".github/workflows/release.yml"
|
64
151
|
- ".gitignore"
|
65
|
-
- ".
|
152
|
+
- ".ruby-version"
|
66
153
|
- ".yardopts"
|
67
154
|
- CHANGELOG.md
|
68
155
|
- Gemfile
|
69
156
|
- LICENSE.txt
|
70
157
|
- README.md
|
71
158
|
- better_errors.gemspec
|
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
|
72
179
|
- lib/better_errors.rb
|
73
180
|
- lib/better_errors/code_formatter.rb
|
74
181
|
- lib/better_errors/code_formatter/html.rb
|
75
182
|
- lib/better_errors/code_formatter/text.rb
|
183
|
+
- lib/better_errors/editor.rb
|
76
184
|
- lib/better_errors/error_page.rb
|
77
185
|
- lib/better_errors/exception_extension.rb
|
186
|
+
- lib/better_errors/exception_hint.rb
|
187
|
+
- lib/better_errors/inspectable_value.rb
|
78
188
|
- lib/better_errors/middleware.rb
|
79
189
|
- lib/better_errors/rails.rb
|
80
190
|
- lib/better_errors/raised_exception.rb
|
@@ -86,10 +196,13 @@ files:
|
|
86
196
|
- lib/better_errors/templates/text.erb
|
87
197
|
- lib/better_errors/templates/variable_info.erb
|
88
198
|
- lib/better_errors/version.rb
|
89
|
-
homepage: https://github.com/
|
199
|
+
homepage: https://github.com/BetterErrors/better_errors
|
90
200
|
licenses:
|
91
201
|
- MIT
|
92
|
-
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
|
93
206
|
post_install_message:
|
94
207
|
rdoc_options: []
|
95
208
|
require_paths:
|
@@ -105,8 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
218
|
- !ruby/object:Gem::Version
|
106
219
|
version: '0'
|
107
220
|
requirements: []
|
108
|
-
|
109
|
-
rubygems_version: 2.6.8
|
221
|
+
rubygems_version: 3.1.4
|
110
222
|
signing_key:
|
111
223
|
specification_version: 4
|
112
224
|
summary: Better error page for Rails and other Rack apps
|