Как да се справя с конфигурацията за Rails Gem

Работя върху пускането на първия ми Gem за Rails. Доста е просто, но трябва да осигуря известен достъп до настройките на опциите за конфигурация. Бих искал потребителят да постави нещо в „config/initializers“ и да го свърже с моя скъпоценен камък.

И така, въпросът е: Има ли най-добра практика за предоставяне на опции за конфигурация в Rails gem?


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