构建Ruby gem时最好的配置模式是什么?

时间:2016-09-26 08:28:01

标签: ruby rubygems

我正在构建一个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'])

希望我的解释有意义。有没有人知道最好的方法是什么?

0 个答案:

没有答案