Ответ 1
В этом случае он загружает все файлы в каталоге lib:
Dir["#{File.dirname(__FILE__)}/lib/**/*.rb"].each { |f| load(f) }
Я работаю над API, который должен загружать все файлы .rb в его текущем каталоге и во всех подкаталогах. В настоящее время я вхожу в новую инструкцию require для каждого добавляемого файла, но я хотел бы сделать это там, где мне нужно разместить файл только в одном из подкаталогов и добавить его автоматически.
Есть ли стандартная команда для этого?
В этом случае он загружает все файлы в каталоге lib:
Dir["#{File.dirname(__FILE__)}/lib/**/*.rb"].each { |f| load(f) }
require "find"
Find.find(folder) do |file|
next if File.extname(file) != ".rb"
puts "loading #{file}"
load(file)
end
Это будет рекурсивно загружать каждый .rb
файл.
как сказал Мигель Фонсека, но в рубине >= 2 вы можете сделать:
Dir[File.expand_path "lib/**/*.rb"].each{|f| require_relative(f)}
Я использую gem require_all все время, и он выполняет задание со следующим шаблоном в вашем запросе:
require 'require_all'
require_all './lib/exceptions/'
def rLoad(dir)
Dir.entries(dir).each {|f|
next if f=='.' or f=='..'
if File.directory?(f)
rInclude(f)
else
load(f) if File.fnmatch('*.rb', f)
end
}
end
Это должно рекурсивно load
все .rb файлы в каталоге, указанном dir
. Например, rLoad Dir.pwd
будет работать с текущим рабочим каталогом.
Будьте осторожны, делая это. Это делает поиск по глубине и, если в ваших сценариях Ruby есть какие-либо противоречивые определения, они могут быть разрешены каким-то неочевидным образом (в алфавитном порядке по названию папки/файла, которое я считаю).
Вы должны посмотреть на gem. Он довольно мал, поэтому вы можете повторно использовать код вместо установки всего драгоценного камня.