loadpath_manager.rb

来自「Amarok是一款在LINUX或其他类UNIX操作系统中运行的音频播放器软件。 」· RB 代码 · 共 115 行

RB
115
字号
#--# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.# All rights reserved.# See LICENSE.txt for permissions.#++module Kernel  alias require__ require  def require(file)    Gem::LoadPathManager.search_loadpath(file) || Gem::LoadPathManager.search_gempath(file)    require__(file)  endendmodule Gem  module LoadPathManager    @paths = nil    # These local versions of Gem::Version and Gem::Specification are    # used by the load path manager because they are faster than the    # fully functional ones.  Full functionality is not required    # during the load phase.    module Gem      class Version        class Requirement          def initialize(string)          end        end      end      class Specification        def initialize(&block)          @require_paths = ['lib']          @platform = nil          yield self        end        attr_reader :version        attr_accessor :files, :require_paths, :name        def platform=(platform)          @platform = platform unless platform == "ruby"        end        def requirements; []; end        def version=(version)          @version = ::Gem::Version.create(version)        end        def full_name          @full_name ||=            if @platform.nil? || @platform == "ruby" || @platform == ""              "#{@name}-#{@version}"            else              "#{@name}-#{@version}-#{@platform}"            end        end        def method_missing(method, *args)        end        def <=>(other)          r = @name<=>other.name          r = other.version<=>@version if r == 0          r        end	def to_s	  "#<Gem::Specification name=#{@name} version=#{@version} quick=true>"	end      end    end    def self.paths      @paths    end    # Prep the list of potential paths for require file resolution.    def self.build_paths      @specs ||= []      @paths = []      ::Gem.path.each do |gempath|        newspecs = Dir.glob("#{gempath}/specifications/*.gemspec").collect { |specfile|	  eval(File.read(specfile))	}.sort        @specs.concat(newspecs)        newspecs.each do |spec|          spec.require_paths.each {|path| @paths << "#{gempath}/gems/#{spec.full_name}/#{path}"}        end      end    end        # True if the file can be resolved with the existing load path.    def self.search_loadpath(file)      glob_over($LOAD_PATH, file).size > 0    end        def self.search_gempath(file)      build_paths unless @paths      fullname = glob_over(@paths, file).first      return false unless fullname      @specs.each do |spec|        if fullname.include?("/#{spec.full_name}/")          ::Gem.activate(spec.name, false, spec.version.to_s)           return true        end      end      false    end    private    SUFFIX_PATTERN = "{,.rb,.so,.bundle,.dll,.sl}"    def self.glob_over(list, file)      files = Dir.glob("{#{(list).join(',')}}/#{file}#{SUFFIX_PATTERN}").map{|x| Marshal.load(Marshal.dump(x))}      files.delete_if { |f| File.directory?(f) }    end      endend

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?