我正在为 Rails 发布我的第一个 Gem。这很简单,但我需要提供一些设置配置选项的访问权限。我想让用户在 'config/initializers' 中放入一些东西,并用我的 gem 绑定到它。
所以,问题是:在 Rails gem 中提供配置选项是否有最佳实践?
我正在为 Rails 发布我的第一个 Gem。这很简单,但我需要提供一些设置配置选项的访问权限。我想让用户在 'config/initializers' 中放入一些东西,并用我的 gem 绑定到它。
所以,问题是:在 Rails gem 中提供配置选项是否有最佳实践?
在我帮助开发的引擎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