如何在gem中的目录中要求所有文件?

时间:2012-07-23 17:44:18

标签: ruby rubygems

我知道我可以使用

来要求目录中的所有文件
Dir['path/to/files/**/*.rb'].each { |file| require file }

但是,我正在尝试为gem设置文件执行此操作,如下所示:

class MyGem
  module NS; end
end

Dir['lib/my_gem/files/**/*.rb'].each { |file| require file }

lib/my_gem/files中的所有文件都在MyGem :: NS下命名空间)。使用如下所示的目录结构:

lib                              
|-- my_gem                        
|   |-- files              
|   |   |-- file1.rb       
|   |   |-- file2.rb         
|   |   |-- file3.rb         
|   |   `-- ... (many more)      
`-- my_gem.rb                     
my_gem.gemspec

而且,当我在另一个文件中需要我的gem时,Dir命令似乎不起作用,因为它似乎在我的项目根目录中查找文件路径(任何项目我我需要我的宝石。

我如何要求lib/my_gem/files中的lib/my_gem.rb中的所有文件?

2 个答案:

答案 0 :(得分:13)

Rubygems有一个名为find_files的工具,它允许您在加载路径中搜索任何内容:

Gem.find_files("my_gem/files/**/*.rb").each { |path| require path }

答案 1 :(得分:-1)

您可以使用 find 进行递归搜索,然后运行响应列表并逐行包含它们。

这样的东西
`find #{root_path}/lib/my_gem/files/**/*.rb`.split("\n").each { |p| require p }