私は最初のGemforRailsのリリースに取り組んでいます。非常に簡単ですが、構成オプションを設定するためのアクセスを提供する必要があります。ユーザーに「config/initializers」に何かを入れて、それを私のgemに結び付けてもらいたいです。
したがって、質問は次のとおりです。Rails gemで構成オプションを提供するためのベストプラクティスはありますか?
私は最初のGemforRailsのリリースに取り組んでいます。非常に簡単ですが、構成オプションを設定するためのアクセスを提供する必要があります。ユーザーに「config/initializers」に何かを入れて、それを私のgemに結び付けてもらいたいです。
したがって、質問は次のとおりです。Rails gemで構成オプションを提供するためのベストプラクティスはありますか?
私が開発を支援するエンジンであるForemmattr_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