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.
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