Ruby on rails 如何处理Rails Gem的配置

Ruby on rails 如何处理Rails Gem的配置,ruby-on-rails,ruby,rubygems,Ruby On Rails,Ruby,Rubygems,我正在为Rails发布我的第一个Gem。这很简单,但我需要提供一些设置配置选项的访问权限。我想让用户在“config/initializers”中添加一些内容,并将其与我的gem结合起来 所以,问题是:在Rails gem中提供配置选项是否有最佳实践 在我帮助开发的引擎中,我们对顶级常量使用mattr\u访问器,如下所示: Forem.user_class = 'User' Forem.autocomplete_field = :login lib/forem.rb module Forem

我正在为Rails发布我的第一个Gem。这很简单,但我需要提供一些设置配置选项的访问权限。我想让用户在“config/initializers”中添加一些内容,并将其与我的gem结合起来


所以,问题是:在Rails gem中提供配置选项是否有最佳实践

在我帮助开发的引擎中,我们对顶级常量使用
mattr\u访问器
,如下所示:

Forem.user_class = 'User'
Forem.autocomplete_field = :login
lib/forem.rb

module Forem
  mattr_accessor :user_class, :theme, :formatter, :default_gravatar, :default_gravatar_image,
                 :user_profile_links, :email_from_address, :autocomplete_field,
                 :avatar_user_method, :per_page
...
然后在
config/initializers
中,我们要求用户如下设置:

Forem.user_class = 'User'
Forem.autocomplete_field = :login
使用一个简短的gem名称,这个解决方案和我将提出的另一个解决方案没有太大区别


解决方案#2

仍然对顶级常量使用
mattr_访问器
,但在此模块上提供一个
config
方法,该方法获取一个块并生成对象:

module ReallyComplicatedGemName
  mattr_accessor :....
  def self.config(&block)
    yield(self)
  end
...
人们可以这样做:

ReallyComplicatedGemName.config do |config|
  config.user_class = "User"
  ...
end