aboutsummaryrefslogblamecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/load_error.rb
blob: cd00d1b662796525aeb0b0bd8fe90ca4d7fd6767 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                    
                                                   
 




                                             
                                       
   
 
                               
                                                     





                               
         
       
     
 
                                                                     
                                                                           
                           
                                                                    
     
   
 
                                                                                                             
require "active_support/deprecation"
require "active_support/deprecation/proxy_wrappers"

class LoadError
  REGEXPS = [
    /^no such file to load -- (.+)$/i,
    /^Missing \w+ (?:file\s*)?([^\s]+.rb)$/i,
    /^Missing API definition file in (.+)$/i,
    /^cannot load such file -- (.+)$/i,
  ]

  unless method_defined?(:path)
    # Returns the path which was unable to be loaded.
    def path
      @path ||= begin
        REGEXPS.find do |regex|
          message =~ regex
        end
        $1
      end
    end
  end

  # Returns true if the given path name (except perhaps for the ".rb"
  # extension) is the missing file which caused the exception to be raised.
  def is_missing?(location)
    location.sub(/\.rb$/, "".freeze) == path.sub(/\.rb$/, "".freeze)
  end
end

MissingSourceFile = ActiveSupport::Deprecation::DeprecatedConstantProxy.new("MissingSourceFile", "LoadError")