class RuboCop::Cop::Rails::PluralizationGrammar
This cop checks for correct grammar when using ActiveSupport's core extensions to the numeric classes.
@example
# bad 3.day.ago 1.months.ago # good 3.days.ago 1.month.ago
Constants
- MSG
- PLURAL_DURATION_METHODS
- SINGULAR_DURATION_METHODS
Public Instance Methods
on_send(node)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 31 def on_send(node) receiver, method_name, *_args = *node return if receiver.nil? return unless duration_method?(method_name) return unless literal_number?(receiver) number, = *receiver if singular_receiver?(number) && plural_method?(method_name) add_offense(node, :expression, format(MSG, number, singularize(method_name))) elsif plural_receiver?(number) && singular_method?(method_name) add_offense(node, :expression, format(MSG, number, pluralize(method_name))) end end
Private Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 50 def autocorrect(node) lambda do |corrector| method_name = node.loc.selector.source replacement = if plural_method?(method_name) singularize(method_name) else pluralize(method_name) end corrector.replace(node.loc.selector, replacement) end end
duration_method?(method_name)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 90 def duration_method?(method_name) SINGULAR_DURATION_METHODS.key?(method_name) || PLURAL_DURATION_METHODS.key?(method_name) end
literal_number?(node)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 78 def literal_number?(node) node.int_type? || node.float_type? end
plural_method?(method_name)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 62 def plural_method?(method_name) method_name.to_s.end_with?('s') end
plural_receiver?(number)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 74 def plural_receiver?(number) !singular_receiver?(number) end
pluralize(method_name)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 82 def pluralize(method_name) SINGULAR_DURATION_METHODS.fetch(method_name.to_sym).to_s end
singular_method?(method_name)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 66 def singular_method?(method_name) !plural_method?(method_name) end
singular_receiver?(number)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 70 def singular_receiver?(number) number == 1 end
singularize(method_name)
click to toggle source
# File lib/rubocop/cop/rails/pluralization_grammar.rb, line 86 def singularize(method_name) PLURAL_DURATION_METHODS.fetch(method_name.to_sym).to_s end