2012-04-18 50 views
7

我正在发布我的第一个Gem for Rails。这很简单,但我需要提供一些设置配置选项的权限。我想让用户把一些东西放在'config/initializers'中,并与我的宝石绑定。如何处理Rails配置Gem

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

回答

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 

用一个简短的宝石名称,没有太多differen这个解决方案与另一个我会建议的解决方案之间。


溶液#2

还在用mattr_accessors上顶层恒定的,但是提供这种模块上的config方法,它采用一个块并产生该对象:

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

这人们可以这样做:

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

完美,谢谢! – 2012-04-18 18:05:02

相关问题