Лучший способ описать зависимости скрипта в Ruby Gem - где мне это нужно? - PullRequest
0 голосов
/ 15 октября 2018

Я новичок в мире Ruby и начал создавать свой первый драгоценный камень Ruby.

Я заметил, что require совсем не то, что я ожидал.Допустим, в моем геме есть следующие скрипты

-  My Gem
  -  lib
       script-1.rb
       script-2.rb
       script-3.rb
       ...
       main.rb
  + bin
  + exe
  ...

В exe я называю main.rb - основную точку входа для моего гема.

Он использует класс из script-1.rb сделать свою работу.script-1.rb от его имени зависит от кода script-2.rb.И так далее.

Вот мой вопрос.

Где лучшее место для require сценариев.В основном с точки зрения ремонтопригодности.Допустим, что при жизни моего исполняемого файла все скрипты будут загружены в любом случае.Я вижу 2 варианта:

  1. require все сценарии для моего приложения в main.rb
  2. Каждый сценарий выполняет require только для сценариев, от которых зависит.
  3. Введение нового загрузочного скрипта

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

Итак, какова лучшая практика здесь.Я бы предпочел создать отдельный скрипт для инициализации - например, определение зависимостей моего драгоценного камня, но мне было интересно, есть ли лучший подход, который я пропускаю?Как вы описываете приличия между скриптами в ваших драгоценных камнях?

1 Ответ

0 голосов
/ 15 октября 2018

Если ваш драгоценный камень не работает с Bundler из коробки, заявив:

gem 'mygem'

Тогда вы должны объяснить в документации, почему.Некоторые драгоценные камни по неразрешимым техническим причинам требуют загрузки в определенные файлы или рекомендуют их в некоторых случаях.Сам Bundler является одним из таких драгоценных камней:

require 'bundler/setup'

Где он не только загрузит Bundler, но и запустит настройку среды Bundler и импортирует настройки Gemfile.

Обычно ваш гем должен иметьфайл основной библиотеки с тем же именем, что и сам гем, и который заботится о загрузке всех зависимостей.

Например, mygem выглядит так:

mygem.rb
mygem/some_module.rb
mygem/other_module.rb

Где основной mygem выглядит следующим образом:

module MyGem
  # ...
end

require_relative './mygem/some_module'
require_relative './mygem/other_module'

Вызовы require упорядочены таким образом, чтобы все зависимости должным образом учитывались.

Если у вас есть модуль, который имеет другие собственные зависимости,шаблон повторяется, как в mygem/submodule.rb:

module MyGem::Submodule
  # ...
end

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