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.
@@ -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