Trong một động cơ tôi giúp phát triển, Forem, chúng tôi sử dụng mattr_accessors
trên hằng số top-level như thế này:
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
...
Sau đó bên config/initializers
chúng tôi yêu cầu người dùng thiết lập chúng như sau:
Forem.user_class = 'User'
Forem.autocomplete_field = :login
Với tên gọi ngắn gọn, không có nhiều khác biệt ce giữa giải pháp này và giải pháp khác tôi sẽ đề xuất.
Giải pháp # 2
Tuy nhiên sử dụng mattr_accessors
trên top-level của bạn liên tục nhưng cung cấp một phương pháp config
trên module này mà phải mất một khối và mang lại các đối tượng:
module ReallyComplicatedGemName
mattr_accessor :....
def self.config(&block)
yield(self)
end
...
này cách mọi người có thể làm:
ReallyComplicatedGemName.config do |config|
config.user_class = "User"
...
end
Nguồn
2012-04-18 17:25:06
Hoàn hảo, cảm ơn! –