我正在构建一个Ruby gem,需要验证配置调用。 我的要求是:
我的第一种方法如下:
configuration.rb
module Configuration
def define_setting(name, default: nil)
class_variable_set("@@#{name}", default)
define_singleton_method(name) do
class_variable_get("@@#{name}")
end
define_singleton_method("#{name}=") do |value|
class_variable_set("@@#{name}", value)
end
end
end
gem.rb
module Gem
extend Configuration
define_setting :api_url, default: DEFAULT_API_URL
end
gem_initializer.rb
Gem.configuration do |c|
c.api_url = ENV['DEFAULT_API_URL']
end
我删除了验证包含的代码,但这非常简单。问题是尝试验证所需的值。我基本上可以向required: true
方法添加define_setting
参数,将其保存在数组中,并检查configuration
调用是否设置了所有必需的值。我发现这有点太复杂了。
另一种方法是将所有配置逻辑移到Configuration
模块中,创建初始化方法并检查api_url
是否通过。
class Configuration
attr_accessor :api_url
def initialize(api_url)
@api_url = api_url
message = "Configuration value 'api_url' is required."
raise StandardError, message if @api_url.to_s.empty?
end
end
,初始化程序看起来像:
Gem::Configuration.new(api_url: ENV['DEFAULT_API_URL'])
希望我的解释有意义。有没有人知道最好的方法是什么?