Устранить много require_relatives в проекте ruby - PullRequest
1 голос
/ 31 января 2012

Обычно в проекте ruby ​​есть папки lib, bin и spec (или test) (по крайней мере, в сгенерированном геме). Теперь в каждом файле в lib имеется много запросов require_relative, а также в файле spec (или test) уродливой require_relative '../lib/some_files'. Есть ли способ устранить все эти импорты require_relative? Я думаю, что есть какая-то хитрость с FILE , но я не знаю, какой именно.

1 Ответ

3 голосов
/ 31 января 2012

Вы можете сделать что-то вроде этого:

current_folder = File.expand_path('../', __FILE__) # get absolute directory
Dir["#{current_folder}/subfolder/**/*.rb"].each {|f| require f}

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

Но если эти файлы зависят друг от друга и должны быть загружены в определенном порядке, вам придется указать вручнуюrequire / require_relative в определенном порядке.


Также, если вам нужно устранить необходимость дублирования в spec и lib, вы можете пойти по этому пути: добавить файл с именем верхнего уровняпространство имен в корне вашей папки /lib, требуйте вложенные файлы отсюда, а затем требуйте этот единственный файл из /spec/spec_helper.rb:

# /lib/coolgem.rb
module CoolGem; end

current_folder = File.expand_path('../', __FILE__) 
Dir["#{current_folder}/coolgem/*.rb"].each {|f| require f}


# /spec/spec_helper.rb
require_relative '../lib/coolgem'

Это упрощенный пример, и вы можете иметь такие файлы инициализации для каждого вложенногомодуль и т. д.

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