2012-04-18 33 views
7

Tôi đang làm việc để phát hành Gem đầu tiên cho Rails. Nó khá đơn giản, nhưng tôi cần cung cấp một số truy cập để thiết lập các tùy chọn cấu hình. Tôi muốn có người dùng đặt một cái gì đó trong 'config/initializers' và gắn vào đó với gem của tôi.Cách xử lý cấu hình cho Rails Gem

Vì vậy, câu hỏi đặt ra là: Có phương pháp hay nhất để cung cấp tùy chọn cấu hình trong đá quý Rails không?

Trả lời

11

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 
+0

Hoàn hảo, cảm ơn! –

Các vấn đề liên quan