Как обрабатывать конфигурацию для Rails Gem

Я работаю над выпуском своего первого Gem для Rails. Это довольно просто, но мне нужно предоставить некоторый доступ к настройке параметров конфигурации. Я хотел бы, чтобы пользователь поместил что-то в «config/initializers» и связал это с моим драгоценным камнем.

Итак, вопрос: существует ли лучший способ предоставления параметров конфигурации в геме Rails?


person Matt Fordham    schedule 18.04.2012    source источник


Ответы (1)


В движке, который я помогаю разрабатывать, 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

С коротким именем драгоценного камня нет большой разницы между этим решением и другим, которое я предложу.


Решение №2

По-прежнему используйте mattr_accessors в своей константе верхнего уровня, но предложите метод config в этом модуле, который берет блок и возвращает объект:

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

Таким образом, люди могут:

ReallyComplicatedGemName.config do |config|
  config.user_class = "User"
  ...
end
person Ryan Bigg    schedule 18.04.2012