Class: RuboCop::Cop::Rails::ArelStar

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Defined in:
lib/rubocop/cop/rails/arel_star.rb

Overview

Prevents usage of "*" on an Arel::Table column reference.

Using arel_table["*"] causes the outputted string to be a literal quoted asterisk (e.g. my_model.*). This causes the database to look for a column named * (or "*") as opposed to expanding the column list as one would likely expect.

Examples:

# bad
MyTable.arel_table["*"]

# good
MyTable.arel_table[Arel.star]

Cop Safety Information:

  • This cop's autocorrection is unsafe because it turns a quoted * into an SQL *, unquoted. * is a valid column name in certain databases supported by Rails, and even though it is usually a mistake, it might denote legitimate access to a column named *.

Constant Summary collapse

MSG =
'Use `Arel.star` instead of `"*"` for expanded column lists.'
RESTRICT_ON_SEND =
%i[[]].freeze

Instance Method Summary collapse

Instance Method Details

#on_send(node) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/rubocop/cop/rails/arel_star.rb', line 37

def on_send(node)
  return unless (star = star_bracket?(node))

  add_offense(star) do |corrector|
    corrector.replace(star, 'Arel.star')
  end
end