Подтвердить что ты не робот

Где разместить/получить конфигурационный файл в gem?

Я пишу свой первый драгоценный камень, и я бы хотел, чтобы определенные параметры были получены и установлены пользователем через файл config.yml.

Где этот файл должен быть помещен в мою структуру файла gem и как кто-то модифицирует файл при установке моего драгоценного камня? Я предполагаю, что они могут передавать определенные параметры при установке gem, и эти параметры могут быть сопоставлены с файлом config.yml, но как это возможно?

Кроме того, лучший способ получить файл через YAML.load_file?

Я смотрел радиопередачи Райана о создании драгоценного камня через Bundler, но он не затрагивает эту тему.

4b9b3361

Ответ 1

Я немного подпрыгиваю на этом, но я оставлю пример реализации того, как я вообще справляюсь с этим, для справок в будущем.

Как уже упоминалось, вы обычно хотите разрешить конфигурацию с помощью обоих файлов и хэшей. Это довольно легко и легко включить оба пути, поэтому вы должны это сделать.

Что-то вроде этого работает для меня в большинстве сценариев:

require 'yaml'

module MyGem
  # Configuration defaults
  @config = {
              :log_level => "verbose",
              :min => 0,
              :max => 99 
            }

  @valid_config_keys = @config.keys

  # Configure through hash
  def self.configure(opts = {})
    opts.each {|k,v| @config[k.to_sym] = v if @valid_config_keys.include? k.to_sym}
  end

  # Configure through yaml file
  def self.configure_with(path_to_yaml_file)
    begin
      config = YAML::load(IO.read(path_to_yaml_file))
    rescue Errno::ENOENT
      log(:warning, "YAML configuration file couldn't be found. Using defaults."); return
    rescue Psych::SyntaxError
      log(:warning, "YAML configuration file contains invalid syntax. Using defaults."); return
    end

    configure(config)
  end

  def self.config
    @config
  end
end

Добавленная передовая практика будет заключаться в том, чтобы иметь значения по умолчанию для всех ваших ключей конфигурации (как в примере выше). Таким образом, вы предоставляете пользователю максимальную свободу в том, как они могут настроить вашу библиотеку.

Ответ 2

Если ваш драгоценный камень включает в себя команду, которая может быть запущена пользователем пользователем, лучше всего запросить любые необходимые сведения о первом запуске. Хорошее место для сохранения конфигурации будет в домашнем каталоге пользователя как dot файл.

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

Ответ 3

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

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