better_errors 2.3.0 → 2.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) 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 +3 -0
  6. data/.ruby-version +1 -0
  7. data/CHANGELOG.md +1 -1
  8. data/Gemfile +7 -8
  9. data/README.md +81 -6
  10. data/better_errors.gemspec +18 -1
  11. data/gemfiles/pry010.gemfile +10 -0
  12. data/gemfiles/pry011.gemfile +9 -0
  13. data/gemfiles/pry09.gemfile +9 -0
  14. data/gemfiles/rack.gemfile +8 -0
  15. data/gemfiles/rack_boc.gemfile +9 -0
  16. data/gemfiles/rails42.gemfile +10 -0
  17. data/gemfiles/rails42_boc.gemfile +11 -0
  18. data/gemfiles/rails42_haml.gemfile +11 -0
  19. data/gemfiles/rails50.gemfile +9 -0
  20. data/gemfiles/rails50_boc.gemfile +10 -0
  21. data/gemfiles/rails50_haml.gemfile +10 -0
  22. data/gemfiles/rails51.gemfile +9 -0
  23. data/gemfiles/rails51_boc.gemfile +10 -0
  24. data/gemfiles/rails51_haml.gemfile +10 -0
  25. data/gemfiles/rails52.gemfile +9 -0
  26. data/gemfiles/rails52_boc.gemfile +10 -0
  27. data/gemfiles/rails52_haml.gemfile +10 -0
  28. data/gemfiles/rails60.gemfile +8 -0
  29. data/gemfiles/rails60_boc.gemfile +9 -0
  30. data/gemfiles/rails60_haml.gemfile +9 -0
  31. data/lib/better_errors/editor.rb +99 -0
  32. data/lib/better_errors/error_page.rb +39 -9
  33. data/lib/better_errors/exception_hint.rb +29 -0
  34. data/lib/better_errors/inspectable_value.rb +45 -0
  35. data/lib/better_errors/middleware.rb +68 -15
  36. data/lib/better_errors/raised_exception.rb +25 -4
  37. data/lib/better_errors/stack_frame.rb +25 -7
  38. data/lib/better_errors/templates/main.erb +97 -42
  39. data/lib/better_errors/templates/text.erb +5 -2
  40. data/lib/better_errors/templates/variable_info.erb +12 -5
  41. data/lib/better_errors/version.rb +1 -1
  42. data/lib/better_errors.rb +29 -30
  43. metadata +119 -7
  44. data/.travis.yml +0 -9
@@ -90,7 +90,7 @@
90
90
  nav.sidebar,
91
91
  .frame_info {
92
92
  position: fixed;
93
- top: 95px;
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: 115px;
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: 59px;
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.4em;
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: 20pt;
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 .prompt span, textarea, .code_linenums {
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
- /* .prompt > span + input */
552
- .console .prompt {
559
+ /* .command-line > span + input */
560
+ .be-console .command-line {
553
561
  display: table;
554
562
  width: 100%;
555
563
  }
556
564
 
557
- .console .prompt span,
558
- .console .prompt input {
565
+ .be-console .command-line span,
566
+ .be-console .command-line input {
559
567
  display: table-cell;
560
568
  }
561
569
 
562
- .console .prompt span {
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 .prompt input {
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
- document.addEventListener("page:restore", function restoreCSS(e) {
724
- for(var i=0; i < document.styleSheets.length; i++) {
725
- document.styleSheets[i].disabled = false;
726
- }
727
- document.removeEventListener("page:restore", restoreCSS, false);
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("<", "&lt;").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(/&/, "&amp;").replace(/</g, "&lt;");
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 span");
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/charliesome/better_errors'>More about Better Errors</a></p>";
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
- > <%== exception_message %>
4
- <% if backtrace_frames.any? %>
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"><span class="filename"><a href="<%= editor_url(@frame) %>"><%= @frame.pretty_path %></a></span></div>
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="prompt"><span>&gt;&gt;</span> <input/></div>
21
+ <div class="command-line"><span class='prompt'>&gt;&gt;</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
 
@@ -1,3 +1,3 @@
1
1
  module BetterErrors
2
- VERSION = "2.3.0"
2
+ VERSION = "2.9.1"
3
3
  end
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/version"
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 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,
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["/some/file", 123]
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
- POSSIBLE_EDITOR_PRESETS.each do |config|
101
- if config[:symbols].include?(editor)
102
- return self.editor = config[:url]
103
- end
104
- end
105
-
106
- if editor.is_a? String
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
- if editor.respond_to? :call
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/charliesome/better_errors/issues
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
- POSSIBLE_EDITOR_PRESETS.detect(-> { {} }) { |config|
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.3.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: 2017-08-04 00:00:00.000000000 Z
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
- - ".travis.yml"
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/charliesome/better_errors
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
- rubyforge_project:
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
data/.travis.yml DELETED
@@ -1,9 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.0
6
- - 2.1
7
- - 2.2
8
- - 2.3
9
- - 2.4