Mat*_*ham 7 ruby rubygems ruby-on-rails
我正在努力发布我的第一个Gem for Rails.这很简单,但我需要提供一些设置配置选项的权限.我想让用户在'config/initializers'中添加一些内容并与我的gem绑定.
所以,问题是:在Rails gem中提供配置选项是否有最佳实践?
Rya*_*igg 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
...
Run Code Online (Sandbox Code Playgroud)
然后config/initializers我们要求用户将它们设置为:
Forem.user_class = 'User'
Forem.autocomplete_field = :login
Run Code Online (Sandbox Code Playgroud)
有一个简短的宝石名称,这个解决方案与我建议的另一个解决方案没有太大区别.
解决方案#2
仍然使用mattr_accessors你的顶级常量,但config在这个模块上提供一个方法,它接受一个块并产生对象:
module ReallyComplicatedGemName
mattr_accessor :....
def self.config(&block)
yield(self)
end
...
Run Code Online (Sandbox Code Playgroud)
这样人们可以这样做:
ReallyComplicatedGemName.config do |config|
config.user_class = "User"
...
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |