Class: RuboCop::Cop::Rails::Date
- Includes:
- ConfigurableEnforcedStyle
- Defined in:
- lib/rubocop/cop/rails/date.rb
Overview
This cop checks for the correct use of Date methods, such as Date.today, Date.current etc.
Using Date.today is dangerous, because it doesn’t know anything about Rails time zone. You must use Time.zone.today instead.
The cop also reports warnings when you are using ‘to_time’ method, because it doesn’t know about Rails time zone either.
Two styles are supported for this cop. When EnforcedStyle is ‘strict’ then the Date methods (today, current, yesterday, tomorrow) are prohibited and the usage of both ‘to_time’ and ‘to_time_in_current_zone’ is reported as warning.
When EnforcedStyle is ‘flexible’ then only ‘Date.today’ is prohibited and only ‘to_time’ is reported as warning.
Constant Summary collapse
- MSG =
'Do not use `Date.%<day>s` without zone. Use ' \ '`Time.zone.%<day>s` instead.'.freeze
- MSG_SEND =
'Do not use `%<method>s` on Date objects, because they ' \ 'know nothing about the time zone in use.'.freeze
- BAD_DAYS =
%i[today current yesterday tomorrow].freeze
Constants included from Util
Util::ASGN_NODES, Util::CONDITIONAL_NODES, Util::EQUALS_ASGN_NODES, Util::LITERAL_REGEX, Util::LOGICAL_OPERATOR_NODES, Util::MODIFIER_NODES, Util::OPERATOR_METHODS, Util::SHORTHAND_ASGN_NODES
Instance Attribute Summary
Attributes inherited from Cop
#config, #corrections, #offenses, #processed_source
Instance Method Summary collapse
Methods included from ConfigurableEnforcedStyle
#alternative_style, #alternative_styles, #ambiguous_style_detected, #correct_style_detected, #detected_style, #detected_style=, #no_acceptable_style!, #no_acceptable_style?, #opposite_style_detected, #style, #style_detected, #style_parameter_name, #supported_styles, #unexpected_style_detected
Methods inherited from Cop
#add_offense, all, autocorrect_incompatible_with, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, #correct, department, #duplicate_location?, #excluded_file?, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, non_rails, #parse, qualified_cop_name, #relevant_file?, #target_rails_version, #target_ruby_version
Methods included from AST::Sexp
Methods included from NodePattern::Macros
#def_node_matcher, #def_node_search, #node_search, #node_search_all, #node_search_body, #node_search_first
Methods included from AutocorrectLogic
#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?
Methods included from IgnoredNode
#ignore_node, #ignored_node?, #part_of_ignored_node?
Methods included from Util
begins_its_line?, comment_line?, double_quotes_required?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, operator?, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens
Methods included from PathUtil
absolute?, match_path?, pwd, relative_path, reset_pwd, smart_path
Constructor Details
This class inherits a constructor from RuboCop::Cop::Cop
Instance Method Details
#on_const(node) ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/rubocop/cop/rails/date.rb', line 58 def on_const(node) mod, klass = *node.children # we should only check core Date class (`Date` or `::Date`) return unless (mod.nil? || mod.cbase_type?) && method_send?(node) check_date_node(node.parent) if klass == :Date end |
#on_send(node) ⇒ Object
66 67 68 69 70 71 72 73 |
# File 'lib/rubocop/cop/rails/date.rb', line 66 def on_send(node) return unless node.receiver && bad_methods.include?(node.method_name) return if safe_chain?(node) || safe_to_time?(node) add_offense(node, location: :selector, message: format(MSG_SEND, method: node.method_name)) end |