Sha256: b8eb9013f6af8d90e73582c7f1ebfd55e74aefb5cecc4bcc305021a6524dbb53

Contents?: true

Size: 760 Bytes

Versions: 3

Compression:

Stored size: 760 Bytes

Contents

begin
  require "binding_of_caller"
  binding_of_caller_available = true
rescue LoadError => e
  binding_of_caller_available = false
end

if binding_of_caller_available
  class NameError
    original_set_backtrace = instance_method(:set_backtrace)

    define_method :set_backtrace do |*args|
      unless Thread.current[:__did_you_mean_exception_lock]
        Thread.current[:__did_you_mean_exception_lock] = true
        begin
          @__did_you_mean_bindings_stack = binding.callers.drop(1)
        ensure
          Thread.current[:__did_you_mean_exception_lock] = false
        end
      end
      original_set_backtrace.bind(self).call(*args)
    end
  
    def __did_you_mean_bindings_stack
      @__did_you_mean_bindings_stack || []
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
did_you_mean-0.3.0 lib/did_you_mean/core_ext/name_error.rb
did_you_mean-0.2.0 lib/did_you_mean/core_ext/name_error.rb
did_you_mean-0.1.0 lib/did_you_mean/core_ext/name_error.rb