failbot 2.5.1 → 2.5.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7d95ed657556e73833f309a37497784e45ac94f959f79988acf8ac066e6f4a6b
4
- data.tar.gz: c95554288cab069cf33ce8c1c4bdfad43ebaa5e9e1f1f83492865e67d014977d
3
+ metadata.gz: e17fb2d80a08382f07201582e708558ab9288c33c085950136d42c38ac9e47ff
4
+ data.tar.gz: 664d9e980cb2901a1487518435a8c15bcd1e7fbce8d72eb16298e43db50d531c
5
5
  SHA512:
6
- metadata.gz: a1223f04684f214ed5dfcdf444a1e4b9b1a209aee0ba1aa065e85e52603b3fda012790002237b3629ca9e588533aec48a2bd482d995ffa5d149f575c8619465c
7
- data.tar.gz: 2acb08a403bbdd7b4fdae7973e40a11320b1002bac4aba4e8393d467d8c9b45d45efa0eaae85b4b6b4e6139be1b7185e7d387ccff7edba33b9dfe4724eaad963
6
+ metadata.gz: 5228d0b4914759a86d5605b8573f4c55de41716b2f9fa1248c6df87c169dacff3653a46da0ad4287866ecdb8a60aac5b0ed762202c0aaff89444e3b7cbbd75da
7
+ data.tar.gz: 332e27bc52d28068b62b6eda1fe30925401788ab3225f68d0a09573e07182f2caa6e7437edf6627cd94cba9fa0be04c44fd6a873e594428ea8bf78a22e2707fa
@@ -66,6 +66,11 @@ module Failbot
66
66
 
67
67
  EXCEPTION_DETAIL = 'exception_detail'
68
68
 
69
+ # We'll include this many nested Exception#cause objects in the needle
70
+ # context. We limit the number of objects to prevent excessive recursion and
71
+ # large needle contexts.
72
+ MAXIMUM_CAUSE_DEPTH = 2
73
+
69
74
  # Enumerates the available exception formats this gem supports. The original
70
75
  # format and the default is :haystack and the newer format is :structured
71
76
  EXCEPTION_FORMATS = {
@@ -30,11 +30,6 @@ module Failbot
30
30
  hash["class"]
31
31
  end
32
32
 
33
- # We'll include this many nested Exception#cause objects in the needle
34
- # context. We limit the number of objects to prevent excessive recursion and
35
- # large needle contexts.
36
- MAXIMUM_CAUSE_DEPTH = 2
37
-
38
33
  # Pretty-print Exception#cause (and nested causes) for inclusion in needle
39
34
  # context
40
35
  #
@@ -59,7 +54,7 @@ module Failbot
59
54
 
60
55
  result = causes.join("\n\nCAUSED BY:\n\n")
61
56
 
62
- if current.respond_to?(:cause) && current.cause
57
+ if current.cause
63
58
  result << "\n\nFurther #cause backtraces were omitted\n"
64
59
  end
65
60
 
@@ -72,7 +67,6 @@ module Failbot
72
67
  #
73
68
  # Returns a String.
74
69
  def self.pretty_print_one_cause(e)
75
- return unless e.respond_to?(:cause)
76
70
  cause = e.cause
77
71
  return unless cause
78
72
 
@@ -22,18 +22,47 @@ module Failbot
22
22
  EMPTY_ARRAY
23
23
  end
24
24
  {
25
- "exception_detail" => [ # TODO Once supported in failbotg, this should be an array of
26
- { # hashes generated from subsequent calls to Exception#cause.
27
- "type" => class_name,
28
- "value" => message,
29
- "stacktrace" => stacktrace
30
- }
31
- ],
25
+ "exception_detail" => exception_details(e),
32
26
  "ruby" => RUBY_DESCRIPTION,
33
27
  "created_at" => Time.now.utc.iso8601(6)
34
28
  }
35
29
  end
36
30
 
31
+ FURTHER_CAUSES_WERE_OMITTED = {
32
+ "type" => "Notice",
33
+ "value" => "further Exception#cause values were omitted",
34
+ "stacktrace" => EMPTY_ARRAY
35
+ }.freeze
36
+
37
+ def self.exception_details(e)
38
+ result = []
39
+ depth = 0
40
+
41
+ loop do
42
+ message = e.message.to_s
43
+ class_name = e.class.to_s
44
+ stacktrace = begin
45
+ Failbot.backtrace_parser.call(e)
46
+ rescue => ex
47
+ message += "\nUnable to parse backtrace (#{ex.inspect})\nDon't put non-backtrace text in Exception#backtrace please!\nSo-called backtrace follows:\n#{e.backtrace.join("\n")}"
48
+ class_name += " (backtrace failed to parse)"
49
+ EMPTY_ARRAY
50
+ end
51
+ result.unshift({
52
+ "type" => class_name,
53
+ "value" => message,
54
+ "stacktrace" => stacktrace
55
+ })
56
+ depth += 1
57
+ break unless (e=e.cause)
58
+ if depth > MAXIMUM_CAUSE_DEPTH
59
+ result.unshift(FURTHER_CAUSES_WERE_OMITTED)
60
+ break
61
+ end
62
+ end
63
+ result
64
+ end
65
+
37
66
  # given a hash generated by this class, return the exception message.
38
67
  def self.exception_message_from_hash(hash)
39
68
  hash.dig("exception_detail", 0, "value")
@@ -1,3 +1,3 @@
1
1
  module Failbot
2
- VERSION = "2.5.1"
2
+ VERSION = "2.5.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: failbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - "@rtomayko"