forked from rubocop/rubocop-rails
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtime_zone_assignment.rb
37 lines (33 loc) · 1.03 KB
/
time_zone_assignment.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# frozen_string_literal: true
module RuboCop
module Cop
module Rails
# This cop checks for the use of `Time.zone=` method.
#
# The `zone` attribute persists for the rest of the Ruby runtime, potentially causing
# unexpected behavior at a later time.
# Using `Time.use_zone` ensures the code passed in the block is the only place Time.zone is affected.
# It eliminates the possibility of a `zone` sticking around longer than intended.
#
# @example
# # bad
# Time.zone = 'EST'
#
# # good
# Time.use_zone('EST') do
# end
#
class TimeZoneAssignment < Base
MSG = 'Use `Time.use_zone` with block instead of `Time.zone=`.'
RESTRICT_ON_SEND = %i[zone=].freeze
def_node_matcher :time_zone_assignement?, <<~PATTERN
(send (const nil? :Time) :zone= ...)
PATTERN
def on_send(node)
return unless time_zone_assignement?(node)
add_offense(node)
end
end
end
end
end