Module: Wright::Util::RecursiveAutoloader
- Defined in:
- lib/wright/util/recursive_autoloader.rb
Overview
Internal: Recursive autoloader, recursively adds autoloads for all files in a directory.
Class Method Summary collapse
-
.add_autoloads(directory, parent_class) ⇒ Object
Internal: Adds autoloads for all files in a directory to a parent class.
Class Method Details
.add_autoloads(directory, parent_class) ⇒ Object
Internal: Adds autoloads for all files in a directory to a parent class.
Registers all files in directory to be autoloaded the first time ParentClass::CamelCased::FileName is accessed.
directory - The path of the directory containing the files to
be autoloaded.
parent_class - The parent class to add the autoloads to.
Examples
require 'fileutils'
# set up a test directory
FileUtils.cd '/tmp'
FileUtils.mkdir_p 'somedir/foo'
File.write('somedir/foo/bar_baz.rb', 'class Root::Foo::BarBaz; end')
# define a root class, add an autoload
class Root; end
Wright::Util::RecursiveAutoloader.add_autoloads('somedir', 'Root')
# Root::Foo::BarBaz is going to be autoloaded
Root::Foo.autoload? 'BarBaz'
# => "/tmp/somedir/foo/bar_baz.rb"
# instantiate Root::Foo::BarBaz, somedir/foo/bar_baz.rb is loaded
= Root::Foo::BarBaz.new
.class
# => Root::Foo::BarBaz
# at this point, somedir/foo/bar_baz.rb has already been loaded
Root::Foo.autoload? 'BarBaz'
# => nil
Returns nothing. Raises ArgumentError if the parent class cannot be resolved.
47 48 49 50 51 52 |
# File 'lib/wright/util/recursive_autoloader.rb', line 47 def self.add_autoloads(directory, parent_class) unless class_exists?(parent_class) fail ArgumentError, "Can't resolve parent_class #{parent_class}" end add_autoloads_unsafe(directory, parent_class) end |