Class: Ducalis::MultipleTimes
- Inherits:
-
RuboCop::Cop::Cop
- Object
- RuboCop::Cop::Cop
- Ducalis::MultipleTimes
- Includes:
- RuboCop::Cop::DefNode
- Defined in:
- lib/ducalis/cops/multiple_times.rb
Constant Summary collapse
- OFFENSE =
<<-MESSAGE.gsub(/^ +\|\s/, '').strip | You should avoid multiple time-related calls to prevent bugs during the period junctions (like Time.now.day called twice in the same scope could return different values if you called it near 23:59:59). You can pass it as default keyword argument or assign to a local variable. MESSAGE
- DETAILS =
<<-MESSAGE.gsub(/^ +\|\s/, '').strip | Compare: | ```ruby | def period | Date.today..(Date.today + 1.day) | end | # vs | def period(today: Date.today) | today..(today + 1.day) | end | ``` MESSAGE
- PARAMS_CALL =
s(:send, nil, :params)
Instance Method Summary collapse
- #on_def(body) ⇒ Object (also: #on_defs, #on_send)
Instance Method Details
#on_def(body) ⇒ Object Also known as: on_defs, on_send
30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/ducalis/cops/multiple_times.rb', line 30 def on_def(body) multiple = [ date_today(body), date_current(body), date_yesterday(body), time_current(body), time_now(body) ].map(&:to_a).compact.flatten.to_a return if multiple.count < 2 multiple.each do |time_node| add_offense(time_node, :expression, OFFENSE) end end |