Ruby 如何要求gem中目录中的所有文件?
我知道我可以使用Ruby 如何要求gem中目录中的所有文件?,ruby,rubygems,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
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
命令似乎不起作用,因为它似乎在运行时在我的项目根目录中查找文件路径(无论我从哪个项目需要gem)
如何要求
lib/my_gem/fileslib/my_gem.rb
中的所有文件?您可以使用find进行递归搜索,然后运行响应列表并逐行包含它们
差不多
`find #{root_path}/lib/my_gem/files/**/*.rb`.split("\n").each { |p| require p }
Rubygems有一个名为的工具,允许您基于加载路径中的任何内容进行搜索:
Gem.find_files("my_gem/files/**/*.rb").each { |path| require path }
这不是一种跨平台的方法。这会查找所有rb文件,而不仅仅是主文件,就像每个gem一样,你必须有一个require语句才能在应用程序中包含该gem,你不需要逐个查找所有文件,而是一个单独的文件。这也会查找spec目录中的文件。在我的例子中,Gem.find_文件('mygem/folder/*.rb')
产生-/mygem/lib/mygem/folder/xxx.rb
和-/mygem/spec/mygem/folder/xxx_spec.rb
。当然我们会拒绝规范文件,但是有更好的方法吗?