class RuboCop::Cop::Rails::ExpandedDateRange

This cop checks for expanded date range. It only compatible `..` range is targeted. Incompatible `…` range is ignored.

@example

# bad
date.beginning_of_day..date.end_of_day
date.beginning_of_week..date.end_of_week
date.beginning_of_month..date.end_of_month
date.beginning_of_quarter..date.end_of_quarter
date.beginning_of_year..date.end_of_year

# good
date.all_day
date.all_week
date.all_month
date.all_quarter
date.all_year

Constants

MAPPED_DATE_RANGE_METHODS
MSG
PREFERRED_METHODS

Public Instance Methods

on_irange(node) click to toggle source
# File lib/rubocop/cop/rails/expanded_date_range.rb, line 56
def on_irange(node)
  return unless expanded_date_range(node)

  begin_node = node.begin
  end_node = node.end
  return unless same_receiver?(begin_node, end_node)

  beginning_method = begin_node.method_name
  end_method = end_node.method_name
  return unless use_mapped_methods?(beginning_method, end_method)

  preferred_method = "#{begin_node.receiver.source}.#{PREFERRED_METHODS[beginning_method]}"

  add_offense(node, message: format(MSG, preferred_method: preferred_method)) do |corrector|
    corrector.replace(node, preferred_method)
  end
end

Private Instance Methods

same_receiver?(begin_node, end_node) click to toggle source
# File lib/rubocop/cop/rails/expanded_date_range.rb, line 76
def same_receiver?(begin_node, end_node)
  begin_node.receiver.source == end_node.receiver.source
end
use_mapped_methods?(beginning_method, end_method) click to toggle source
# File lib/rubocop/cop/rails/expanded_date_range.rb, line 80
def use_mapped_methods?(beginning_method, end_method)
  MAPPED_DATE_RANGE_METHODS[beginning_method] == end_method
end