如何处理Rails Gem的配置

时间:2012-04-18 17:18:36

标签: ruby-on-rails ruby rubygems

我正在努力发布我的第一个Gem for Rails。这很简单,但我需要提供一些设置配置选项的权限。我想让用户在'config / initializers'中添加一些内容并与我的gem绑定。

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

1 个答案:

答案 0 :(得分:11)

在我帮助开发的引擎Forem中,我们在顶级常量上使用mattr_accessors,如下所示:

<强> 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

使用简短的宝石名称,这个解决方案与我建议的另一个解决方案没有太大区别。


解决方案#2

仍在您的顶级常量上使用mattr_accessors,但在此模块上提供config方法,该方法接受一个块并生成对象:

module ReallyComplicatedGemName
  mattr_accessor :....
  def self.config(&block)
    yield(self)
  end
...

人们可以这样做:

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