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

nee*_*zer 9 ruby rubygems

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

Dir['path/to/files/**/*.rb'].each { |file| require file }
Run Code Online (Sandbox Code Playgroud)

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

class MyGem
  module NS; end
end

Dir['lib/my_gem/files/**/*.rb'].each { |file| require file }
Run Code Online (Sandbox Code Playgroud)

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

lib                              
|-- my_gem                        
|   |-- files              
|   |   |-- file1.rb       
|   |   |-- file2.rb         
|   |   |-- file3.rb         
|   |   `-- ... (many more)      
`-- my_gem.rb                     
my_gem.gemspec
Run Code Online (Sandbox Code Playgroud)

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

我怎么能要求中的所有文件lib/my_gem/fileslib/my_gem.rb

Jos*_*eek 13

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

Gem.find_files("my_gem/files/**/*.rb").each { |path| require path }
Run Code Online (Sandbox Code Playgroud)