class AutoAutoloader
Public Class Methods
autoload_sub_classes(base, path)
click to toggle source
# 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
new(args)
click to toggle source
# File lib/auto_autoloader.rb, line 14 def initialize(args) @base = args.fetch(:base) @path = args.fetch(:path) end
Public Instance Methods
autoload_by_active_support_and_file_scan()
click to toggle source
# 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 # rubocop:disable Lint/HandleExceptions # The directory doesn't exist. Don't autoload it. end
autoload_with_sub_class_autoloader()
click to toggle source
# 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?()
click to toggle source
# File lib/auto_autoloader.rb, line 43 def rails? @rails ||= ::Object.const_defined?("Rails") end