7

私は最初のGemforRailsのリリースに取り組んでいます。非常に簡単ですが、構成オプションを設定するためのアクセスを提供する必要があります。ユーザーに「config/initializers」に何かを入れて、それを私のgemに結び付けてもらいたいです。

したがって、質問は次のとおりです。Rails gemで構成オプションを提供するためのベストプラクティスはありますか?

4

1 に答える 1

11

私が開発を支援するエンジンである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
于 2012-04-18T17:25:06.713 に答える