Module: Dontbugme::Store::JsonSafe
- Defined in:
- lib/dontbugme/store/json_safe.rb
Overview
Sanitizes data for JSON encoding by replacing invalid UTF-8 sequences. Trace data can contain binary from SQL binds, HTTP bodies, Redis, etc.
Constant Summary collapse
- REPLACEMENT =
"\uFFFD".freeze
Class Method Summary collapse
Class Method Details
.sanitize(obj) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/dontbugme/store/json_safe.rb', line 12 def sanitize(obj) case obj when String sanitize_string(obj) when Hash obj.transform_values { |v| sanitize(v) } when Array obj.map { |v| sanitize(v) } when Symbol sanitize_string(obj.to_s) when Numeric, TrueClass, FalseClass, NilClass obj when Time obj.respond_to?(:iso8601) ? obj.iso8601(3) : obj.to_s else sanitize_string(obj.to_s) end end |
.sanitize_string(str) ⇒ Object
31 32 33 34 35 36 37 38 |
# File 'lib/dontbugme/store/json_safe.rb', line 31 def sanitize_string(str) return str if str.nil? return str if str.encoding == Encoding::UTF_8 && str.valid_encoding? str.encode('UTF-8', invalid: :replace, undef: :replace, replace: REPLACEMENT) rescue StandardError REPLACEMENT end |