rails_best_practices 0.5.2 → 0.5.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.
@@ -4,19 +4,19 @@ require 'rails_best_practices/checks/check'
|
|
4
4
|
module RailsBestPractices
|
5
5
|
module Checks
|
6
6
|
# Check to make sure use query attribute instead of nil?, blank? and present?.
|
7
|
-
#
|
8
|
-
# Implementation:
|
7
|
+
#
|
8
|
+
# Implementation:
|
9
9
|
# 1. check all models to save model names and association names.
|
10
10
|
# model names are used for detecting
|
11
11
|
# association name should not be detected as query attribute
|
12
12
|
# 2. check all method calls, if their subjects are model names and their messages are one of nil?,
|
13
|
-
# blank?, present? or == "", not pluralize and not in the association names,
|
13
|
+
# blank?, present? or == "", not pluralize and not in the association names,
|
14
14
|
# then they need to use query attribute.
|
15
15
|
class UseQueryAttributeCheck < Check
|
16
|
-
|
16
|
+
|
17
17
|
QUERY_METHODS = [:nil?, :blank?, :present?]
|
18
18
|
ASSOCIATION_METHODS = [:belongs_to, :has_one, :has_many, :has_and_belongs_to_many]
|
19
|
-
|
19
|
+
|
20
20
|
def interesting_nodes
|
21
21
|
[:if, :class, :call]
|
22
22
|
end
|
@@ -34,7 +34,9 @@ module RailsBestPractices
|
|
34
34
|
when :call
|
35
35
|
remember_association(node) if ASSOCIATION_METHODS.include? node.message
|
36
36
|
when :if
|
37
|
-
|
37
|
+
if node = query_attribute_node(node.conditional_statement)
|
38
|
+
add_error "use query attribute", node.file, node.line
|
39
|
+
end
|
38
40
|
else
|
39
41
|
end
|
40
42
|
end
|
@@ -46,35 +48,35 @@ module RailsBestPractices
|
|
46
48
|
@klazzes << class_node.subject
|
47
49
|
end
|
48
50
|
end
|
49
|
-
|
51
|
+
|
50
52
|
def remember_association(association_node)
|
51
53
|
@associations[@klazzes.last] ||= []
|
52
54
|
@associations[@klazzes.last] << association_node.arguments[1].to_s
|
53
55
|
end
|
54
56
|
|
55
|
-
def
|
57
|
+
def query_attribute_node(conditional_statement_node)
|
56
58
|
case conditional_statement_node.node_type
|
57
59
|
when :and, :or
|
58
|
-
return
|
60
|
+
return query_attribute_node(conditional_statement_node[1]) || query_attribute_node(conditional_statement_node[2])
|
59
61
|
when :not
|
60
|
-
return
|
62
|
+
return query_attribute_node(conditional_statement_node[1])
|
61
63
|
when :call
|
62
|
-
return
|
64
|
+
return conditional_statement_node if query_method?(conditional_statement_node) or compare_with_empty_string?(conditional_statement_node)
|
63
65
|
end
|
64
|
-
|
66
|
+
nil
|
65
67
|
end
|
66
|
-
|
68
|
+
|
67
69
|
def query_method?(node)
|
68
70
|
return false unless :call == node.subject.node_type
|
69
71
|
subject = node.subject.subject
|
70
72
|
message = node.subject.message
|
71
73
|
subject_ruby = subject.to_s
|
72
|
-
|
74
|
+
|
73
75
|
subject_ruby && @klazzes.find { |klazz| subject_ruby =~ %r|#{klazz.to_s.underscore}| and !@associations[klazz].find { |association| equal?(association, message) } } &&
|
74
76
|
message && message.to_s.pluralize != message.to_s &&
|
75
77
|
QUERY_METHODS.include?(node.message)
|
76
78
|
end
|
77
|
-
|
79
|
+
|
78
80
|
def compare_with_empty_string?(node)
|
79
81
|
:== == node.message and [:arglist, [:str, ""]] == node.arguments
|
80
82
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'rubygems'
|
3
3
|
require 'ruby_parser'
|
4
|
-
require '
|
4
|
+
require 'erubis'
|
5
5
|
require 'yaml'
|
6
6
|
require 'active_support/inflector'
|
7
7
|
|
@@ -28,9 +28,7 @@ module RailsBestPractices
|
|
28
28
|
def check(filename, content)
|
29
29
|
puts filename if @debug
|
30
30
|
if filename =~ /.*\.erb$/
|
31
|
-
content =
|
32
|
-
# remove the coding line which exists in Ruby 1.9
|
33
|
-
content.gsub!(/#coding:US-ASCII\n/, '')
|
31
|
+
content = Erubis::Eruby.new(content).src
|
34
32
|
end
|
35
33
|
if filename =~ /.*\.haml$/
|
36
34
|
begin
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_best_practices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 15
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 5
|
9
|
-
-
|
10
|
-
version: 0.5.
|
8
|
+
- 3
|
9
|
+
version: 0.5.3
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Richard Huang
|
@@ -15,131 +14,138 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-04 00:00:00 +08:00
|
19
18
|
default_executable: rails_best_practices
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
21
|
+
name: ruby_parser
|
22
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
23
|
none: false
|
24
24
|
requirements:
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
hash: 7
|
28
27
|
segments:
|
29
28
|
- 2
|
30
29
|
- 0
|
31
30
|
- 4
|
32
31
|
version: 2.0.4
|
33
|
-
name: ruby_parser
|
34
|
-
prerelease: false
|
35
32
|
type: :runtime
|
33
|
+
prerelease: false
|
36
34
|
version_requirements: *id001
|
37
35
|
- !ruby/object:Gem::Dependency
|
36
|
+
name: progressbar
|
38
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
38
|
none: false
|
40
39
|
requirements:
|
41
40
|
- - ~>
|
42
41
|
- !ruby/object:Gem::Version
|
43
|
-
hash: 59
|
44
42
|
segments:
|
45
43
|
- 0
|
46
44
|
- 9
|
47
45
|
- 0
|
48
46
|
version: 0.9.0
|
49
|
-
name: progressbar
|
50
|
-
prerelease: false
|
51
47
|
type: :runtime
|
48
|
+
prerelease: false
|
52
49
|
version_requirements: *id002
|
53
50
|
- !ruby/object:Gem::Dependency
|
51
|
+
name: colored
|
54
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
55
53
|
none: false
|
56
54
|
requirements:
|
57
55
|
- - ~>
|
58
56
|
- !ruby/object:Gem::Version
|
59
|
-
hash: 11
|
60
57
|
segments:
|
61
58
|
- 1
|
62
59
|
- 2
|
63
60
|
version: "1.2"
|
64
|
-
name: colored
|
65
|
-
prerelease: false
|
66
61
|
type: :runtime
|
62
|
+
prerelease: false
|
67
63
|
version_requirements: *id003
|
68
64
|
- !ruby/object:Gem::Dependency
|
65
|
+
name: erubis
|
69
66
|
requirement: &id004 !ruby/object:Gem::Requirement
|
70
67
|
none: false
|
71
68
|
requirements:
|
72
|
-
- -
|
69
|
+
- - ~>
|
73
70
|
- !ruby/object:Gem::Version
|
74
|
-
hash: 3
|
75
71
|
segments:
|
76
|
-
-
|
77
|
-
|
78
|
-
|
79
|
-
|
72
|
+
- 2
|
73
|
+
- 6
|
74
|
+
- 6
|
75
|
+
version: 2.6.6
|
80
76
|
type: :runtime
|
77
|
+
prerelease: false
|
81
78
|
version_requirements: *id004
|
82
79
|
- !ruby/object:Gem::Dependency
|
80
|
+
name: i18n
|
83
81
|
requirement: &id005 !ruby/object:Gem::Requirement
|
84
82
|
none: false
|
85
83
|
requirements:
|
86
84
|
- - ">="
|
87
85
|
- !ruby/object:Gem::Version
|
88
|
-
hash: 3
|
89
86
|
segments:
|
90
87
|
- 0
|
91
88
|
version: "0"
|
92
|
-
name: activesupport
|
93
|
-
prerelease: false
|
94
89
|
type: :runtime
|
90
|
+
prerelease: false
|
95
91
|
version_requirements: *id005
|
96
92
|
- !ruby/object:Gem::Dependency
|
93
|
+
name: activesupport
|
97
94
|
requirement: &id006 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
102
|
+
type: :runtime
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: *id006
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: rspec
|
107
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
98
108
|
none: false
|
99
109
|
requirements:
|
100
110
|
- - ~>
|
101
111
|
- !ruby/object:Gem::Version
|
102
|
-
hash: 13
|
103
112
|
segments:
|
104
113
|
- 2
|
105
114
|
- 0
|
106
115
|
- 1
|
107
116
|
version: 2.0.1
|
108
|
-
name: rspec
|
109
|
-
prerelease: false
|
110
117
|
type: :development
|
111
|
-
|
118
|
+
prerelease: false
|
119
|
+
version_requirements: *id007
|
112
120
|
- !ruby/object:Gem::Dependency
|
113
|
-
|
121
|
+
name: haml
|
122
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
114
123
|
none: false
|
115
124
|
requirements:
|
116
125
|
- - ~>
|
117
126
|
- !ruby/object:Gem::Version
|
118
|
-
hash: 35
|
119
127
|
segments:
|
120
128
|
- 3
|
121
129
|
- 0
|
122
130
|
- 18
|
123
131
|
version: 3.0.18
|
124
|
-
name: haml
|
125
|
-
prerelease: false
|
126
132
|
type: :development
|
127
|
-
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: *id008
|
128
135
|
- !ruby/object:Gem::Dependency
|
129
|
-
|
136
|
+
name: watchr
|
137
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
130
138
|
none: false
|
131
139
|
requirements:
|
132
140
|
- - ~>
|
133
141
|
- !ruby/object:Gem::Version
|
134
|
-
hash: 7
|
135
142
|
segments:
|
136
143
|
- 0
|
137
144
|
- 6
|
138
145
|
version: "0.6"
|
139
|
-
name: watchr
|
140
|
-
prerelease: false
|
141
146
|
type: :development
|
142
|
-
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: *id009
|
143
149
|
description: a code metric tool for rails codes, written in Ruby.
|
144
150
|
email:
|
145
151
|
- flyerhzm@gmail.com
|
@@ -202,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
202
208
|
requirements:
|
203
209
|
- - ">="
|
204
210
|
- !ruby/object:Gem::Version
|
205
|
-
hash:
|
211
|
+
hash: -3421555404989740069
|
206
212
|
segments:
|
207
213
|
- 0
|
208
214
|
version: "0"
|
@@ -211,7 +217,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
217
|
requirements:
|
212
218
|
- - ">="
|
213
219
|
- !ruby/object:Gem::Version
|
214
|
-
hash: 23
|
215
220
|
segments:
|
216
221
|
- 1
|
217
222
|
- 3
|