11

我知道我可以使用目录中的所有文件

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

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

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

4

2 回答 2

15

Rubygems 有一个名为find_files的工具,可让您根据加载路径中的任何内容进行搜索:

Gem.find_files("my_gem/files/**/*.rb").each { |path| require path }
于 2012-07-23T18:19:24.823 回答
-1

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

就像是

`find #{root_path}/lib/my_gem/files/**/*.rb`.split("\n").each { |p| require p }
于 2012-07-23T17:56:13.370 回答