Class: RuboCop::Cop::Rails::RelativeDateConstant
- Inherits:
-
RuboCop::Cop
- Object
- RuboCop::Cop
- RuboCop::Cop::Rails::RelativeDateConstant
- Includes:
- RangeHelp
- Defined in:
- lib/rubocop/cop/rails/relative_date_constant.rb
Overview
This cop checks whether constant value isn’t relative date. Because the relative date will be evaluated only once.
Constant Summary collapse
- MSG =
'Do not assign %<method_name>s to constants as it ' \ 'will be evaluated only once.'
Instance Method Summary collapse
- #autocorrect(node) ⇒ Object
- #on_casgn(node) ⇒ Object
- #on_masgn(node) ⇒ Object
- #on_or_asgn(node) ⇒ Object
Instance Method Details
#autocorrect(node) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/rubocop/cop/rails/relative_date_constant.rb', line 65 def autocorrect(node) return unless node.casgn_type? scope, const_name, value = *node return unless scope.nil? indent = ' ' * node.loc.column new_code = ["def self.#{const_name.downcase}", "#{indent}#{value.source}", 'end'].join("\n#{indent}") ->(corrector) { corrector.replace(node.source_range, new_code) } end |
#on_casgn(node) ⇒ Object
36 37 38 39 40 |
# File 'lib/rubocop/cop/rails/relative_date_constant.rb', line 36 def on_casgn(node) relative_date_assignment?(node) do |method_name| add_offense(node, message: format(MSG, method_name: method_name)) end end |
#on_masgn(node) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/rubocop/cop/rails/relative_date_constant.rb', line 42 def on_masgn(node) lhs, rhs = *node return unless rhs&.array_type? lhs.children.zip(rhs.children).each do |(name, value)| next unless name.casgn_type? relative_date?(value) do |method_name| add_offense(node, location: range_between(name.loc.expression.begin_pos, value.loc.expression.end_pos), message: format(MSG, method_name: method_name)) end end end |
#on_or_asgn(node) ⇒ Object
59 60 61 62 63 |
# File 'lib/rubocop/cop/rails/relative_date_constant.rb', line 59 def on_or_asgn(node) relative_date_or_assignment?(node) do |method_name| add_offense(node, message: format(MSG, method_name: method_name)) end end |