Class: RuboCop::Cop::Betterment::ImplicitRedirectType

Inherits:
RuboCop::Cop
  • Object
show all
Defined in:
lib/rubocop/cop/betterment/implicit_redirect_type.rb

Overview

Require explicit redirect statuses in routes.rb. Refer to the book for more details: github.com/Betterment/the-book/blob/master/platform-specific/ruby.markdown#use-temporary-redirects-eg-redirectstatus-302

Examples:

# bad
get '/', redirect('/dashboard')
get { |params, request| '/dashboard' }

# good
get '/', redirect('/dashboard', status: 301)
get(status: 302) { |params, request| '/dashboard' }

Constant Summary collapse

ROUTES_FILE_NAME =
'routes.rb'.freeze
MSG =
'Rails will create a permanent (301) redirect, which is dangerous. ' \
'Please specify your desired status, e.g. redirect(..., status: 302)'.freeze

Instance Method Summary collapse

Instance Method Details

#on_block(node) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/rubocop/cop/betterment/implicit_redirect_type.rb', line 46

def on_block(node)
  return unless routes_file?

  if block_form_with_options(node) { |options| options.none?(&method(:valid_status_option?)) } || block_form_without_options?(node)
    add_offense(node, message: MSG)
  end
end

#on_send(node) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/rubocop/cop/betterment/implicit_redirect_type.rb', line 54

def on_send(node)
  return unless routes_file?

  if arg_form_with_options(node) { |options| options.none?(&method(:valid_status_option?)) } || arg_form_without_options?(node)
    add_offense(node, message: MSG)
  end
end