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