Существует несколько стандартных способов реализовать то, что вы описываете.
Чтение из переменных среды
В каждом из этих сред хранится определенный параметр. Затем пользователи могут контролировать, хотят ли они изменить некоторые или все параметры.
- Плюсы : Стандартный и удобный способ как для разработчиков, так и для пользователей, при условии, что параметры редко изменяются,Параметры по умолчанию могут быть легко переданы в той же среде (например, в той же учетной записи или даже для всей платформы), а также в других программах.
- Минусы : немного затенены. Например, если работа пользователя с инструментом зарегистрирована в файле, другие люди (или даже сам пользователь позднее) не могут определить точный набор используемых параметров из файла журнала. Или, если пользователь хочет часто менять параметр, это неудобно.
Пример :
key_file = ENV['KEY_FILE'] || "henrb028.key"
Чтение из файла конфигурации
Тогда любой или оба пользователя и системный администратор могут контролировать и изменять его при необходимости. Как определить имя файла конфигурации файла варьируется.
- Плюсы : Подходит для хранения большого набора параметров.
- Минусы Несколько затуманено. Например, если работа пользователя с инструментом зарегистрирована в файле, другие люди (или даже сам пользователь позже) не могут сказать, каким был точный набор используемых параметров. Если пользователь хочет часто менять параметр, это очень неудобно.
A (сырой!) Пример :
Предположим, что /etc/OUR_CONFIG.txt
выглядит следующим образом,
CONSUMER_FILE: henrb028.consumer
KEY_FILE: henrb028.key
Затем прочитайте их как,
opts = { 'KEY_FILE' => 'default.key' }
IO.readlines("/etc/OUR_CONFIG.txt").each do |ec|
a = ec.strip.split(/\s*:\s*/)
opts[a[0]] = a[1]
end
p opts
Укажите с параметрами командной строки
Если некоторые (или все) параметры не указаны при запускевремя должно вернуться к значению по умолчанию . OptionParser (как предложил @tadaman в своем комментарии) - это мощная и универсальная библиотека для обработки параметров командной строки.
- Pros : Standard andудобный способ для пользователей, особенно для быстрой смены во время выполнения. Если вы видите файл журнала, вы знаете, что именно сделал пользователь.
- Минусы : Параметры по умолчанию не могут совместно использоваться другими инструментами. Чтобы обойти проблему, есть несколько способов сделать резервную процедуру:
- Просто жестко закодируйте значение по умолчанию в основном коде.
- Сохраните значение по умолчанию в переменной среды.
- Сохраните значение по умолчанию в файле конфигурации. Разработчик должен решить, как определить имя файла конфигурации (жесткое кодирование, переменная окружения и т. Д.).
Грубый пример (безиспользуя OptionParser):
opts = { 'key_file' => 'default.key' }
%w(consumer_file key_file).each do |ec|
cands = ARGV.grep(/^--#{Regexp.quote ec}=.+/)
opts[ec] = cands[0].split('=')[1] unless cands.empty?
end
p opts
Я думаю, что это наиболее типичные способы, хотя есть и другие способы!