Можно ли рекурсивно потребовать все файлы в каталоге в Ruby?

Я работаю над API, который должен загружать все файлы .rb в его текущем каталоге и во всех подкаталогах. В настоящее время я вхожу в новую инструкцию require для каждого добавляемого файла, но я хотел бы сделать это там, где мне нужно разместить файл только в одном из подкаталогов и добавить его автоматически.

Есть ли стандартная команда для этого?

Ответы

Ответ 1

В этом случае он загружает все файлы в каталоге lib:

Dir["#{File.dirname(__FILE__)}/lib/**/*.rb"].each { |f| load(f) }

Ответ 2

require "find"

Find.find(folder) do |file|
  next if File.extname(file) != ".rb"
  puts "loading #{file}"
  load(file)
end

Это будет рекурсивно загружать каждый .rb файл.

Ответ 3

как сказал Мигель Фонсека, но в рубине >= 2 вы можете сделать:

    Dir[File.expand_path "lib/**/*.rb"].each{|f| require_relative(f)}

Ответ 4

Я использую gem require_all все время, и он выполняет задание со следующим шаблоном в вашем запросе:

require 'require_all'
require_all './lib/exceptions/'

Ответ 5

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 есть какие-либо противоречивые определения, они могут быть разрешены каким-то неочевидным образом (в алфавитном порядке по названию папки/файла, которое я считаю).

Ответ 6

Вы должны посмотреть на gem. Он довольно мал, поэтому вы можете повторно использовать код вместо установки всего драгоценного камня.