Class: AutoAutoloader
- Inherits:
-
Object
show all
- Defined in:
- lib/auto_autoloader.rb
Defined Under Namespace
Classes: SubClassAutoloader
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of AutoAutoloader.
14
15
16
17
|
# File 'lib/auto_autoloader.rb', line 14
def initialize(args)
@base = args.fetch(:base)
@path = args.fetch(:path)
end
|
Class Method Details
.autoload_sub_classes(base, path) ⇒ Object
4
5
6
7
8
9
10
11
12
|
# File 'lib/auto_autoloader.rb', line 4
def self.autoload_sub_classes(base, path)
loader = ::AutoAutoloader.new(base: base, path: path)
if loader.rails?
loader.autoload_by_active_support_and_file_scan
else
loader.autoload_with_sub_class_autoloader
end
end
|
Instance Method Details
#autoload_by_active_support_and_file_scan ⇒ Object
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/auto_autoloader.rb', line 29
def autoload_by_active_support_and_file_scan
dir_path = "#{::File.dirname(@path)}/#{::StringCases.camel_to_snake(@base.name.split("::").last)}"
::Dir.foreach(dir_path) do |file|
next unless (match = file.match(/\A(.+)\.rb\Z/))
const_snake_case = match[1]
const_camel_case = ::StringCases.snake_to_camel(const_snake_case)
@base.autoload(const_camel_case, "#{dir_path}/#{file}")
end
rescue Errno::ENOENT end
|
#autoload_with_sub_class_autoloader ⇒ Object
19
20
21
22
23
24
25
26
27
|
# File 'lib/auto_autoloader.rb', line 19
def autoload_with_sub_class_autoloader
require_relative "auto_autoloader/sub_class_autoloader"
@base.extend ::AutoAutoloader::SubClassAutoloader::ClassMethods
path = @path
@base.class_eval do
@autoload_path = ::File.dirname(path)
end
end
|
#rails? ⇒ Boolean
43
44
45
|
# File 'lib/auto_autoloader.rb', line 43
def rails?
@rails ||= ::Object.const_defined?("Rails")
end
|