Можно ли рекурсивно требовать все файлы в каталоге в Ruby? - PullRequest
17 голосов
/ 05 декабря 2009

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

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

Ответы [ 6 ]

41 голосов
/ 05 декабря 2009

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

Dir["#{File.dirname(__FILE__)}/lib/**/*.rb"].each { |f| load(f) }
6 голосов
/ 05 декабря 2009
require "find"

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

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

4 голосов
/ 17 ноября 2014

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

    Dir[File.expand_path "lib/**/*.rb"].each{|f| require_relative(f)}
2 голосов
/ 23 февраля 2015

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

require 'require_all'
require_all './lib/exceptions/'
0 голосов
/ 05 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...