2012-04-18 15 views
7

Pracuję nad wydaniem mojego pierwszego Klejnotu dla Rails. Jest to dość proste, ale muszę zapewnić pewien dostęp do ustawień opcji konfiguracyjnych. Chciałbym, aby użytkownik umieścił coś w "config/initializers" i powiązał to z moim klejnotem.Jak obsługiwać konfigurację dla Rails Gem

Pytanie brzmi: czy istnieje najlepsza praktyka zapewniania opcji konfiguracji w klejnocie Railsów?

Odpowiedz

11

w silniku mi pomóc rozwijać, Forem używamy mattr_accessors na stałej najwyższego poziomu tak:

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 
... 

Następnie wewnątrz config/initializers pytamy użytkownikom skonfiguruj je tak:

Forem.user_class = 'User' 
Forem.autocomplete_field = :login 

Z krótką nazwą klejnotu, nie ma różnicy ce pomiędzy tym rozwiązaniem a drugim, które zaproponuję.


Rozwiązanie nr 2

Nadal używać mattr_accessors na najwyższym poziomie stałym, ale oferują config metodę na tym module, która przyjmuje blok i daje obiektu:

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

ten sposób, w jaki ludzie mogą:

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

Idealne, dzięki! –

Powiązane problemy