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