我正在写我的第一个gem,我希望用户通过配置检索和设置特定的选项.yml文件.
这个文件应该放在我的gem文件 struct 中的什么位置?安装我的gem时,有人如何修改文件?我猜他们可以在安装gem时传递特定的选项,这些选项可以映射到配置.yml文件,但这怎么可能呢?
此外,也是通过YAML检索文件的最佳方式.加载文件?
我看过Ryan关于通过Bundler创建gem的Railcast,但他没有涉及这个话题.
我正在写我的第一个gem,我希望用户通过配置检索和设置特定的选项.yml文件.
这个文件应该放在我的gem文件 struct 中的什么位置?安装我的gem时,有人如何修改文件?我猜他们可以在安装gem时传递特定的选项,这些选项可以映射到配置.yml文件,但这怎么可能呢?
此外,也是通过YAML检索文件的最佳方式.加载文件?
我看过Ryan关于通过Bundler创建gem的Railcast,但他没有涉及这个话题.
我现在讨论这个问题有点晚了,但我会留下一个我通常如何处理这个问题的示例实现,以供将来参考.
正如前面提到的,您通常希望允许通过文件和散列进行配置.这两种方法都很简单,也很简单,所以你应该这样做.
在大多数情况下,这样的方法对我都适用:
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
另外一个最佳实践是为所有配置密钥设置默认值(如上面的示例所示).这样,用户就可以自由地配置您的库.