在gem中获取自动加载路径功能

时间:2013-07-15 04:10:41

标签: ruby ruby-on-rails-3

我非常喜欢rails:root / app目录中的rails自动加载路径。我想在我创建的gem中做类似的事情,而不是在任何地方使用显式的ruby自动加载。

2 个答案:

答案 0 :(得分:2)

Autoload定义从模块(通过符号或字符串)到文件名的映射。

如果要自动加载目录中的所有文件,则需要一种方法来了解文件所代表的模块,而无需打开它。

您可以按照命名约定来实现此目的。假设您将约定封装在方法filename_to_module中,那么您需要做的就是递归遍历文件夹并调用autoload(filename_to_module(filename), filename)

这样的事情:

libdirs = File.join("**", "lib")
Dir.glob(libdirs).each{ |filename| 
    autoload( filename_to_module(filename), filename) 
}

我在filename_to_module函数中使用String#camelize之类的内容。我可能自己实现它,除非我已经依赖ActiveSupport

答案 1 :(得分:0)

您也可以使用 rails 的 activesupport。

添加到您的 gemfile:

gem 'activesupport', require: 'active_support/dependencies'

然后你可以自动加载:ActiveSupport::Dependencies.autoload_paths += %w[your/path/here]

感谢 Nando Vieira:https://nandovieira.com.br/usando-o-autoloading-do-activesupport