rails_best_practices 0.3.12 → 0.3.13
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.
- data/README.textile +2 -1
- data/VERSION +1 -1
- data/lib/rails_best_practices/checks.rb +1 -0
- data/lib/rails_best_practices/checks/move_code_into_model_check.rb +53 -0
- data/rails_best_practices.gemspec +21 -18
- data/rails_best_practices.yml +1 -0
- data/spec/rails_best_practices/checks/move_code_into_model_check_spec.rb +41 -0
- metadata +20 -17
data/README.textile
CHANGED
@@ -82,6 +82,7 @@ IsolateSeedDataCheck: { }
|
|
82
82
|
AlwaysAddDbIndexCheck: { }
|
83
83
|
UseBeforeFilterCheck: { }
|
84
84
|
MoveCodeIntoControllerCheck: { }
|
85
|
+
MoveCodeIntoModelCheck: { }
|
85
86
|
MoveCodeIntoHelperCheck: { array_count: 3 }
|
86
87
|
ReplaceInstanceVariableWithLocalVariableCheck: { }
|
87
88
|
</code></pre>
|
@@ -126,7 +127,7 @@ h2. Progress
|
|
126
127
|
|
127
128
|
* Lesson 6. View
|
128
129
|
## [-Move code into controller-]
|
129
|
-
## Move code into model
|
130
|
+
## [-Move code into model-]
|
130
131
|
## [-Move code into helper-]
|
131
132
|
## [-Replace instance variable with local variable-]
|
132
133
|
## [-Use Form Builder-] # not implement, use http://github.com/justinfrench/formtastic
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.13
|
@@ -17,5 +17,6 @@ require 'rails_best_practices/checks/isolate_seed_data_check'
|
|
17
17
|
require 'rails_best_practices/checks/always_add_db_index_check'
|
18
18
|
require 'rails_best_practices/checks/use_before_filter_check'
|
19
19
|
require 'rails_best_practices/checks/move_code_into_controller_check'
|
20
|
+
require 'rails_best_practices/checks/move_code_into_model_check'
|
20
21
|
require 'rails_best_practices/checks/move_code_into_helper_check'
|
21
22
|
require 'rails_best_practices/checks/replace_instance_variable_with_local_variable_check'
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rails_best_practices/checks/check'
|
2
|
+
|
3
|
+
module RailsBestPractices
|
4
|
+
module Checks
|
5
|
+
# Check a view file to make sure there is no complex logic call for model.
|
6
|
+
#
|
7
|
+
# Implementation: Check if a local variable or instance variable called more than 3 times in if statuement, then it should more code into model.
|
8
|
+
class MoveCodeIntoModelCheck < Check
|
9
|
+
|
10
|
+
def interesting_nodes
|
11
|
+
[:if]
|
12
|
+
end
|
13
|
+
|
14
|
+
def interesting_files
|
15
|
+
VIEW_FILES
|
16
|
+
end
|
17
|
+
|
18
|
+
def evaluate_start(node)
|
19
|
+
@variables = {}
|
20
|
+
node.grep_nodes(:node_type => :call).each { |call_node| remember_call(call_node) }
|
21
|
+
check_errors
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def check_errors
|
27
|
+
@variables.each do |node, count|
|
28
|
+
add_error "move code into model (#{node.to_ruby})" if count > 2
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def remember_call(call_node)
|
33
|
+
variable_node = variable(call_node)
|
34
|
+
if variable_node
|
35
|
+
@variables[variable_node] ||= 0
|
36
|
+
@variables[variable_node] += 1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def variable(call_node)
|
41
|
+
while call_node.subject.node_type == :call
|
42
|
+
call_node = call_node.subject
|
43
|
+
end
|
44
|
+
subject_node = call_node.subject
|
45
|
+
if [:ivar, :lvar].include?(subject_node.node_type) and subject_node[1] != :_erbout
|
46
|
+
subject_node
|
47
|
+
else
|
48
|
+
nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rails_best_practices}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.13"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Richard Huang"]
|
12
|
-
s.date = %q{2009-12-
|
12
|
+
s.date = %q{2009-12-14}
|
13
13
|
s.default_executable = %q{rails_best_practices}
|
14
14
|
s.description = %q{check rails files according to ihower's presentation 'rails best practices'}
|
15
15
|
s.email = %q{flyerhzm@gmail.com}
|
@@ -37,6 +37,7 @@ Gem::Specification.new do |s|
|
|
37
37
|
"lib/rails_best_practices/checks/many_to_many_collection_check.rb",
|
38
38
|
"lib/rails_best_practices/checks/move_code_into_controller_check.rb",
|
39
39
|
"lib/rails_best_practices/checks/move_code_into_helper_check.rb",
|
40
|
+
"lib/rails_best_practices/checks/move_code_into_model_check.rb",
|
40
41
|
"lib/rails_best_practices/checks/move_finder_to_named_scope_check.rb",
|
41
42
|
"lib/rails_best_practices/checks/move_model_logic_into_model_check.rb",
|
42
43
|
"lib/rails_best_practices/checks/needless_deep_nesting_check.rb",
|
@@ -67,6 +68,7 @@ Gem::Specification.new do |s|
|
|
67
68
|
"spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb",
|
68
69
|
"spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb",
|
69
70
|
"spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb",
|
71
|
+
"spec/rails_best_practices/checks/move_code_into_model_check_spec.rb",
|
70
72
|
"spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb",
|
71
73
|
"spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb",
|
72
74
|
"spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb",
|
@@ -89,27 +91,28 @@ Gem::Specification.new do |s|
|
|
89
91
|
s.rubygems_version = %q{1.3.5}
|
90
92
|
s.summary = %q{check rails files according to ihower's presentation 'rails best practices'}
|
91
93
|
s.test_files = [
|
92
|
-
"spec/rails_best_practices/checks/
|
93
|
-
"spec/rails_best_practices/checks/always_add_db_index_check_spec.rb",
|
94
|
-
"spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb",
|
95
|
-
"spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb",
|
96
|
-
"spec/rails_best_practices/checks/law_of_demeter_check_spec.rb",
|
97
|
-
"spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb",
|
98
|
-
"spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb",
|
99
|
-
"spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb",
|
100
|
-
"spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb",
|
94
|
+
"spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb",
|
101
95
|
"spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb",
|
102
|
-
"spec/rails_best_practices/checks/
|
103
|
-
"spec/rails_best_practices/checks/
|
104
|
-
"spec/rails_best_practices/checks/
|
96
|
+
"spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb",
|
97
|
+
"spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb",
|
98
|
+
"spec/rails_best_practices/checks/use_observer_check_spec.rb",
|
105
99
|
"spec/rails_best_practices/checks/overuse_route_customizations_check_spec.rb",
|
100
|
+
"spec/rails_best_practices/checks/nested_model_forms_check_spec.rb",
|
101
|
+
"spec/rails_best_practices/checks/always_add_db_index_check_spec.rb",
|
102
|
+
"spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb",
|
103
|
+
"spec/rails_best_practices/checks/use_before_filter_check_spec.rb",
|
104
|
+
"spec/rails_best_practices/checks/law_of_demeter_check_spec.rb",
|
105
|
+
"spec/rails_best_practices/checks/use_scope_access_check_spec.rb",
|
106
106
|
"spec/rails_best_practices/checks/replace_complex_creation_with_factory_method_check_spec.rb",
|
107
|
+
"spec/rails_best_practices/checks/not_use_default_route_check_spec.rb",
|
108
|
+
"spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb",
|
109
|
+
"spec/rails_best_practices/checks/use_model_callback_check_spec.rb",
|
110
|
+
"spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb",
|
107
111
|
"spec/rails_best_practices/checks/replace_instance_variable_with_local_variable_check_spec.rb",
|
108
|
-
"spec/rails_best_practices/checks/use_before_filter_check_spec.rb",
|
109
112
|
"spec/rails_best_practices/checks/use_model_association_check_spec.rb",
|
110
|
-
"spec/rails_best_practices/checks/
|
111
|
-
"spec/rails_best_practices/checks/
|
112
|
-
"spec/rails_best_practices/checks/
|
113
|
+
"spec/rails_best_practices/checks/move_code_into_model_check_spec.rb",
|
114
|
+
"spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb",
|
115
|
+
"spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb",
|
113
116
|
"spec/spec_helper.rb"
|
114
117
|
]
|
115
118
|
|
data/rails_best_practices.yml
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe RailsBestPractices::Checks::MoveCodeIntoModelCheck do
|
4
|
+
before(:each) do
|
5
|
+
@runner = RailsBestPractices::Core::Runner.new(RailsBestPractices::Checks::MoveCodeIntoModelCheck.new)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should move code into model" do
|
9
|
+
content =<<-EOF
|
10
|
+
<% if current_user && (current_user == @post.user || @post.editors.include?(current_user)) %>
|
11
|
+
<%= link_to 'Edit this post', edit_post_url(@post) %>
|
12
|
+
<% end %>
|
13
|
+
EOF
|
14
|
+
@runner.check('app/views/posts/show.html.erb', content)
|
15
|
+
errors = @runner.errors
|
16
|
+
errors.should_not be_empty
|
17
|
+
errors[0].to_s.should == "app/views/posts/show.html.erb:1 - move code into model (@post)"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should move code into model with haml" do
|
21
|
+
content =<<-EOF
|
22
|
+
- if current_user && (current_user == @post.user || @post.editors.include?(current_user))
|
23
|
+
= link_to 'Edit this post', edit_post_url(@post)
|
24
|
+
EOF
|
25
|
+
@runner.check('app/views/posts/show.html.haml', content)
|
26
|
+
errors = @runner.errors
|
27
|
+
errors.should_not be_empty
|
28
|
+
errors[0].to_s.should == "app/views/posts/show.html.haml:1 - move code into model (@post)"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should not move code into model" do
|
32
|
+
content =<<-EOF
|
33
|
+
<% if @post.editable_by?(current_user)) %>
|
34
|
+
<%= link_to 'Edit this post', edit_post_url(@post) %>
|
35
|
+
<% end %>
|
36
|
+
EOF
|
37
|
+
@runner.check('app/views/posts/show.html.erb', content)
|
38
|
+
errors = @runner.errors
|
39
|
+
errors.should be_empty
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_best_practices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-14 00:00:00 +08:00
|
13
13
|
default_executable: rails_best_practices
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -60,6 +60,7 @@ files:
|
|
60
60
|
- lib/rails_best_practices/checks/many_to_many_collection_check.rb
|
61
61
|
- lib/rails_best_practices/checks/move_code_into_controller_check.rb
|
62
62
|
- lib/rails_best_practices/checks/move_code_into_helper_check.rb
|
63
|
+
- lib/rails_best_practices/checks/move_code_into_model_check.rb
|
63
64
|
- lib/rails_best_practices/checks/move_finder_to_named_scope_check.rb
|
64
65
|
- lib/rails_best_practices/checks/move_model_logic_into_model_check.rb
|
65
66
|
- lib/rails_best_practices/checks/needless_deep_nesting_check.rb
|
@@ -90,6 +91,7 @@ files:
|
|
90
91
|
- spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb
|
91
92
|
- spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb
|
92
93
|
- spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb
|
94
|
+
- spec/rails_best_practices/checks/move_code_into_model_check_spec.rb
|
93
95
|
- spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb
|
94
96
|
- spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb
|
95
97
|
- spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb
|
@@ -134,25 +136,26 @@ signing_key:
|
|
134
136
|
specification_version: 3
|
135
137
|
summary: check rails files according to ihower's presentation 'rails best practices'
|
136
138
|
test_files:
|
137
|
-
- spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb
|
138
|
-
- spec/rails_best_practices/checks/always_add_db_index_check_spec.rb
|
139
139
|
- spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb
|
140
|
-
- spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb
|
141
|
-
- spec/rails_best_practices/checks/law_of_demeter_check_spec.rb
|
142
|
-
- spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb
|
143
|
-
- spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb
|
144
|
-
- spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb
|
145
|
-
- spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb
|
146
140
|
- spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb
|
147
|
-
- spec/rails_best_practices/checks/
|
148
|
-
- spec/rails_best_practices/checks/
|
149
|
-
- spec/rails_best_practices/checks/
|
141
|
+
- spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb
|
142
|
+
- spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb
|
143
|
+
- spec/rails_best_practices/checks/use_observer_check_spec.rb
|
150
144
|
- spec/rails_best_practices/checks/overuse_route_customizations_check_spec.rb
|
145
|
+
- spec/rails_best_practices/checks/nested_model_forms_check_spec.rb
|
146
|
+
- spec/rails_best_practices/checks/always_add_db_index_check_spec.rb
|
147
|
+
- spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb
|
148
|
+
- spec/rails_best_practices/checks/use_before_filter_check_spec.rb
|
149
|
+
- spec/rails_best_practices/checks/law_of_demeter_check_spec.rb
|
150
|
+
- spec/rails_best_practices/checks/use_scope_access_check_spec.rb
|
151
151
|
- spec/rails_best_practices/checks/replace_complex_creation_with_factory_method_check_spec.rb
|
152
|
+
- spec/rails_best_practices/checks/not_use_default_route_check_spec.rb
|
153
|
+
- spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb
|
154
|
+
- spec/rails_best_practices/checks/use_model_callback_check_spec.rb
|
155
|
+
- spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb
|
152
156
|
- spec/rails_best_practices/checks/replace_instance_variable_with_local_variable_check_spec.rb
|
153
|
-
- spec/rails_best_practices/checks/use_before_filter_check_spec.rb
|
154
157
|
- spec/rails_best_practices/checks/use_model_association_check_spec.rb
|
155
|
-
- spec/rails_best_practices/checks/
|
156
|
-
- spec/rails_best_practices/checks/
|
157
|
-
- spec/rails_best_practices/checks/
|
158
|
+
- spec/rails_best_practices/checks/move_code_into_model_check_spec.rb
|
159
|
+
- spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb
|
160
|
+
- spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb
|
158
161
|
- spec/spec_helper.rb
|