solid_errors 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 760689e543a0af0e87d8998ddcbb6f94611a5b9da8ad2b9d2a7fc11da1ceaa27
4
- data.tar.gz: 83ecabee79fb2ffe3572922e6b97b1a6895b935ec491d0df9d858632cae8d4c2
3
+ metadata.gz: 2b217c4f9bb72282db398685b1e5152f709f6d2b17476d096b5d4db30ba36724
4
+ data.tar.gz: fa004229fca23f20fce73294ca971d1465fafc022c6c8803be1edf21a0dcd8b9
5
5
  SHA512:
6
- metadata.gz: 40cf2bebf1c854caf6bce78db0b99e03a4a3e05b12fe5ccc254d2cfd0448b924610bee0bc7306237fac7ce09d48c93423ed5299cf82481d96e2fa145648d5965
7
- data.tar.gz: b87fc4639cd99f4e326dd8bbc37c8c5d613209b83c5286f25bdd8f1f30d07d13e5ba6b4ad6e1419e4f57074124ef0feba78a5583622114bd01b9a0aef2069b3b
6
+ metadata.gz: 1576b20fe13fcb3a40edca8f9f672d5f84b6e87707147eee254e180508b2942b243a49662a402c1cd45e3cddd8da0906e89114767672e89a8eb422e268d25bd3
7
+ data.tar.gz: 14d720a8e037f7ee0cbd1683790049fa6ca0e5d9230b4bf8692dcddc192bde8962defb6f64e4768b542f79d01fa90da5fc7e95c61e1da67ed59800e8cdbc3c9c
@@ -0,0 +1,91 @@
1
+ module SolidErrors
2
+ # adapted from: https://github.com/honeybadger-io/honeybadger-ruby/blob/master/lib/honeybadger/util/sanitizer.rb
3
+ class Sanitizer
4
+ BASIC_OBJECT = '#<BasicObject>'.freeze
5
+ DEPTH = '[DEPTH]'.freeze
6
+ RAISED = '[RAISED]'.freeze
7
+ RECURSION = '[RECURSION]'.freeze
8
+ TRUNCATED = '[TRUNCATED]'.freeze
9
+ MAX_STRING_SIZE = 65536
10
+
11
+ def self.sanitize(data)
12
+ @sanitizer ||= new
13
+ @sanitizer.sanitize(data)
14
+ end
15
+
16
+ def initialize(max_depth: 20)
17
+ @max_depth = max_depth
18
+ end
19
+
20
+ def sanitize(data, depth = 0, stack = nil)
21
+ return BASIC_OBJECT if basic_object?(data)
22
+
23
+ if recursive?(data)
24
+ return RECURSION if stack && stack.include?(data.object_id)
25
+
26
+ stack = stack ? stack.dup : Set.new
27
+ stack << data.object_id
28
+ end
29
+
30
+ case data
31
+ when Hash
32
+ return DEPTH if depth >= max_depth
33
+
34
+ new_hash = {}
35
+ data.each do |key, value|
36
+ key = key.kind_of?(Symbol) ? key : sanitize(key, depth+1, stack)
37
+ value = sanitize(value, depth+1, stack)
38
+ new_hash[key] = value
39
+ end
40
+ new_hash
41
+ when Array, Set
42
+ return DEPTH if depth >= max_depth
43
+
44
+ data.to_a.map do |value|
45
+ sanitize(value, depth+1, stack)
46
+ end
47
+ when Numeric, TrueClass, FalseClass, NilClass
48
+ data
49
+ when String
50
+ sanitize_string(data)
51
+ else # all other objects
52
+ klass = data.class
53
+
54
+ begin
55
+ data = String(data)
56
+ rescue
57
+ return RAISED
58
+ end
59
+
60
+ return "#<#{klass.name}>" if inspected?(data)
61
+
62
+ sanitize_string(data)
63
+ end
64
+ end
65
+
66
+ private
67
+ attr_reader :max_depth
68
+
69
+ def basic_object?(object)
70
+ object.respond_to?(:to_s)
71
+ false
72
+ rescue
73
+ # BasicObject doesn't respond to `#respond_to?`.
74
+ true
75
+ end
76
+
77
+ def recursive?(data)
78
+ data.is_a?(Hash) || data.is_a?(Array) || data.is_a?(Set)
79
+ end
80
+
81
+ def sanitize_string(string)
82
+ string.gsub!(/#<(.*?):0x.*?>/, '#<\1>') # remove object_id
83
+ return string unless string.respond_to?(:size) && string.size > MAX_STRING_SIZE
84
+ string[0...MAX_STRING_SIZE] + TRUNCATED
85
+ end
86
+
87
+ def inspected?(string)
88
+ String(string) =~ /#<.*>/
89
+ end
90
+ end
91
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidErrors
4
- VERSION = "0.2.2"
4
+ VERSION = "0.2.4"
5
5
  end
data/lib/solid_errors.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "solid_errors/version"
4
+ require_relative "solid_errors/sanitizer"
4
5
  require_relative "solid_errors/subscriber"
5
6
  require_relative "solid_errors/backtrace"
6
7
  require_relative "solid_errors/backtrace_line"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_errors
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephen Margheim
@@ -52,6 +52,7 @@ files:
52
52
  - lib/solid_errors/backtrace.rb
53
53
  - lib/solid_errors/backtrace_line.rb
54
54
  - lib/solid_errors/engine.rb
55
+ - lib/solid_errors/sanitizer.rb
55
56
  - lib/solid_errors/subscriber.rb
56
57
  - lib/solid_errors/version.rb
57
58
  homepage: https://github.com/fractaledmind/solid_errors