Module: Fastup

Defined in:
lib/fastup.rb

Defined Under Namespace

Modules: XFile Classes: SearchPath

Class Method Summary collapse

Class Method Details

.apply!Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/fastup.rb', line 21

def self.apply!
  @sp = SearchPath.new($LOAD_PATH)
  @suffixes = Gem.suffixes.lazy

  instance_require = Kernel.instance_method(:require)
  require = Kernel.method(:require)

  Kernel.send(:define_method, :require) do |name|
    Fastup.require(name, instance_require.bind(self))
  end

  Kernel.singleton_class.send(:define_method, :require) do |name|
    Fastup.require(name, require)
  end
end

.require(name, original_require) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/fastup.rb', line 2

def self.require(name, original_require)
  path = @suffixes.map{ |s| @sp.lookup(name.to_s + s) rescue nil }.find do |p|
    p && File.file?(p)
  end

  # require the absolute path if found, otherwise fallback to original name
  ret = original_require.call(path || name)

  if ret && ENV['FASTUP_DEBUG']
    if path
      warn "fastup: loaded #{name} => #{path}"
    else
      warn "fastup: super #{name}"
    end
  end

  ret
end