rails_best_practices 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -26,7 +26,7 @@ module RailsBestPractices
26
26
 
27
27
  def check_errors
28
28
  @variables.each do |node, count|
29
- add_error "move code into model (#{node})" if count > 2
29
+ add_error "move code into model (#{node})", node.file, node.line if count > 2
30
30
  end
31
31
  end
32
32
 
@@ -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
- add_error "use query attribute", node.file, node.line if need_query_attribute?(node.conditional_statement)
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 need_query_attribute?(conditional_statement_node)
57
+ def query_attribute_node(conditional_statement_node)
56
58
  case conditional_statement_node.node_type
57
59
  when :and, :or
58
- return need_query_attribute?(conditional_statement_node[1]) || need_query_attribute?(conditional_statement_node[2])
60
+ return query_attribute_node(conditional_statement_node[1]) || query_attribute_node(conditional_statement_node[2])
59
61
  when :not
60
- return need_query_attribute?(conditional_statement_node[1])
62
+ return query_attribute_node(conditional_statement_node[1])
61
63
  when :call
62
- return true if query_method?(conditional_statement_node) or compare_with_empty_string?(conditional_statement_node)
64
+ return conditional_statement_node if query_method?(conditional_statement_node) or compare_with_empty_string?(conditional_statement_node)
63
65
  end
64
- false
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 'erb'
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 = ERB.new(content).src
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
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  module RailsBestPractices
3
- VERSION = "0.5.2"
3
+ VERSION = "0.5.3"
4
4
  end
5
5
 
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
- - 2
10
- version: 0.5.2
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-01 00:00:00 +08:00
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
- - 0
77
- version: "0"
78
- name: i18n
79
- prerelease: false
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
- version_requirements: *id006
118
+ prerelease: false
119
+ version_requirements: *id007
112
120
  - !ruby/object:Gem::Dependency
113
- requirement: &id007 !ruby/object:Gem::Requirement
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
- version_requirements: *id007
133
+ prerelease: false
134
+ version_requirements: *id008
128
135
  - !ruby/object:Gem::Dependency
129
- requirement: &id008 !ruby/object:Gem::Requirement
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
- version_requirements: *id008
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: 3
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