7

我正在为 Rails 发布我的第一个 Gem。这很简单,但我需要提供一些设置配置选项的访问权限。我想让用户在 'config/initializers' 中放入一些东西,并用我的 gem 绑定到它。

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

4

1 回答 1

11

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

库/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_accessors在您的顶级常量上使用,但config在此模块上提供一个方法,该方法接受一个块并产生对象:

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

这样人们就可以做到:

ReallyComplicatedGemName.config do |config|
  config.user_class = "User"
  ...
end
于 2012-04-18T17:25:06.713 回答