Class: RuboCop::Cop::Rails::Exit

Inherits:
Base
  • Object
show all
Includes:
ConfigurableEnforcedStyle
Defined in:
lib/rubocop/cop/rails/exit.rb

Overview

Enforces that ‘exit` and `abort` calls are not used within a rails app. Valid options are instead to raise an error, break, return, or some other form of stopping execution of current request.

There are two obvious cases where ‘exit` is particularly harmful:

  • Usage in library code for your application. Even though Rails will

rescue from a ‘SystemExit` and continue on, unit testing that library code will result in specs exiting (potentially silently if `exit(0)` is used.)

  • Usage in application code outside of the web process could result in

the program exiting, which could result in the code failing to run and do its job.

Examples:

# bad
exit(0)

# good
raise 'a bad error has happened'

Constant Summary collapse

MSG =
'Do not use `%<current>s` in Rails applications.'
RESTRICT_ON_SEND =
i[exit exit! abort].freeze
EXPLICIT_RECEIVERS =
i[Kernel Process].freeze

Instance Method Summary collapse

Instance Method Details

#on_send(node) ⇒ Object



33
34
35
36
37
38
# File 'lib/rubocop/cop/rails/exit.rb', line 33

def on_send(node)
  return unless offending_node?(node)

  message = format(MSG, current: node.method_name)
  add_offense(node.loc.selector, message: message)
end