rails_best_practices 1.9.1 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc +1 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +10 -2
- data/README.md +33 -27
- data/lib/rails_best_practices/analyzer.rb +13 -13
- data/lib/rails_best_practices/core/check.rb +7 -6
- data/lib/rails_best_practices/core/checking_visitor.rb +1 -1
- data/lib/rails_best_practices/core/runner.rb +2 -3
- data/lib/rails_best_practices/core_ext/sexp.rb +18 -17
- data/lib/rails_best_practices/lexicals.rb +1 -0
- data/lib/rails_best_practices/lexicals/long_line_check.rb +31 -0
- data/lib/rails_best_practices/prepares/config_prepare.rb +1 -1
- data/lib/rails_best_practices/reviews.rb +2 -0
- data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +2 -2
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +1 -1
- data/lib/rails_best_practices/reviews/hash_syntax_review.rb +63 -0
- data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +1 -1
- data/lib/rails_best_practices/reviews/move_code_into_model_review.rb +1 -1
- data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +1 -1
- data/lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb +1 -1
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +1 -1
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +1 -1
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +15 -6
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +4 -2
- data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +8 -4
- data/lib/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review.rb +2 -1
- data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +52 -8
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +14 -2
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +8 -3
- data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_observer_review.rb +1 -1
- data/lib/rails_best_practices/reviews/use_parentheses_in_method_def_review.rb +33 -0
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +16 -6
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +9 -6
- data/lib/rails_best_practices/reviews/use_scope_access_review.rb +8 -3
- data/lib/rails_best_practices/version.rb +1 -1
- data/rails_best_practices.yml +28 -25
- data/rake_rubies.sh +1 -1
- data/spec/rails_best_practices/analyzer_spec.rb +1 -1
- data/spec/rails_best_practices/core/check_spec.rb +7 -7
- data/spec/rails_best_practices/core/checking_visitor_spec.rb +7 -7
- data/spec/rails_best_practices/core/error_spec.rb +12 -12
- data/spec/rails_best_practices/core_ext/sexp_spec.rb +103 -85
- data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +47 -0
- data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +1 -1
- data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +1 -1
- data/spec/rails_best_practices/prepares/config_prepare_spec.rb +1 -1
- data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +1 -1
- data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +1 -1
- data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +1 -1
- data/spec/rails_best_practices/prepares/model_prepare_spec.rb +4 -4
- data/spec/rails_best_practices/prepares/route_prepare_spec.rb +54 -54
- data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +6 -6
- data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +4 -4
- data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +46 -46
- data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +3 -3
- data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +67 -0
- data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +8 -8
- data/spec/rails_best_practices/reviews/keep_finders_on_their_own_model_review_spec.rb +9 -9
- data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +7 -7
- data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +1 -1
- data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +1 -1
- data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +1 -1
- data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +13 -13
- data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +2 -2
- data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +3 -3
- data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +3 -3
- data/spec/rails_best_practices/reviews/not_use_times_ago_in_words_review_spec.rb +1 -1
- data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +26 -26
- data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +11 -2
- data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +1 -1
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +8 -8
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +2 -2
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +25 -10
- data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +3 -3
- data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +1 -1
- data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +28 -28
- data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +4 -4
- data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +15 -7
- data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +3 -3
- data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +3 -3
- data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +3 -3
- data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +5 -5
- data/spec/rails_best_practices/reviews/use_parenthesis_in_method_def_spec.rb +41 -0
- data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +3 -3
- data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +8 -8
- data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +9 -9
- data/spec/spec_helper.rb +1 -1
- metadata +36 -29
- data/.rspec.example +0 -2
- data/.rvmrc.example +0 -2
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe KeepFindersOnTheirOwnModelReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: KeepFindersOnTheirOwnModelReview.new) }
|
7
7
|
|
8
8
|
it "should keep finders on thier own model" do
|
9
9
|
content = <<-EOF
|
@@ -11,8 +11,8 @@ module RailsBestPractices
|
|
11
11
|
has_many :comments
|
12
12
|
|
13
13
|
def find_valid_comments
|
14
|
-
self.comment.find(:all, :
|
15
|
-
:
|
14
|
+
self.comment.find(:all, conditions: { is_spam: false },
|
15
|
+
limit: 10)
|
16
16
|
end
|
17
17
|
end
|
18
18
|
EOF
|
@@ -27,8 +27,8 @@ module RailsBestPractices
|
|
27
27
|
has_many :comments
|
28
28
|
|
29
29
|
def find_valid_comments
|
30
|
-
self.comment.all(:
|
31
|
-
:
|
30
|
+
self.comment.all(conditions: { is_spam: false },
|
31
|
+
limit: 10)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
EOF
|
@@ -43,8 +43,8 @@ module RailsBestPractices
|
|
43
43
|
has_many :comments
|
44
44
|
|
45
45
|
def find_valid_comments
|
46
|
-
self.find(:all, :
|
47
|
-
:
|
46
|
+
self.find(:all, conditions: { is_spam: false },
|
47
|
+
limit: 10)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
EOF
|
@@ -58,8 +58,8 @@ module RailsBestPractices
|
|
58
58
|
has_many :comments
|
59
59
|
|
60
60
|
def find_valid_comments
|
61
|
-
Post.find(:all, :
|
62
|
-
:
|
61
|
+
Post.find(:all, conditions: { is_spam: false },
|
62
|
+
limit: 10)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
EOF
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe LawOfDemeterReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(prepares: [Prepares::ModelPrepare.new, Prepares::SchemaPrepare.new], reviews: LawOfDemeterReview.new) }
|
7
7
|
|
8
8
|
describe "belongs_to" do
|
9
9
|
before(:each) do
|
@@ -15,7 +15,7 @@ module RailsBestPractices
|
|
15
15
|
runner.prepare('app/models/invoice.rb', content)
|
16
16
|
|
17
17
|
content = <<-EOF
|
18
|
-
ActiveRecord::Schema.define(:
|
18
|
+
ActiveRecord::Schema.define(version: 20110216150853) do
|
19
19
|
create_table "users", force => true do |t|
|
20
20
|
t.string :name
|
21
21
|
t.string :address
|
@@ -80,7 +80,7 @@ module RailsBestPractices
|
|
80
80
|
runner.prepare('app/models/invoice.rb', content)
|
81
81
|
|
82
82
|
content = <<-EOF
|
83
|
-
ActiveRecord::Schema.define(:
|
83
|
+
ActiveRecord::Schema.define(version: 20110216150853) do
|
84
84
|
create_table "prices", force => true do |t|
|
85
85
|
t.string :currency
|
86
86
|
t.integer :number
|
@@ -105,7 +105,7 @@ module RailsBestPractices
|
|
105
105
|
before :each do
|
106
106
|
content = <<-EOF
|
107
107
|
class Comment < ActiveRecord::Base
|
108
|
-
belongs_to :commentable, :
|
108
|
+
belongs_to :commentable, polymorphic: true
|
109
109
|
end
|
110
110
|
EOF
|
111
111
|
runner.prepare('app/models/comment.rb', content)
|
@@ -118,7 +118,7 @@ module RailsBestPractices
|
|
118
118
|
runner.prepare('app/models/comment.rb', content)
|
119
119
|
|
120
120
|
content = <<-EOF
|
121
|
-
ActiveRecord::Schema.define(:
|
121
|
+
ActiveRecord::Schema.define(version: 20110216150853) do
|
122
122
|
create_table "posts", force => true do |t|
|
123
123
|
t.string :title
|
124
124
|
end
|
@@ -140,13 +140,13 @@ module RailsBestPractices
|
|
140
140
|
it "should no law of demeter with method call" do
|
141
141
|
content = <<-EOF
|
142
142
|
class Question < ActiveRecord::Base
|
143
|
-
has_many :answers, :
|
143
|
+
has_many :answers, dependent: :destroy
|
144
144
|
end
|
145
145
|
EOF
|
146
146
|
runner.prepare('app/models/question.rb', content)
|
147
147
|
content = <<-EOF
|
148
148
|
class Answer < ActiveRecord::Base
|
149
|
-
belongs_to :question, :
|
149
|
+
belongs_to :question, counter_cache: true, touch: true
|
150
150
|
end
|
151
151
|
EOF
|
152
152
|
runner.prepare('app/models/answer.rb', content)
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe MoveCodeIntoControllerReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: MoveCodeIntoControllerReview.new) }
|
7
7
|
|
8
8
|
it "should move code into controller for method call" do
|
9
9
|
content = <<-EOF
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe MoveCodeIntoHelperReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: MoveCodeIntoHelperReview.new('array_count' => 2)) }
|
7
7
|
|
8
8
|
it "should move code into helper" do
|
9
9
|
content = <<-EOF
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe MoveCodeIntoModelReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: MoveCodeIntoModelReview.new) }
|
7
7
|
|
8
8
|
it "should move code into model" do
|
9
9
|
content =<<-EOF
|
@@ -3,26 +3,26 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe MoveFinderToNamedScopeReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: MoveFinderToNamedScopeReview.new) }
|
7
7
|
|
8
8
|
it "should move finder to named_scope" do
|
9
9
|
content = <<-EOF
|
10
10
|
class PostsController < ActionController::Base
|
11
11
|
def index
|
12
|
-
@public_posts = Post.find(:all, :
|
13
|
-
:
|
14
|
-
:
|
12
|
+
@public_posts = Post.find(:all, conditions: { state: 'public' },
|
13
|
+
limit: 10,
|
14
|
+
order: 'created_at desc')
|
15
15
|
|
16
|
-
@draft_posts = Post.find(:all, :
|
17
|
-
:
|
18
|
-
:
|
16
|
+
@draft_posts = Post.find(:all, conditions: { state: 'draft' },
|
17
|
+
limit: 10,
|
18
|
+
order: 'created_at desc')
|
19
19
|
end
|
20
20
|
end
|
21
21
|
EOF
|
22
22
|
runner.review('app/controllers/posts_controller.rb', content)
|
23
23
|
runner.should have(2).errors
|
24
|
-
runner.errors[0].to_s.should == "app/controllers/posts_controller.rb:
|
25
|
-
runner.errors[1].to_s.should == "app/controllers/posts_controller.rb:
|
24
|
+
runner.errors[0].to_s.should == "app/controllers/posts_controller.rb:3 - move finder to named_scope"
|
25
|
+
runner.errors[1].to_s.should == "app/controllers/posts_controller.rb:7 - move finder to named_scope"
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should not move simple finder" do
|
@@ -59,13 +59,13 @@ module RailsBestPractices
|
|
59
59
|
content = <<-EOF
|
60
60
|
class Post < ActiveRecord::Base
|
61
61
|
def published
|
62
|
-
Post.find(:all, :
|
63
|
-
:
|
62
|
+
Post.find(:all, conditions: { state: 'public' },
|
63
|
+
limit: 10, order: 'created_at desc')
|
64
64
|
end
|
65
65
|
|
66
66
|
def published
|
67
|
-
Post.find(:all, :
|
68
|
-
:
|
67
|
+
Post.find(:all, conditions: { state: 'draft' },
|
68
|
+
limit: 10, order: 'created_at desc')
|
69
69
|
end
|
70
70
|
end
|
71
71
|
EOF
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe MoveModelLogicIntoModelReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: MoveModelLogicIntoModelReview.new) }
|
7
7
|
|
8
8
|
it "should move model logic into model" do
|
9
9
|
content = <<-EOF
|
@@ -24,7 +24,7 @@ module RailsBestPractices
|
|
24
24
|
EOF
|
25
25
|
runner.review('app/controllers/posts_controller.rb', content)
|
26
26
|
runner.should have(1).errors
|
27
|
-
runner.errors[0].to_s.should == "app/controllers/posts_controller.rb:
|
27
|
+
runner.errors[0].to_s.should == "app/controllers/posts_controller.rb:2 - move model logic into model (@post use_count > 4)"
|
28
28
|
end
|
29
29
|
|
30
30
|
it "should not move model logic into model with simple model calling" do
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe NeedlessDeepNestingReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: NeedlessDeepNestingReview.new) }
|
7
7
|
|
8
8
|
describe "rails2" do
|
9
9
|
it "should needless deep nesting" do
|
@@ -21,7 +21,7 @@ module RailsBestPractices
|
|
21
21
|
|
22
22
|
it "should not needless deep nesting for shallow" do
|
23
23
|
content = <<-EOF
|
24
|
-
map.resources :posts, :
|
24
|
+
map.resources :posts, shallow: true do |post|
|
25
25
|
post.resources :comments do |comment|
|
26
26
|
comment.resources :favorites
|
27
27
|
end
|
@@ -100,7 +100,7 @@ module RailsBestPractices
|
|
100
100
|
|
101
101
|
it "should not needless deep nesting for shallow" do
|
102
102
|
content = <<-EOF
|
103
|
-
resources :posts, :
|
103
|
+
resources :posts, shallow: true do
|
104
104
|
resources :comments do
|
105
105
|
resources :favorites
|
106
106
|
end
|
@@ -3,13 +3,13 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe NotUseDefaultRouteReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: NotUseDefaultRouteReview.new) }
|
7
7
|
|
8
8
|
describe "rails2" do
|
9
9
|
it "should not use default route" do
|
10
10
|
content = <<-EOF
|
11
11
|
ActionController::Routing::Routes.draw do |map|
|
12
|
-
map.resources :posts, :
|
12
|
+
map.resources :posts, member: { push: :post }
|
13
13
|
|
14
14
|
map.connect ':controller/:action/:id'
|
15
15
|
map.connect ':controller/:action/:id.:format'
|
@@ -24,7 +24,7 @@ module RailsBestPractices
|
|
24
24
|
it "should no not use default route" do
|
25
25
|
content = <<-EOF
|
26
26
|
ActionController::Routing::Routes.draw do |map|
|
27
|
-
map.resources :posts, :
|
27
|
+
map.resources :posts, member: { push: :post }
|
28
28
|
end
|
29
29
|
EOF
|
30
30
|
runner.review('config/routes.rb', content)
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe NotUseTimeAgoInWordsReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: NotUseTimeAgoInWordsReview.new) }
|
7
7
|
|
8
8
|
describe "time_ago_in_words" do
|
9
9
|
it "should not use in views" do
|
@@ -3,16 +3,16 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe OveruseRouteCustomizationsReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: OveruseRouteCustomizationsReview.new) }
|
7
7
|
|
8
8
|
describe "rails2" do
|
9
9
|
it "should overuse route customizations" do
|
10
10
|
content = <<-EOF
|
11
11
|
ActionController::Routing::Routes.draw do |map|
|
12
|
-
map.resources :posts, :
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
12
|
+
map.resources :posts, member: { comments: :get,
|
13
|
+
create_comment: :post,
|
14
|
+
update_comment: :update,
|
15
|
+
delete_comment: :delete }
|
16
16
|
end
|
17
17
|
EOF
|
18
18
|
runner.review('config/routes.rb', content)
|
@@ -23,10 +23,10 @@ module RailsBestPractices
|
|
23
23
|
it "should overuse route customizations with member" do
|
24
24
|
content = <<-EOF
|
25
25
|
ActionController::Routing::Routes.draw do |map|
|
26
|
-
map.resources :posts, :
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
26
|
+
map.resources :posts, member: { create_comment: :post,
|
27
|
+
update_comment: :update,
|
28
|
+
delete_comment: :delete,
|
29
|
+
disable_comment: :post }
|
30
30
|
end
|
31
31
|
EOF
|
32
32
|
runner.review('config/routes.rb', content)
|
@@ -37,10 +37,10 @@ module RailsBestPractices
|
|
37
37
|
it "should overuse route customizations with collection" do
|
38
38
|
content = <<-EOF
|
39
39
|
ActionController::Routing::Routes.draw do |map|
|
40
|
-
map.resources :posts, :
|
41
|
-
:
|
42
|
-
:
|
43
|
-
:
|
40
|
+
map.resources :posts, collection: { list_comments: :get,
|
41
|
+
update_comments: :get,
|
42
|
+
delete_comments: :get,
|
43
|
+
disable_comments: :get }
|
44
44
|
end
|
45
45
|
EOF
|
46
46
|
runner.review('config/routes.rb', content)
|
@@ -52,10 +52,10 @@ module RailsBestPractices
|
|
52
52
|
content = <<-EOF
|
53
53
|
ActionController::Routing::Routes.draw do |map|
|
54
54
|
map.resources :categories do |category|
|
55
|
-
category.resources :posts, :
|
56
|
-
:
|
57
|
-
:
|
58
|
-
:
|
55
|
+
category.resources :posts, member: { create_comment: :post,
|
56
|
+
update_comment: :update,
|
57
|
+
delete_comment: :delete },
|
58
|
+
collection: { comments: :get }
|
59
59
|
end
|
60
60
|
end
|
61
61
|
EOF
|
@@ -68,8 +68,8 @@ module RailsBestPractices
|
|
68
68
|
content = <<-EOF
|
69
69
|
ActionController::Routing::Routes.draw do |map|
|
70
70
|
map.resources :categories do |category|
|
71
|
-
category.resources :posts, :
|
72
|
-
:
|
71
|
+
category.resources :posts, member: [:create_comment, :update_comment, :delete_comment],
|
72
|
+
collection: [:comments]
|
73
73
|
end
|
74
74
|
end
|
75
75
|
EOF
|
@@ -91,7 +91,7 @@ module RailsBestPractices
|
|
91
91
|
it "should not overuse route customizations when customize route is only one" do
|
92
92
|
content = <<-EOF
|
93
93
|
ActionController::Routing::Routes.draw do |map|
|
94
|
-
map.resources :posts, :
|
94
|
+
map.resources :posts, member: { vote: :post }
|
95
95
|
end
|
96
96
|
EOF
|
97
97
|
runner.review('config/routes.rb', content)
|
@@ -102,8 +102,8 @@ module RailsBestPractices
|
|
102
102
|
content =<<-EOF
|
103
103
|
IP_PATTERN = /(((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2}))|[\d]+/.freeze
|
104
104
|
map.resources :vlans do |vlan|
|
105
|
-
vlan.resources :ip_ranges, :
|
106
|
-
range.resources :ips, :
|
105
|
+
vlan.resources :ip_ranges, member: {move: [:get, :post]} do |range|
|
106
|
+
range.resources :ips, requirements: { id: IP_PATTERN }
|
107
107
|
end
|
108
108
|
end
|
109
109
|
EOF
|
@@ -138,10 +138,10 @@ module RailsBestPractices
|
|
138
138
|
content = <<-EOF
|
139
139
|
RailsBestpracticesCom::Application.routes.draw do
|
140
140
|
resources :posts do
|
141
|
-
post :create_comment, :
|
142
|
-
update :update_comment, :
|
143
|
-
delete :delete_comment, :
|
144
|
-
get :comments, :
|
141
|
+
post :create_comment, on: :member
|
142
|
+
update :update_comment, on: :member
|
143
|
+
delete :delete_comment, on: :member
|
144
|
+
get :comments, on: :collection
|
145
145
|
end
|
146
146
|
end
|
147
147
|
EOF
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe ProtectMassAssignmentReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: ProtectMassAssignmentReview.new) }
|
7
7
|
|
8
8
|
it "should protect mass assignment" do
|
9
9
|
content =<<-EOF
|
@@ -48,7 +48,7 @@ module RailsBestPractices
|
|
48
48
|
it "should not protect mass assignment if using devise" do
|
49
49
|
content =<<-EOF
|
50
50
|
class User < ActiveRecord::Base
|
51
|
-
devise :database_authenticatable, :registerable, :confirmable, :recoverable, :
|
51
|
+
devise :database_authenticatable, :registerable, :confirmable, :recoverable, stretches: 20
|
52
52
|
end
|
53
53
|
EOF
|
54
54
|
runner.review('app/models/user.rb', content)
|
@@ -93,6 +93,15 @@ module RailsBestPractices
|
|
93
93
|
runner.review('app/models/user.rb', content)
|
94
94
|
runner.should have(0).errors
|
95
95
|
end
|
96
|
+
|
97
|
+
it "should not protect mass assignment if checking non ActiveRecord::Base inherited model" do
|
98
|
+
content =<<-EOF
|
99
|
+
class User < Person
|
100
|
+
end
|
101
|
+
EOF
|
102
|
+
runner.review('app/models/user.rb', content)
|
103
|
+
runner.should have(0).errors
|
104
|
+
end
|
96
105
|
end
|
97
106
|
end
|
98
107
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
module RailsBestPractices
|
4
4
|
module Reviews
|
5
5
|
describe RemoveEmptyHelpersReview do
|
6
|
-
let(:runner) { Core::Runner.new(:
|
6
|
+
let(:runner) { Core::Runner.new(reviews: RemoveEmptyHelpersReview.new) }
|
7
7
|
|
8
8
|
it "should remove empty helpers" do
|
9
9
|
content =<<-EOF
|
@@ -4,8 +4,8 @@ module RailsBestPractices
|
|
4
4
|
module Reviews
|
5
5
|
describe RemoveUnusedMethodsInControllersReview do
|
6
6
|
let(:runner) { Core::Runner.new(
|
7
|
-
:
|
8
|
-
:
|
7
|
+
prepares: [Prepares::ControllerPrepare.new, Prepares::RoutePrepare.new],
|
8
|
+
reviews: RemoveUnusedMethodsInControllersReview.new({'except_methods' => ["ExceptableController#*"]})
|
9
9
|
) }
|
10
10
|
|
11
11
|
context "private/protected" do
|
@@ -127,7 +127,7 @@ module RailsBestPractices
|
|
127
127
|
it "should not remove unused methods if all actions are used in route" do
|
128
128
|
content =<<-EOF
|
129
129
|
ActionController::Routing::Routes.draw do |map|
|
130
|
-
map.connect 'internal/:action/*whatever', :
|
130
|
+
map.connect 'internal/:action/*whatever', controller: "internal"
|
131
131
|
end
|
132
132
|
EOF
|
133
133
|
runner.prepare('config/routes.rb', content)
|
@@ -214,7 +214,7 @@ module RailsBestPractices
|
|
214
214
|
end
|
215
215
|
end
|
216
216
|
|
217
|
-
context "delegate :
|
217
|
+
context "delegate to: :controller" do
|
218
218
|
it "should remove unused methods if delegate method is not called" do
|
219
219
|
content = <<-EOF
|
220
220
|
class PostsController < ApplicationController
|
@@ -226,7 +226,7 @@ module RailsBestPractices
|
|
226
226
|
runner.review('app/controllers/posts_controller.rb', content)
|
227
227
|
content = <<-EOF
|
228
228
|
module PostsHelper
|
229
|
-
delegate :helper_post, :
|
229
|
+
delegate :helper_post, to: :controller
|
230
230
|
end
|
231
231
|
EOF
|
232
232
|
runner.review('app/helpers/posts_helper.rb', content)
|
@@ -246,7 +246,7 @@ module RailsBestPractices
|
|
246
246
|
runner.review('app/controllers/posts_controller.rb', content)
|
247
247
|
content = <<-EOF
|
248
248
|
module PostsHelper
|
249
|
-
delegate :helper_post, :
|
249
|
+
delegate :helper_post, to: :controller
|
250
250
|
end
|
251
251
|
EOF
|
252
252
|
runner.review('app/helpers/posts_helper.rb', content)
|
@@ -295,8 +295,8 @@ module RailsBestPractices
|
|
295
295
|
content =<<-EOF
|
296
296
|
class PostsCell < Cell::Rails
|
297
297
|
def list
|
298
|
-
render :
|
299
|
-
render(:
|
298
|
+
render state: :show
|
299
|
+
render(state: :display)
|
300
300
|
end
|
301
301
|
|
302
302
|
def show; end
|