Skip to content
beNjiox edited this page Oct 5, 2014 · 2 revisions

An interactor can define multiple before/after hooks, allowing common hooks to be extracted into interactor concerns.

Here is an example:

The Interactor
# app/interactors/welcome_user.rb
class WelcomeUser
  include Interactor
  include LogInteractor

  before do
    Rails.logger.info 'Prepare the welcome user action'
  end

  after do
    Rails.logger.info 'Clean up after the welcome user action'
  end

  def perform
    puts 'Perform WelcomeUser'
  end
end
A generic module to be used with different interactors
# libs/log_interactor.rb
module LogInteractor
  extend ActiveSupport::Concern

  included do
    before do
      Rails.logger.info 'before Interactor'
    end
    
	after do
      Rails.logger.info 'after Interactor'
    end
  end
end
A controller using the interactor
# app/controllers/welcome_controller.rb
class WelcomeController < ApplicationController
  def index
    WelcomeUser.call
  end
end

Now let's say we have a route pointing to our WelcomeController#index method.

get '/welcome', to: 'welcome#index'
Output
# curl http://0.0.0.0:3000/welcome
before Interactor
Prepare the user login action
Clean up after the user login action
after Interactor

Clone this wiki locally