Я немного опоздал на этот вопрос, но оставлю пример реализации того, как я обычно это делаю, для дальнейшего использования.
Как уже упоминалось, вы обычно хотите разрешить настройку как с помощью файлов, так и с помощью хэшей. Довольно легко и легко включить оба способа, поэтому вам следует это сделать.
Что-то подобное работает для меня в большинстве сценариев:
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
Дополнительная рекомендация - использовать значения по умолчанию для всех ваших ключей конфигурации (как в примере выше). Таким образом, вы предоставляете пользователю максимальную свободу в настройке вашей библиотеки.