2012-04-18 7 views
7

Estoy trabajando en la liberación de mi primer Gem for Rails. Es bastante simple, pero necesito proporcionar algún acceso a las opciones de configuración de configuración. Me gustaría que el usuario pusiera algo en 'config/initializers' y lo vincule con mi gema.Cómo manejar config para Rails Gem

Entonces, la pregunta es: ¿hay una mejor práctica para proporcionar opciones de configuración en una joya de Rails?

Respuesta

11

En un motor Me ayudan a desarrollar, Forem, utilizamos mattr_accessors de la constante de nivel superior como esto:

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

A continuación, en el interior config/initializers que pedir a los usuarios a configúrelos de esta manera:

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

Con un nombre de gema corta, no hay mucha diferencia entre esta solución y la otra propondré.


Solución # 2

Aún utilizar mattr_accessors en su constante de alto nivel, pero ofrecen un método config en este módulo que toma un bloque y se obtiene el objeto:

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

Este La gente puede hacer:

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

Perfecto, gracias! –

Cuestiones relacionadas