我知道我可以使用
来要求目录中的所有文件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
中的所有文件?
答案 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 }