Class: RuboCop::Cop::Rails::PluralizationGrammar

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

Overview

Checks for correct grammar when using ActiveSupport’s core extensions to the numeric classes.

Examples:

# bad
3.day.ago
1.months.ago

# good
3.days.ago
1.month.ago

Constant Summary collapse

SINGULAR_DURATION_METHODS =
{ second: :seconds,
minute: :minutes,
hour: :hours,
day: :days,
week: :weeks,
fortnight: :fortnights,
month: :months,
year: :years }.freeze
RESTRICT_ON_SEND =
SINGULAR_DURATION_METHODS.keys + SINGULAR_DURATION_METHODS.values
PLURAL_DURATION_METHODS =
SINGULAR_DURATION_METHODS.invert.freeze
MSG =
'Prefer `%<number>s.%<correct>s`.'

Instance Method Summary collapse

Instance Method Details

#on_send(node) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rubocop/cop/rails/pluralization_grammar.rb', line 35

def on_send(node)
  return unless duration_method?(node.method_name) && literal_number?(node.receiver) && offense?(node)

  number, = *node.receiver

  add_offense(node, message: message(number, node.method_name)) do |corrector|
    method_name = node.loc.selector.source

    corrector.replace(node.loc.selector, correct_method(method_name))
  end
end