rails_best_practices 0.3.12 → 0.3.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.12
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.12"
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-09}
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/add_model_virtual_attribute_check_spec.rb",
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/needless_deep_nesting_check_spec.rb",
103
- "spec/rails_best_practices/checks/nested_model_forms_check_spec.rb",
104
- "spec/rails_best_practices/checks/not_use_default_route_check_spec.rb",
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/use_model_callback_check_spec.rb",
111
- "spec/rails_best_practices/checks/use_observer_check_spec.rb",
112
- "spec/rails_best_practices/checks/use_scope_access_check_spec.rb",
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
 
@@ -17,5 +17,6 @@ IsolateSeedDataCheck: { }
17
17
  AlwaysAddDbIndexCheck: { }
18
18
  UseBeforeFilterCheck: { }
19
19
  MoveCodeIntoControllerCheck: { }
20
+ MoveCodeIntoModelCheck: { }
20
21
  MoveCodeIntoHelperCheck: { array_count: 3 }
21
22
  ReplaceInstanceVariableWithLocalVariableCheck: { }
@@ -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.12
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-09 00:00:00 +08:00
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/needless_deep_nesting_check_spec.rb
148
- - spec/rails_best_practices/checks/nested_model_forms_check_spec.rb
149
- - spec/rails_best_practices/checks/not_use_default_route_check_spec.rb
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/use_model_callback_check_spec.rb
156
- - spec/rails_best_practices/checks/use_observer_check_spec.rb
157
- - spec/rails_best_practices/checks/use_scope_access_check_spec.rb
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