2012-07-23 11 views
7

So che posso richiedere tutti i file in una directory utilizzandoCome richiedere tutti i file in una directory, in una gemma?

Dir['path/to/files/**/*.rb'].each { |file| require file } 

Tuttavia, sto cercando di farlo per un file di installazione gioiello, in questo modo:

class MyGem 
    module NS; end 
end 

Dir['lib/my_gem/files/**/*.rb'].each { |file| require file } 

(dove tutte le i file in lib/my_gem/files sono assegnati ai nomi in MyGem :: NS). Con una struttura di directory che assomiglia a questo:

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

E, beh, il comando Dir non sembra funzionare quando ho bisogno il mio gioiello in un altro file, dal momento che sembra di cercare i percorsi dei file in fase di esecuzione nel mio progetto root (di qualunque progetto ho richiesto il mio gioiellino).

Come posso richiedere tutti i file in lib/my_gem/files in lib/my_gem.rb?

risposta

11

Rubygems ha una struttura chiamata find_files che vi permetterà di cercare in base nulla nel percorso di carico:

Gem.find_files("my_gem/files/**/*.rb").each { |path| require path } 
+0

+1 Proprio quello che stavo cercando! – neezer

+0

Trova tutti i file rb e non solo i file principali, come ogni gemma che deve avere una singola istruzione require per includere quella gemma in app, non è necessario richiedere tutti i file uno per uno, ma uno solo –

-1

È possibile eseguire una ricerca ricorsiva utilizzando , trovare e quindi eseguire l'elenco di risposte e includerle riga per riga.

qualcosa come

`find #{root_path}/lib/my_gem/files/**/*.rb`.split("\n").each { |p| require p } 
+0

Questo non sarebbe un approccio multi-piattaforma. –

Problemi correlati