Sha256: 06d808181c9525afa1fa9b01308ce90b379a0e7e9069208603a75a39134775b9
Contents?: true
Size: 1.38 KB
Versions: 6
Compression:
Stored size: 1.38 KB
Contents
# frozen_string_literal: true require "delegate" module ActiveSupport # This is a class for wrapping syntax errors. The purpose of this class # is to enhance the backtraces on SyntaxError exceptions to include the # source location of the syntax error. That way we can display the error # source on error pages in development. class SyntaxErrorProxy < DelegateClass(SyntaxError) # :nodoc: def backtrace parse_message_for_trace + super end class BacktraceLocation < Struct.new(:path, :lineno, :to_s) # :nodoc: def spot(_) end def label end end class BacktraceLocationProxy < DelegateClass(Thread::Backtrace::Location) # :nodoc: def initialize(loc, ex) super(loc) @ex = ex end def spot(_) super(@ex.__getobj__) end end def backtrace_locations parse_message_for_trace.map { |trace| file, line = trace.match(/^(.+?):(\d+).*$/, &:captures) || trace BacktraceLocation.new(file, line.to_i, trace) # We have to wrap these backtrace locations because we need the # spot information to come from the originating exception, not the # proxy object that's generating these } + super.map { |loc| BacktraceLocationProxy.new(loc, self) } end private def parse_message_for_trace __getobj__.to_s.split("\n") end end end
Version data entries
6 entries across 6 versions & 1 rubygems