Sha256: edec0e53a441b771323787d63ac9600d04b628231deb38474155dbe437b87db1

Contents?: true

Size: 949 Bytes

Versions: 8

Compression:

Stored size: 949 Bytes

Contents

# frozen_string_literal: true

# Exeption overrides
class ::Exception
  class << self
    attr_accessor :__disable_sanitized_backtrace__
  end

  attr_accessor :source_fiber, :raising_fiber

  alias_method :orig_initialize, :initialize
  def initialize(*args)
    @raising_fiber = Fiber.current
    orig_initialize(*args)
  end

  alias_method :orig_backtrace, :backtrace
  def backtrace
    unless @backtrace_called
      @backtrace_called = true
      return orig_backtrace
    end

    sanitized_backtrace
  end

  def sanitized_backtrace
    return sanitize(orig_backtrace) unless @raising_fiber

    backtrace = orig_backtrace || []
    sanitize(backtrace + @raising_fiber.caller)
  end

  POLYPHONY_DIR = File.expand_path(File.join(__dir__, '..'))

  def sanitize(backtrace)
    return backtrace if ::Exception.__disable_sanitized_backtrace__

    backtrace.reject { |l| l[POLYPHONY_DIR] }
  end

  def invoke
    Kernel.raise(self)
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
polyphony-0.79 lib/polyphony/extensions/exception.rb
polyphony-0.78 lib/polyphony/extensions/exception.rb
polyphony-0.77 lib/polyphony/extensions/exception.rb
polyphony-0.76 lib/polyphony/extensions/exception.rb
polyphony-0.75 lib/polyphony/extensions/exception.rb
polyphony-0.74 lib/polyphony/extensions/exception.rb
polyphony-0.73.1 lib/polyphony/extensions/exception.rb
polyphony-0.73 lib/polyphony/extensions/exception.rb