rubocop-rails 2.33.2 → 2.33.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1dd62ec2504a075e89e8933ab9a8ecc63061d04c75f604d661d21a87b264cdee
|
4
|
+
data.tar.gz: a47a5b0e0d1e2f94b4f5a2976875ce86eb19c2c9fed53a1767ce5c59666d819e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5c48f2805329e13493881423a0de8549a7e3d3cfacc99be40b5a9dbd36b4a6c3d376845c5b0bcf3b492023835e8b3f5062d291c8ebe87165d82f96a77dbbc102
|
7
|
+
data.tar.gz: b30b183e23a29af49d9a6709d27318d79d4ff24246ba1b21ac8ae14260acbb64fd46ec54661f3d18867ffb331f71d794a33e5b760545b0743645ce902cac1daf
|
@@ -13,7 +13,7 @@ module RuboCop
|
|
13
13
|
# or the code may have a different purpose than memoization.
|
14
14
|
#
|
15
15
|
# @example
|
16
|
-
# # bad
|
16
|
+
# # bad - exclusively doing memoization
|
17
17
|
# def current_user
|
18
18
|
# @current_user ||= User.find_by(id: session[:user_id])
|
19
19
|
# end
|
@@ -24,6 +24,22 @@ module RuboCop
|
|
24
24
|
#
|
25
25
|
# @current_user = User.find_by(id: session[:user_id])
|
26
26
|
# end
|
27
|
+
#
|
28
|
+
# # bad - method contains other code
|
29
|
+
# def current_user
|
30
|
+
# @current_user ||= User.find_by(id: session[:user_id])
|
31
|
+
# @current_user.do_something
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# # good
|
35
|
+
# def current_user
|
36
|
+
# if defined?(@current_user)
|
37
|
+
# @current_user
|
38
|
+
# else
|
39
|
+
# @current_user = User.find_by(id: session[:user_id])
|
40
|
+
# end
|
41
|
+
# @current_user.do_something
|
42
|
+
# end
|
27
43
|
class FindByOrAssignmentMemoization < Base
|
28
44
|
extend AutoCorrector
|
29
45
|
|
@@ -38,6 +54,22 @@ module RuboCop
|
|
38
54
|
)
|
39
55
|
PATTERN
|
40
56
|
|
57
|
+
# When a method body contains only memoization, the correction can be more succinct.
|
58
|
+
def on_def(node)
|
59
|
+
find_by_or_assignment_memoization(node.body) do |varible_name, find_by|
|
60
|
+
add_offense(node.body) do |corrector|
|
61
|
+
corrector.replace(
|
62
|
+
node.body,
|
63
|
+
<<~RUBY.rstrip
|
64
|
+
return #{varible_name} if defined?(#{varible_name})
|
65
|
+
|
66
|
+
#{varible_name} = #{find_by.source}
|
67
|
+
RUBY
|
68
|
+
)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
41
73
|
def on_send(node)
|
42
74
|
assignment_node = node.parent
|
43
75
|
find_by_or_assignment_memoization(assignment_node) do |varible_name, find_by|
|
@@ -47,9 +79,11 @@ module RuboCop
|
|
47
79
|
corrector.replace(
|
48
80
|
assignment_node,
|
49
81
|
<<~RUBY.rstrip
|
50
|
-
|
51
|
-
|
52
|
-
|
82
|
+
if defined?(#{varible_name})
|
83
|
+
#{varible_name}
|
84
|
+
else
|
85
|
+
#{varible_name} = #{find_by.source}
|
86
|
+
end
|
53
87
|
RUBY
|
54
88
|
)
|
55
89
|
end
|