lib/raven/processor/utf8conversion.rb in sentry-raven-2.4.0 vs lib/raven/processor/utf8conversion.rb in sentry-raven-2.5.0
- old
+ new
@@ -1,29 +1,28 @@
module Raven
class Processor::UTF8Conversion < Processor
def process(value)
- if value.is_a? Array
- value.map { |v| process v }
- elsif value.is_a? Hash
- value.merge(value) { |_, v| process v }
- elsif value.is_a?(Exception) && !value.message.valid_encoding?
+ case value
+ when Array
+ !value.frozen? ? value.map! { |v| process v } : value.map { |v| process v }
+ when Hash
+ !value.frozen? ? value.merge!(value) { |_, v| process v } : value.merge(value) { |_, v| process v }
+ when Exception
+ return value if value.message.valid_encoding?
clean_exc = value.class.new(clean_invalid_utf8_bytes(value.message))
clean_exc.set_backtrace(value.backtrace)
clean_exc
- else
+ when String
+ return value if value.valid_encoding?
clean_invalid_utf8_bytes(value)
+ else
+ value
end
end
private
def clean_invalid_utf8_bytes(obj)
- if obj.respond_to?(:to_utf8)
- obj.to_utf8
- elsif obj.respond_to?(:encoding) && obj.is_a?(String)
- obj.encode('UTF-16', :invalid => :replace, :undef => :replace, :replace => '').encode('UTF-8')
- else
- obj
- end
+ obj.encode('UTF-16', :invalid => :replace, :undef => :replace, :replace => '').encode('UTF-8')
end
end
end