rails_best_practices 0.7.5 → 0.8.0
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.md +3 -0
- data/lib/rails_best_practices/core/runner.rb +2 -1
- data/lib/rails_best_practices/prepares.rb +9 -1
- data/lib/rails_best_practices/reviews.rb +2 -0
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +2 -2
- data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +39 -0
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +38 -0
- data/lib/rails_best_practices/version.rb +1 -1
- data/rails_best_practices.yml +2 -0
- data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +16 -0
- data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +66 -0
- data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +74 -0
- metadata +11 -5
data/README.md
CHANGED
@@ -108,6 +108,8 @@ Now you can customize this configuration file, the default configuration is as f
|
|
108
108
|
UseQueryAttributeCheck: { }
|
109
109
|
RemoveTrailingWhitespaceCheck: { }
|
110
110
|
UseMultipartAlternativeAsContentTypeOfEmailCheck: {}
|
111
|
+
SimplifyRenderInViewsCheck: {}
|
112
|
+
SimplifyRenderInControllersCheck: {}
|
111
113
|
|
112
114
|
You can remove or comment one review to disable it, and you can change the options.
|
113
115
|
|
@@ -156,6 +158,7 @@ View
|
|
156
158
|
2. Move code into model
|
157
159
|
3. Move code into helper
|
158
160
|
4. Replace instance variable with local variable
|
161
|
+
5. Simplify render in views
|
159
162
|
|
160
163
|
Deployment
|
161
164
|
|
@@ -126,7 +126,8 @@ module RailsBestPractices
|
|
126
126
|
content = Haml::Engine.new(content).precompiled
|
127
127
|
# remove \xxx characters
|
128
128
|
content.gsub!(/\\\d{3}/, '')
|
129
|
-
rescue Haml::
|
129
|
+
rescue Haml::Error
|
130
|
+
# do nothing, just ignore the wrong haml files.
|
130
131
|
end
|
131
132
|
end
|
132
133
|
content
|
@@ -6,7 +6,15 @@ require 'rails_best_practices/prepares/schema_prepare'
|
|
6
6
|
module RailsBestPractices
|
7
7
|
module Prepares
|
8
8
|
class <<self
|
9
|
-
|
9
|
+
attr_writer :models, :model_associations, :model_attributes, :mailer_names
|
10
|
+
|
11
|
+
[:models, :model_associations, :model_attributes, :mailer_names].each do |method_name|
|
12
|
+
class_eval <<-EOS
|
13
|
+
def #{method_name}
|
14
|
+
@#{method_name} ||= []
|
15
|
+
end
|
16
|
+
EOS
|
17
|
+
end
|
10
18
|
end
|
11
19
|
end
|
12
20
|
end
|
@@ -22,3 +22,5 @@ require 'rails_best_practices/reviews/dry_bundler_in_capistrano_review'
|
|
22
22
|
require 'rails_best_practices/reviews/use_say_with_time_in_migrations_review'
|
23
23
|
require 'rails_best_practices/reviews/use_query_attribute_review'
|
24
24
|
require 'rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review'
|
25
|
+
require 'rails_best_practices/reviews/simplify_render_in_views_review'
|
26
|
+
require 'rails_best_practices/reviews/simplify_render_in_controllers_review'
|
@@ -201,8 +201,8 @@ module RailsBestPractices
|
|
201
201
|
|
202
202
|
# remove the non foreign keys with only _type column.
|
203
203
|
def remove_only_type_foreign_keys
|
204
|
-
@foreign_keys.
|
205
|
-
|
204
|
+
@foreign_keys.each { |table, foreign_keys|
|
205
|
+
foreign_keys.delete_if { |key| key =~ /_type$/ }
|
206
206
|
}
|
207
207
|
end
|
208
208
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'rails_best_practices/reviews/review'
|
3
|
+
|
4
|
+
module RailsBestPractices
|
5
|
+
module Reviews
|
6
|
+
# Review a controller file to make sure using simplified syntax for render.
|
7
|
+
#
|
8
|
+
# See the best practice details here http://rails-bestpractices.com/posts/62-simplify-render-in-controllers.
|
9
|
+
#
|
10
|
+
# Implementation:
|
11
|
+
#
|
12
|
+
# Review process:
|
13
|
+
# check all render method calls in controller files,
|
14
|
+
# if there is a key 'action', 'template' or 'file' in the argument,
|
15
|
+
# then they should be replaced by simplified syntax.
|
16
|
+
class SimplifyRenderInControllersReview < Review
|
17
|
+
def url
|
18
|
+
"http://rails-bestpractices.com/posts/62-simplify-render-in-controllers"
|
19
|
+
end
|
20
|
+
|
21
|
+
def interesting_nodes
|
22
|
+
[:call]
|
23
|
+
end
|
24
|
+
|
25
|
+
def interesting_files
|
26
|
+
CONTROLLER_FILES
|
27
|
+
end
|
28
|
+
|
29
|
+
# check call node in the controller file,
|
30
|
+
# if its message is render and the arguments contain a key action, template or file,
|
31
|
+
# then it should be replaced by simplified syntax.
|
32
|
+
def start_call(call_node)
|
33
|
+
if :render == call_node.message && call_node.arguments[1].to_s =~ /"(action|template|file)" =>/
|
34
|
+
add_error 'simplify render in controllers'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'rails_best_practices/reviews/review'
|
3
|
+
|
4
|
+
module RailsBestPractices
|
5
|
+
module Reviews
|
6
|
+
# Review a view file to make sure using simplified syntax for render.
|
7
|
+
#
|
8
|
+
# See the best practice details here http://rails-bestpractices.com/posts/61-simplify-render-in-views.
|
9
|
+
#
|
10
|
+
# Implementation:
|
11
|
+
#
|
12
|
+
# Review process:
|
13
|
+
# check all render method calls in view files,
|
14
|
+
# if there is a key 'partial' in the argument, then they should be replaced by simplified syntax.
|
15
|
+
class SimplifyRenderInViewsReview < Review
|
16
|
+
def url
|
17
|
+
"http://rails-bestpractices.com/posts/61-simplify-render-in-views"
|
18
|
+
end
|
19
|
+
|
20
|
+
def interesting_nodes
|
21
|
+
[:call]
|
22
|
+
end
|
23
|
+
|
24
|
+
def interesting_files
|
25
|
+
VIEW_FILES
|
26
|
+
end
|
27
|
+
|
28
|
+
# check call node in view file,
|
29
|
+
# if its message is render and the arguments contain a key partial,
|
30
|
+
# then it should be replaced by simplified syntax.
|
31
|
+
def start_call(call_node)
|
32
|
+
if :render == call_node.message && call_node.arguments[1].to_s =~ /"partial" =>/
|
33
|
+
add_error 'simplify render in views'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/rails_best_practices.yml
CHANGED
@@ -83,6 +83,22 @@ describe RailsBestPractices::Reviews::AlwaysAddDbIndexReview do
|
|
83
83
|
runner.errors[0].to_s.should == "db/schema.rb:2 - always add db index (taggings => [tag_id])"
|
84
84
|
end
|
85
85
|
|
86
|
+
it "should always add db index only _id without non related _type column" do
|
87
|
+
content = <<-EOF
|
88
|
+
ActiveRecord::Schema.define(:version => 20100603080629) do
|
89
|
+
create_table "websites", :force => true do |t|
|
90
|
+
t.integer "user_id"
|
91
|
+
t.string "icon_file_name"
|
92
|
+
t.integer "icon_file_size"
|
93
|
+
t.string "icon_content_type"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
EOF
|
97
|
+
runner.review('db/schema.rb', content)
|
98
|
+
runner.should have(1).errors
|
99
|
+
runner.errors[0].to_s.should == "db/schema.rb:2 - always add db index (websites => [user_id])"
|
100
|
+
end
|
101
|
+
|
86
102
|
it "should not always add db index with column has no id" do
|
87
103
|
content = <<-EOF
|
88
104
|
ActiveRecord::Schema.define(:version => 20100603080629) do
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RailsBestPractices::Reviews::SimplifyRenderInControllersReview do
|
4
|
+
let(:runner) { RailsBestPractices::Core::Runner.new(:reviews => RailsBestPractices::Reviews::SimplifyRenderInControllersReview.new) }
|
5
|
+
|
6
|
+
it "should simplify render action view" do
|
7
|
+
content =<<-EOF
|
8
|
+
def edit
|
9
|
+
render :action => :edit
|
10
|
+
end
|
11
|
+
EOF
|
12
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
13
|
+
runner.should have(1).errors
|
14
|
+
runner.errors[0].to_s.should == "app/controllers/posts_controller.rb:3 - simplify render in controllers"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should simplify render actions's template" do
|
18
|
+
content =<<-EOF
|
19
|
+
def edit
|
20
|
+
render :template => 'books/edit'
|
21
|
+
end
|
22
|
+
EOF
|
23
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
24
|
+
runner.should have(1).errors
|
25
|
+
runner.errors[0].to_s.should == "app/controllers/posts_controller.rb:3 - simplify render in controllers"
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should simplify render an arbitrary file" do
|
29
|
+
content =<<-EOF
|
30
|
+
def edit
|
31
|
+
render :file => '/path/to/rails/app/views/books/edit'
|
32
|
+
end
|
33
|
+
EOF
|
34
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
35
|
+
runner.should have(1).errors
|
36
|
+
runner.errors[0].to_s.should == "app/controllers/posts_controller.rb:3 - simplify render in controllers"
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should not simplify render action view" do
|
40
|
+
content =<<-EOF
|
41
|
+
render :edit
|
42
|
+
EOF
|
43
|
+
runner.review("app/controllers/posts_controller", content)
|
44
|
+
runner.should have(0).errors
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should not simplify render actions's template" do
|
48
|
+
content =<<-EOF
|
49
|
+
def edit
|
50
|
+
render 'books/edit'
|
51
|
+
end
|
52
|
+
EOF
|
53
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
54
|
+
runner.should have(0).errors
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should not simplify render an arbitrary file" do
|
58
|
+
content =<<-EOF
|
59
|
+
def edit
|
60
|
+
render '/path/to/rails/app/views/books/edit'
|
61
|
+
end
|
62
|
+
EOF
|
63
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
64
|
+
runner.should have(0).errors
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe RailsBestPractices::Reviews::SimplifyRenderInViewsReview do
|
4
|
+
let(:runner) { RailsBestPractices::Core::Runner.new(:reviews => RailsBestPractices::Reviews::SimplifyRenderInViewsReview.new) }
|
5
|
+
|
6
|
+
it "should simplify render simple partial" do
|
7
|
+
content =<<-EOF
|
8
|
+
<%= render :partial => 'sidebar' %>
|
9
|
+
EOF
|
10
|
+
runner.review('app/views/posts/index.html.erb', content)
|
11
|
+
runner.should have(1).errors
|
12
|
+
runner.errors[0].to_s.should == "app/views/posts/index.html.erb:1 - simplify render in views"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should simplify render partial with object" do
|
16
|
+
content =<<-EOF
|
17
|
+
<%= render :partial => 'posts/post', :object => @post %>
|
18
|
+
EOF
|
19
|
+
runner.review('app/views/posts/index.html.erb', content)
|
20
|
+
runner.should have(1).errors
|
21
|
+
runner.errors[0].to_s.should == "app/views/posts/index.html.erb:1 - simplify render in views"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should simplify render partial with collection" do
|
25
|
+
content =<<-EOF
|
26
|
+
<%= render :partial => 'posts', :collection => @posts %>
|
27
|
+
EOF
|
28
|
+
runner.review('app/views/posts/index.html.erb', content)
|
29
|
+
runner.should have(1).errors
|
30
|
+
runner.errors[0].to_s.should == "app/views/posts/index.html.erb:1 - simplify render in views"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should simplify render partial with local variables" do
|
34
|
+
content =<<-EOF
|
35
|
+
<%= render :partial => 'comments/comment', :locals => { :parent => post } %>
|
36
|
+
EOF
|
37
|
+
runner.review('app/views/posts/index.html.erb', content)
|
38
|
+
runner.should have(1).errors
|
39
|
+
runner.errors[0].to_s.should == "app/views/posts/index.html.erb:1 - simplify render in views"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should not simplify render simple partial" do
|
43
|
+
content =<<-EOF
|
44
|
+
<%= render 'sidebar' %>
|
45
|
+
<%= render 'shared/sidebar' %>
|
46
|
+
EOF
|
47
|
+
runner.review('app/views/posts/index.html.erb', content)
|
48
|
+
runner.should have(0).errors
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should not simplify render partial with object" do
|
52
|
+
content =<<-EOF
|
53
|
+
<%= render @post %>
|
54
|
+
EOF
|
55
|
+
runner.review('app/views/posts/index.html.erb', content)
|
56
|
+
runner.should have(0).errors
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should not simplify render partial with collection" do
|
60
|
+
content =<<-EOF
|
61
|
+
<%= render @posts %>
|
62
|
+
EOF
|
63
|
+
runner.review('app/views/posts/index.html.erb', content)
|
64
|
+
runner.should have(0).errors
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should not simplify render partial with local variables" do
|
68
|
+
content =<<-EOF
|
69
|
+
<%= render 'comments/comment', :parent => post %>
|
70
|
+
EOF
|
71
|
+
runner.review('app/views/posts/index.html.erb', content)
|
72
|
+
runner.should have(0).errors
|
73
|
+
end
|
74
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_best_practices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 63
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 8
|
9
|
+
- 0
|
10
|
+
version: 0.8.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Richard Huang
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-04-23 00:00:00 +08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -247,6 +247,8 @@ files:
|
|
247
247
|
- lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb
|
248
248
|
- lib/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review.rb
|
249
249
|
- lib/rails_best_practices/reviews/review.rb
|
250
|
+
- lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb
|
251
|
+
- lib/rails_best_practices/reviews/simplify_render_in_views_review.rb
|
250
252
|
- lib/rails_best_practices/reviews/use_before_filter_review.rb
|
251
253
|
- lib/rails_best_practices/reviews/use_model_association_review.rb
|
252
254
|
- lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb
|
@@ -288,6 +290,8 @@ files:
|
|
288
290
|
- spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb
|
289
291
|
- spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb
|
290
292
|
- spec/rails_best_practices/reviews/review_spec.rb
|
293
|
+
- spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb
|
294
|
+
- spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb
|
291
295
|
- spec/rails_best_practices/reviews/use_before_filter_review_spec.rb
|
292
296
|
- spec/rails_best_practices/reviews/use_model_association_review_spec.rb
|
293
297
|
- spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb
|
@@ -378,6 +382,8 @@ test_files:
|
|
378
382
|
- spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb
|
379
383
|
- spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb
|
380
384
|
- spec/rails_best_practices/reviews/review_spec.rb
|
385
|
+
- spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb
|
386
|
+
- spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb
|
381
387
|
- spec/rails_best_practices/reviews/use_before_filter_review_spec.rb
|
382
388
|
- spec/rails_best_practices/reviews/use_model_association_review_spec.rb
|
383
389
|
- spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb
|