Где разместить/получить конфигурационный файл в gem?
Я пишу свой первый драгоценный камень, и я бы хотел, чтобы определенные параметры были получены и установлены пользователем через файл config.yml.
Где этот файл должен быть помещен в мою структуру файла gem и как кто-то модифицирует файл при установке моего драгоценного камня? Я предполагаю, что они могут передавать определенные параметры при установке gem, и эти параметры могут быть сопоставлены с файлом config.yml, но как это возможно?
Кроме того, лучший способ получить файл через YAML.load_file?
Я смотрел радиопередачи Райана о создании драгоценного камня через Bundler, но он не затрагивает эту тему.
Ответы
Ответ 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, который вы можете читать и анализировать.
Но попытка установить соглашение об именах файлов из драгоценного камня, вероятно, не то, что вы хотите.
Ответ 4
Другой шаблон без использования файлов конфигурации:
YourGem.configure do |config|
config.api_key = 'your_key_here'
end
https://robots.thoughtbot.com/mygem-configure-block