私のRailsアプリには、モジュールで使用する必要のあるApplicationControllerで定義されたメソッドがあります。このモジュールは、すべてのコントローラー/ヘルパーがアクセスできる必要もあります。モジュールにこのメソッドへのアクセスを許可するのが最善の方法かわかりません。モジュールをラップしてからApplicationControllerに含めることでそれを行う方法があると思います。
また、モジュールメソッドをコントローラーに直接含めるのではなく、名前空間を保持したいと思います。例:controller.fooだけでなくcontroller.Module.foo
これが私がやろうとしていることです:
module Analytics
module Events
extend self
def create_event name
# do some stuff
controller_method name
end
end
end
class ApplicationController < ActionController::Base
include Analytics
def controller_method
# ...
end
def some_other_method
Events.create_event :test
end
end
これで、渡されたベースオブジェクトを提供するself.includedメソッドをAnalyticsモジュールに追加できることがわかりましたが、KissMetricsモジュールでそのベースをどのように利用できるかわかりません。
これは可能ですか、それともこれを行うためのより良い方法がありますか?
編集:
さらに明確にするために、ActionController::Baseに拡張/含まれているgemを使用しています。このスクリプトの下部を参照してください。次に、このライブラリはApplicationController内で構成されます。私がやりたいのは、この宝石を利用するイベントが定義されたモジュールを用意することだけです。これにより、すべてのコントローラーで一貫したイベントを簡単に実行できます。
module Events
def sign_up_event
analytical.event "sign up" # calls the library that was loaded into the app controller
end
end
# in some controller
Events.sign_up_event
# instead of this, which is totally usable but not DRY
analytical.event "sign up"