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/filesMyGem::NS の下に名前空間が設定されています)。次のようなディレクトリ構造を使用します。

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

そして、まあ、Dir別のファイルで宝石を要求すると、コマンドが機能しないようです。これは、実行時にプロジェクトルート (宝石を要求したプロジェクトのいずれか) でファイルパスを検索するように見えるためです。

のすべてのファイルを要求するにはどうすればよいlib/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を使用して再帰検索を実行し、応答リストを実行して、それらを 1 行ずつ含めることができます。

何かのようなもの

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