Class: RuboCop::Cop::Guardrails::ControllerTransaction

Inherits:
Base
  • Object
show all
Defined in:
lib/rubocop/cop/guardrails/controller_transaction.rb

Overview

Flags transaction blocks in controllers.

Transactions indicate business logic that belongs in a model method. Controllers should orchestrate — call a single model method that handles the transaction internally.

Examples:

# bad
class Cards::ClosuresController < ApplicationController
  def create
    ActiveRecord::Base.transaction do
      @card.create_closure!(user: Current.user)
      @card.track_event(:closed)
    end
  end
end

# good — model method wraps the transaction
class Cards::ClosuresController < ApplicationController
  def create
    @card.close
  end
end

Constant Summary collapse

MSG =
'Avoid transactions in controllers. Move business logic to a model method.'

Instance Method Summary collapse

Instance Method Details

#on_block(node) ⇒ Object Also known as: on_numblock, on_itblock



32
33
34
# File 'lib/rubocop/cop/guardrails/controller_transaction.rb', line 32

def on_block(node)
  add_offense(node.send_node) if node.method?(:transaction)
end