Sha256: 7acade129b98926f561ca23ff41b6da5d43868b5d47528491506abd6cf07e88b

Contents?: true

Size: 1.22 KB

Versions: 3

Compression:

Stored size: 1.22 KB

Contents

require_relative "../dead_end/internals"

# Monkey patch kernel to ensure that all `require` calls call the same
# method
module Kernel
  alias_method :original_require, :require
  alias_method :original_require_relative, :require_relative
  alias_method :original_load, :load

  def load(file, wrap = false)
    original_load(file)
  rescue SyntaxError => e
    DeadEnd.handle_error(e)
  end

  def require(file)
    original_require(file)
  rescue SyntaxError => e
    DeadEnd.handle_error(e)
  end

  def require_relative(file)
    if Pathname.new(file).absolute?
      original_require file
    else
      original_require File.expand_path("../#{file}", caller_locations(1, 1)[0].absolute_path)
    end
  rescue SyntaxError => e
    DeadEnd.handle_error(e)
  end
end

# I honestly have no idea why this Object delegation is needed
# I keep staring at bootsnap and it doesn't have to do this
# is there a bug in their implementation they haven't caught or
# am I doing something different?
class Object
  private
  def load(path, wrap = false)
    Kernel.load(path, wrap)
  rescue SyntaxError => e
    DeadEnd.handle_error(e)
  end

  def require(path)
    Kernel.require(path)
  rescue SyntaxError => e
    DeadEnd.handle_error(e)
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
dead_end-1.0.2 lib/dead_end/auto.rb
dead_end-1.0.1 lib/dead_end/auto.rb
dead_end-1.0.0 lib/dead_end/auto.rb