Module: Requirium

Defined in:
lib/requirium.rb,
lib/version.rb

Overview

Automatically calls Kernel#load or Kernel#require on first use. Example usage:

module M
  extend Requirium

  autoload :A
  autoload :B, 'b', 'b1', 'b2'
  autoload A: nil, B: ['b', 'b1', 'b2']
  autoload_relative :X
  autoload_relative :Y, 'y', 'y1', 'y2'
  autoload_relative X: nil, Y: ['y', 'y1', 'y2']

  autorequire :A
  autorequire :B, 'b', 'b1', 'b2'
  autorequire A: nil, B: ['b', 'b1', 'b2']
  autorequire_relative :X
  autorequire_relative :Y, 'y', 'y1', 'y2'
  autorequire_relative X: nil, Y: ['y', 'y1', 'y2']
end

Defined Under Namespace

Classes: ConstInfo, LoadLoader, RequireLoader

Constant Summary collapse

VERSION =
'0.0.3'.freeze

Class Attribute Summary collapse

Instance Method Summary collapse

Class Attribute Details

.loader_threadObject (readonly)

Returns the value of attribute loader_thread.



50
51
52
# File 'lib/requirium.rb', line 50

def loader_thread
  @loader_thread
end

.queueObject (readonly)

Returns the value of attribute queue.



50
51
52
# File 'lib/requirium.rb', line 50

def queue
  @queue
end

Instance Method Details

#autoload(*args) ⇒ Object



53
54
55
# File 'lib/requirium.rb', line 53

def autoload(*args)
  add_loader LoadLoader, args
end

#autoload_relative(*args) ⇒ Object



57
58
59
# File 'lib/requirium.rb', line 57

def autoload_relative(*args)
  add_loader LoadLoader, args, File.dirname(caller(1, 1)[0][/^(.+):\d+:in `.+'$/, 1])
end

#autorequire(*args) ⇒ Object



61
62
63
# File 'lib/requirium.rb', line 61

def autorequire(*args)
  add_loader RequireLoader, args
end

#autorequire_relative(*args) ⇒ Object



65
66
67
# File 'lib/requirium.rb', line 65

def autorequire_relative(*args)
  add_loader RequireLoader, args, File.dirname(caller(1, 1)[0][/^(.+):\d+:in `.+'$/, 1])
end

#const_missing(sym) ⇒ Object

def const_defined?(*args)

Requirium.synchronize { super }

end



73
74
75
76
77
78
79
# File 'lib/requirium.rb', line 73

def const_missing(sym)
  return internal_load(sym) if Thread.current == Requirium.loader_thread

  Requirium.queue.push(info = ConstInfo.new(self, sym))
  info.wait_ready
  const_defined?(sym) ? const_get(sym) : super
end