2012-04-18 27 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

相關問題