rails_best_practices 1.20.0 → 1.22.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +49 -43
- data/Guardfile +2 -0
- data/Rakefile +2 -0
- data/assets/result.html.erb +2 -0
- data/lib/rails_best_practices/analyzer.rb +59 -48
- data/lib/rails_best_practices/core/check.rb +39 -32
- data/lib/rails_best_practices/core/checks_loader.rb +8 -6
- data/lib/rails_best_practices/core/configs.rb +1 -2
- data/lib/rails_best_practices/core/controllers.rb +1 -2
- data/lib/rails_best_practices/core/error.rb +1 -1
- data/lib/rails_best_practices/core/helpers.rb +1 -2
- data/lib/rails_best_practices/core/mailers.rb +1 -2
- data/lib/rails_best_practices/core/methods.rb +21 -16
- data/lib/rails_best_practices/core/model_associations.rb +9 -4
- data/lib/rails_best_practices/core/models.rb +1 -2
- data/lib/rails_best_practices/core/modules.rb +1 -1
- data/lib/rails_best_practices/core/routes.rb +2 -2
- data/lib/rails_best_practices/core/runner.rb +49 -34
- data/lib/rails_best_practices/inline_disables/comment_ripper.rb +19 -0
- data/lib/rails_best_practices/inline_disables/inline_disable.rb +50 -0
- data/lib/rails_best_practices/inline_disables.rb +3 -0
- data/lib/rails_best_practices/lexicals/long_line_check.rb +7 -3
- data/lib/rails_best_practices/option_parser.rb +22 -6
- data/lib/rails_best_practices/prepares/controller_prepare.rb +15 -3
- data/lib/rails_best_practices/prepares/gemfile_prepare.rb +1 -1
- data/lib/rails_best_practices/prepares/helper_prepare.rb +6 -1
- data/lib/rails_best_practices/prepares/initializer_prepare.rb +2 -2
- data/lib/rails_best_practices/prepares/mailer_prepare.rb +1 -0
- data/lib/rails_best_practices/prepares/model_prepare.rb +52 -12
- data/lib/rails_best_practices/prepares/route_prepare.rb +16 -10
- data/lib/rails_best_practices/prepares.rb +1 -1
- data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +15 -13
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +34 -29
- data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +14 -5
- data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +19 -8
- data/lib/rails_best_practices/reviews/hash_syntax_review.rb +5 -5
- data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +4 -4
- data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +7 -8
- data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +6 -6
- data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +1 -1
- data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +6 -7
- data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +7 -8
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +12 -10
- data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +1 -2
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +5 -5
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +5 -2
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +6 -3
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +6 -4
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +29 -9
- data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +3 -3
- data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +17 -15
- data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +1 -2
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +3 -3
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_model_association_review.rb +5 -5
- data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +9 -8
- data/lib/rails_best_practices/reviews/use_observer_review.rb +9 -9
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +26 -26
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +8 -7
- data/lib/rails_best_practices/reviews/use_scope_access_review.rb +17 -15
- data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -1
- data/lib/rails_best_practices/version.rb +1 -1
- data/lib/rails_best_practices.rb +2 -2
- data/rails_best_practices.gemspec +39 -38
- data/spec/fixtures/lib/rails_best_practices/plugins/reviews/not_use_rails_root_review.rb +1 -2
- data/spec/rails_best_practices/analyzer_spec.rb +73 -42
- data/spec/rails_best_practices/core/check_spec.rb +5 -5
- data/spec/rails_best_practices/core/checks_loader_spec.rb +3 -3
- data/spec/rails_best_practices/core/configs_spec.rb +1 -1
- data/spec/rails_best_practices/core/controllers_spec.rb +1 -1
- data/spec/rails_best_practices/core/error_spec.rb +21 -21
- data/spec/rails_best_practices/core/except_methods_spec.rb +7 -7
- data/spec/rails_best_practices/core/gems_spec.rb +4 -4
- data/spec/rails_best_practices/core/helpers_spec.rb +1 -1
- data/spec/rails_best_practices/core/klasses_spec.rb +3 -3
- data/spec/rails_best_practices/core/mailers_spec.rb +1 -1
- data/spec/rails_best_practices/core/methods_spec.rb +6 -6
- data/spec/rails_best_practices/core/model_associations_spec.rb +10 -6
- data/spec/rails_best_practices/core/model_attributes_spec.rb +4 -4
- data/spec/rails_best_practices/core/models_spec.rb +1 -1
- data/spec/rails_best_practices/core/modules_spec.rb +5 -5
- data/spec/rails_best_practices/core/routes_spec.rb +5 -5
- data/spec/rails_best_practices/core/runner_spec.rb +9 -7
- data/spec/rails_best_practices/core_ext/erubis_spec.rb +10 -10
- data/spec/rails_best_practices/inline_disables/inline_disable_spec.rb +62 -0
- data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +11 -10
- data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +6 -6
- data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +6 -6
- data/spec/rails_best_practices/prepares/config_prepare_spec.rb +2 -2
- data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +18 -10
- data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +2 -2
- data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +3 -3
- data/spec/rails_best_practices/prepares/initializer_prepare_spec.rb +3 -3
- data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +2 -2
- data/spec/rails_best_practices/prepares/model_prepare_spec.rb +79 -43
- data/spec/rails_best_practices/prepares/route_prepare_spec.rb +138 -77
- data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +2 -2
- data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +18 -12
- data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +28 -22
- data/spec/rails_best_practices/reviews/check_destroy_return_value_review_spec.rb +15 -13
- data/spec/rails_best_practices/reviews/check_save_return_value_review_spec.rb +31 -21
- data/spec/rails_best_practices/reviews/default_scope_is_evil_review_spec.rb +6 -6
- data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +5 -5
- data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +9 -9
- data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +7 -7
- 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 +21 -14
- data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +6 -6
- data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +11 -6
- data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +26 -16
- data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +7 -7
- data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +9 -9
- data/spec/rails_best_practices/reviews/not_rescue_exception_review_spec.rb +9 -9
- data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +5 -5
- data/spec/rails_best_practices/reviews/not_use_time_ago_in_words_review_spec.rb +7 -7
- data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +7 -7
- data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +24 -19
- data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +6 -6
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +44 -31
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +17 -12
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +46 -44
- data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +10 -8
- data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +16 -10
- data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +54 -31
- data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +9 -9
- data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +13 -13
- data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +11 -9
- data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +7 -7
- data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +21 -17
- data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +6 -6
- data/spec/rails_best_practices/reviews/use_parentheses_in_method_def_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +31 -24
- data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +15 -11
- data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +14 -14
- data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +10 -8
- metadata +12 -7
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe KeepFindersOnTheirOwnModelReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'keeps finders on thier own model' do
|
11
11
|
content = <<-EOF
|
12
12
|
class Post < ActiveRecord::Base
|
13
13
|
has_many :comments
|
@@ -23,7 +23,7 @@ module RailsBestPractices
|
|
23
23
|
expect(runner.errors[0].to_s).to eq('app/models/post.rb:5 - keep finders on their own model')
|
24
24
|
end
|
25
25
|
|
26
|
-
it '
|
26
|
+
it 'keeps finders on thier own model with all method' do
|
27
27
|
content = <<-EOF
|
28
28
|
class Post < ActiveRecord::Base
|
29
29
|
has_many :comments
|
@@ -39,7 +39,7 @@ module RailsBestPractices
|
|
39
39
|
expect(runner.errors[0].to_s).to eq('app/models/post.rb:5 - keep finders on their own model')
|
40
40
|
end
|
41
41
|
|
42
|
-
it '
|
42
|
+
it 'does not keep finders on thier own model with self finder' do
|
43
43
|
content = <<-EOF
|
44
44
|
class Post < ActiveRecord::Base
|
45
45
|
has_many :comments
|
@@ -54,7 +54,7 @@ module RailsBestPractices
|
|
54
54
|
expect(runner.errors.size).to eq(0)
|
55
55
|
end
|
56
56
|
|
57
|
-
it '
|
57
|
+
it 'does not keep finders on thier own model with own finder' do
|
58
58
|
content = <<-EOF
|
59
59
|
class Post < ActiveRecord::Base
|
60
60
|
has_many :comments
|
@@ -69,7 +69,7 @@ module RailsBestPractices
|
|
69
69
|
expect(runner.errors.size).to eq(0)
|
70
70
|
end
|
71
71
|
|
72
|
-
it '
|
72
|
+
it 'does not keep finders on their own model without finder' do
|
73
73
|
content = <<-EOF
|
74
74
|
class Post < ActiveRecord::Base
|
75
75
|
has_many :comments
|
@@ -83,7 +83,7 @@ module RailsBestPractices
|
|
83
83
|
expect(runner.errors.size).to eq(0)
|
84
84
|
end
|
85
85
|
|
86
|
-
it '
|
86
|
+
it 'does not keep finders on their own model with ruby Array#find' do
|
87
87
|
content = <<-EOF
|
88
88
|
class Post < ActiveRecord::Base
|
89
89
|
has_many :comments
|
@@ -97,8 +97,8 @@ module RailsBestPractices
|
|
97
97
|
expect(runner.errors.size).to eq(0)
|
98
98
|
end
|
99
99
|
|
100
|
-
it '
|
101
|
-
runner = Core::Runner.new(reviews:
|
100
|
+
it 'does not check ignored files' do
|
101
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: %r{app/models/post\.rb}))
|
102
102
|
content = <<-EOF
|
103
103
|
class Post < ActiveRecord::Base
|
104
104
|
has_many :comments
|
@@ -5,10 +5,14 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe LawOfDemeterReview do
|
8
|
-
let(:runner)
|
8
|
+
let(:runner) do
|
9
|
+
Core::Runner.new(
|
10
|
+
prepares: [Prepares::ModelPrepare.new, Prepares::SchemaPrepare.new], reviews: described_class.new
|
11
|
+
)
|
12
|
+
end
|
9
13
|
|
10
14
|
describe 'belongs_to' do
|
11
|
-
before
|
15
|
+
before do
|
12
16
|
content = <<-EOF
|
13
17
|
class Invoice < ActiveRecord::Base
|
14
18
|
belongs_to :user
|
@@ -28,7 +32,7 @@ module RailsBestPractices
|
|
28
32
|
runner.prepare('db/schema.rb', content)
|
29
33
|
end
|
30
34
|
|
31
|
-
it '
|
35
|
+
it 'laws of demeter with erb' do
|
32
36
|
content = <<-EOF
|
33
37
|
<%= @invoice.user.name %>
|
34
38
|
<%= @invoice.user.address %>
|
@@ -39,7 +43,7 @@ module RailsBestPractices
|
|
39
43
|
expect(runner.errors[0].to_s).to eq('app/views/invoices/show.html.erb:1 - law of demeter')
|
40
44
|
end
|
41
45
|
|
42
|
-
it '
|
46
|
+
it 'laws of demeter with haml' do
|
43
47
|
content = <<~EOF
|
44
48
|
= @invoice.user.name
|
45
49
|
= @invoice.user.address
|
@@ -50,7 +54,7 @@ module RailsBestPractices
|
|
50
54
|
expect(runner.errors[0].to_s).to eq('app/views/invoices/show.html.haml:1 - law of demeter')
|
51
55
|
end
|
52
56
|
|
53
|
-
it '
|
57
|
+
it 'laws of demeter with slim' do
|
54
58
|
content = <<~EOF
|
55
59
|
= @invoice.user.name
|
56
60
|
= @invoice.user.address
|
@@ -61,7 +65,7 @@ module RailsBestPractices
|
|
61
65
|
expect(runner.errors[0].to_s).to eq('app/views/invoices/show.html.slim:1 - law of demeter')
|
62
66
|
end
|
63
67
|
|
64
|
-
it '
|
68
|
+
it 'noes law of demeter' do
|
65
69
|
content = <<-EOF
|
66
70
|
<%= @invoice.user_name %>
|
67
71
|
<%= @invoice.user_address %>
|
@@ -73,7 +77,7 @@ module RailsBestPractices
|
|
73
77
|
end
|
74
78
|
|
75
79
|
describe 'has_one' do
|
76
|
-
before
|
80
|
+
before do
|
77
81
|
content = <<-EOF
|
78
82
|
class Invoice < ActiveRecord::Base
|
79
83
|
has_one :price
|
@@ -92,7 +96,7 @@ module RailsBestPractices
|
|
92
96
|
runner.prepare('db/schema.rb', content)
|
93
97
|
end
|
94
98
|
|
95
|
-
it '
|
99
|
+
it 'laws of demeter' do
|
96
100
|
content = <<-EOF
|
97
101
|
<%= @invoice.price.currency %>
|
98
102
|
<%= @invoice.price.number %>
|
@@ -104,7 +108,7 @@ module RailsBestPractices
|
|
104
108
|
end
|
105
109
|
|
106
110
|
context 'polymorphic association' do
|
107
|
-
before
|
111
|
+
before do
|
108
112
|
content = <<-EOF
|
109
113
|
class Comment < ActiveRecord::Base
|
110
114
|
belongs_to :commentable, polymorphic: true
|
@@ -129,7 +133,7 @@ module RailsBestPractices
|
|
129
133
|
runner.prepare('db/schema.rb', content)
|
130
134
|
end
|
131
135
|
|
132
|
-
it '
|
136
|
+
it 'laws of demeter' do
|
133
137
|
content = <<-EOF
|
134
138
|
<%= @comment.commentable.title %>
|
135
139
|
EOF
|
@@ -139,7 +143,7 @@ module RailsBestPractices
|
|
139
143
|
end
|
140
144
|
end
|
141
145
|
|
142
|
-
it '
|
146
|
+
it 'noes law of demeter with method call' do
|
143
147
|
content = <<-EOF
|
144
148
|
class Question < ActiveRecord::Base
|
145
149
|
has_many :answers, dependent: :destroy
|
@@ -163,9 +167,12 @@ module RailsBestPractices
|
|
163
167
|
expect(runner.errors.size).to eq(0)
|
164
168
|
end
|
165
169
|
|
166
|
-
it '
|
167
|
-
runner =
|
168
|
-
|
170
|
+
it 'does not check ignored files' do
|
171
|
+
runner =
|
172
|
+
Core::Runner.new(
|
173
|
+
prepares: [Prepares::ModelPrepare.new, Prepares::SchemaPrepare.new],
|
174
|
+
reviews: described_class.new(ignored_files: %r{app/views/invoices})
|
175
|
+
)
|
169
176
|
content = <<-EOF
|
170
177
|
<%= @invoice.user.name %>
|
171
178
|
<%= @invoice.user.address %>
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe MoveCodeIntoControllerReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'moves code into controller for method call' do
|
11
11
|
content = <<-EOF
|
12
12
|
<% Post.find(:all).each do |post| %>
|
13
13
|
<%=h post.title %>
|
@@ -19,7 +19,7 @@ module RailsBestPractices
|
|
19
19
|
expect(runner.errors[0].to_s).to eq('app/views/posts/index.html.erb:1 - move code into controller')
|
20
20
|
end
|
21
21
|
|
22
|
-
it '
|
22
|
+
it 'moves code into controller for assign' do
|
23
23
|
content = <<-EOF
|
24
24
|
<% @posts = Post.all %>
|
25
25
|
<% @posts.each do |post| %>
|
@@ -32,7 +32,7 @@ module RailsBestPractices
|
|
32
32
|
expect(runner.errors[0].to_s).to eq('app/views/posts/index.html.erb:1 - move code into controller')
|
33
33
|
end
|
34
34
|
|
35
|
-
it '
|
35
|
+
it 'does not move code into controller' do
|
36
36
|
content = <<-EOF
|
37
37
|
<% @posts.each do |post| %>
|
38
38
|
<%=h post.title %>
|
@@ -43,8 +43,8 @@ module RailsBestPractices
|
|
43
43
|
expect(runner.errors.size).to eq(0)
|
44
44
|
end
|
45
45
|
|
46
|
-
it '
|
47
|
-
runner = Core::Runner.new(reviews:
|
46
|
+
it 'does not check ignored files' do
|
47
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: %r{app/views/post}))
|
48
48
|
content = <<-EOF
|
49
49
|
<% Post.find(:all).each do |post| %>
|
50
50
|
<%=h post.title %>
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe MoveCodeIntoHelperReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new('array_count' => 2)) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'moves code into helper' do
|
11
11
|
content = <<-EOF
|
12
12
|
<%= select_tag :state, options_for_select( [[t(:draft), "draft"],
|
13
13
|
[t(:published), "published"]],
|
@@ -15,10 +15,12 @@ module RailsBestPractices
|
|
15
15
|
EOF
|
16
16
|
runner.review('app/views/posts/show.html.erb', content)
|
17
17
|
expect(runner.errors.size).to eq(1)
|
18
|
-
expect(runner.errors[0].to_s).to eq(
|
18
|
+
expect(runner.errors[0].to_s).to eq(
|
19
|
+
'app/views/posts/show.html.erb:1 - move code into helper (array_count >= 2)'
|
20
|
+
)
|
19
21
|
end
|
20
22
|
|
21
|
-
it '
|
23
|
+
it 'does not move code into helper with simple arguments' do
|
22
24
|
content = <<-EOF
|
23
25
|
<%= select_tag :state, options_for_select( Post.STATES ) %>
|
24
26
|
EOF
|
@@ -26,8 +28,11 @@ module RailsBestPractices
|
|
26
28
|
expect(runner.errors.size).to eq(0)
|
27
29
|
end
|
28
30
|
|
29
|
-
it '
|
30
|
-
runner =
|
31
|
+
it 'does not check ignored files' do
|
32
|
+
runner =
|
33
|
+
Core::Runner.new(
|
34
|
+
reviews: MoveCodeIntoControllerReview.new('array_count' => 2, 'ignored_files' => %r{app/views/post})
|
35
|
+
)
|
31
36
|
content = <<-EOF
|
32
37
|
<%= select_tag :state, options_for_select( [[t(:draft), "draft"],
|
33
38
|
[t(:published), "published"]],
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe MoveCodeIntoModelReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'moves code into model' do
|
11
11
|
content = <<-EOF
|
12
12
|
<% if current_user && @post.user && (current_user == @post.user || @post.editors.include?(current_user)) %>
|
13
13
|
<%= link_to 'Edit this post', edit_post_url(@post) %>
|
@@ -15,48 +15,58 @@ module RailsBestPractices
|
|
15
15
|
EOF
|
16
16
|
runner.review('app/views/posts/show.html.erb', content)
|
17
17
|
expect(runner.errors.size).to eq(1)
|
18
|
-
expect(runner.errors[0].to_s).to eq(
|
18
|
+
expect(runner.errors[0].to_s).to eq(
|
19
|
+
'app/views/posts/show.html.erb:1 - move code into model (@post use_count > 2)'
|
20
|
+
)
|
19
21
|
end
|
20
22
|
|
21
|
-
it '
|
23
|
+
it 'moves code into model with haml' do
|
22
24
|
content = <<~EOF
|
23
25
|
- if current_user && @post.user && (current_user == @post.user || @post.editors.include?(current_user))
|
24
26
|
= link_to 'Edit this post', edit_post_url(@post)
|
25
27
|
EOF
|
26
28
|
runner.review('app/views/posts/show.html.haml', content)
|
27
29
|
expect(runner.errors.size).to eq(1)
|
28
|
-
expect(runner.errors[0].to_s).to eq(
|
30
|
+
expect(runner.errors[0].to_s).to eq(
|
31
|
+
'app/views/posts/show.html.haml:1 - move code into model (@post use_count > 2)'
|
32
|
+
)
|
29
33
|
end
|
30
34
|
|
31
|
-
it '
|
35
|
+
it 'moves code into model with slim' do
|
32
36
|
content = <<~EOF
|
33
37
|
- if current_user && @post.user && (current_user == @post.user || @post.editors.include?(current_user))
|
34
38
|
= link_to 'Edit this post', edit_post_url(@post)
|
35
39
|
EOF
|
36
40
|
runner.review('app/views/posts/show.html.slim', content)
|
37
41
|
expect(runner.errors.size).to eq(1)
|
38
|
-
expect(runner.errors[0].to_s).to eq(
|
42
|
+
expect(runner.errors[0].to_s).to eq(
|
43
|
+
'app/views/posts/show.html.slim:1 - move code into model (@post use_count > 2)'
|
44
|
+
)
|
39
45
|
end
|
40
46
|
|
41
|
-
it '
|
47
|
+
it 'moves code into model with if in one line' do
|
42
48
|
content = <<-EOF
|
43
49
|
<%= link_to 'Edit this post', edit_post_url(@post) if current_user && @post.user && (current_user == @post.user || @post.editors.include?(current_user)) %>
|
44
50
|
EOF
|
45
51
|
runner.review('app/views/posts/show.html.erb', content)
|
46
52
|
expect(runner.errors.size).to eq(1)
|
47
|
-
expect(runner.errors[0].to_s).to eq(
|
53
|
+
expect(runner.errors[0].to_s).to eq(
|
54
|
+
'app/views/posts/show.html.erb:1 - move code into model (@post use_count > 2)'
|
55
|
+
)
|
48
56
|
end
|
49
57
|
|
50
|
-
it "
|
58
|
+
it "moves code into model with '? :'" do
|
51
59
|
content = <<-EOF
|
52
60
|
<%= current_user && @post.user && (current_user == @post.user || @post.editors.include?(current_user)) ? link_to('Edit this post', edit_post_url(@post)) : '' %>
|
53
61
|
EOF
|
54
62
|
runner.review('app/views/posts/show.html.erb', content)
|
55
63
|
expect(runner.errors.size).to eq(1)
|
56
|
-
expect(runner.errors[0].to_s).to eq(
|
64
|
+
expect(runner.errors[0].to_s).to eq(
|
65
|
+
'app/views/posts/show.html.erb:1 - move code into model (@post use_count > 2)'
|
66
|
+
)
|
57
67
|
end
|
58
68
|
|
59
|
-
it '
|
69
|
+
it 'moves code into model only review for current if conditional statement' do
|
60
70
|
content = <<-EOF
|
61
71
|
<% if @post.title %>
|
62
72
|
<% if @post.user %>
|
@@ -69,7 +79,7 @@ module RailsBestPractices
|
|
69
79
|
expect(runner.errors.size).to eq(0)
|
70
80
|
end
|
71
81
|
|
72
|
-
it '
|
82
|
+
it 'does not move code into model' do
|
73
83
|
content = <<-EOF
|
74
84
|
<% if @post.editable_by?(current_user) %>
|
75
85
|
<%= link_to 'Edit this post', edit_post_url(@post) %>
|
@@ -79,7 +89,7 @@ module RailsBestPractices
|
|
79
89
|
expect(runner.errors.size).to eq(0)
|
80
90
|
end
|
81
91
|
|
82
|
-
it '
|
92
|
+
it 'does not move code into model for multiple calls on same variable node' do
|
83
93
|
content = <<-EOF
|
84
94
|
<% if !job.company.blank? && job.company.title? %>
|
85
95
|
<% end %>
|
@@ -88,8 +98,8 @@ module RailsBestPractices
|
|
88
98
|
expect(runner.errors.size).to eq(0)
|
89
99
|
end
|
90
100
|
|
91
|
-
it '
|
92
|
-
runner = Core::Runner.new(reviews:
|
101
|
+
it 'does not check ignored files' do
|
102
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: %r{app/views/post}))
|
93
103
|
content = <<-EOF
|
94
104
|
<% if current_user && @post.user && (current_user == @post.user || @post.editors.include?(current_user)) %>
|
95
105
|
<%= link_to 'Edit this post', edit_post_url(@post) %>
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe MoveFinderToNamedScopeReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'moves finder to named_scope' do
|
11
11
|
content = <<-EOF
|
12
12
|
class PostsController < ActionController::Base
|
13
13
|
def index
|
@@ -27,7 +27,7 @@ module RailsBestPractices
|
|
27
27
|
expect(runner.errors[1].to_s).to eq('app/controllers/posts_controller.rb:7 - move finder to named_scope')
|
28
28
|
end
|
29
29
|
|
30
|
-
it '
|
30
|
+
it 'does not move simple finder' do
|
31
31
|
content = <<-EOF
|
32
32
|
class PostsController < ActionController::Base
|
33
33
|
def index
|
@@ -44,7 +44,7 @@ module RailsBestPractices
|
|
44
44
|
expect(runner.errors.size).to eq(0)
|
45
45
|
end
|
46
46
|
|
47
|
-
it '
|
47
|
+
it 'does not move namd_scope' do
|
48
48
|
content = <<-EOF
|
49
49
|
class PostsController < ActionController::Base
|
50
50
|
def index
|
@@ -57,7 +57,7 @@ module RailsBestPractices
|
|
57
57
|
expect(runner.errors.size).to eq(0)
|
58
58
|
end
|
59
59
|
|
60
|
-
it '
|
60
|
+
it 'does not review model file' do
|
61
61
|
content = <<-EOF
|
62
62
|
class Post < ActiveRecord::Base
|
63
63
|
def published
|
@@ -75,8 +75,8 @@ module RailsBestPractices
|
|
75
75
|
expect(runner.errors.size).to eq(0)
|
76
76
|
end
|
77
77
|
|
78
|
-
it '
|
79
|
-
runner = Core::Runner.new(reviews:
|
78
|
+
it 'does not check ignored files' do
|
79
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: %r{app/controllers/posts}))
|
80
80
|
content = <<-EOF
|
81
81
|
class PostsController < ActionController::Base
|
82
82
|
def index
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe MoveModelLogicIntoModelReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'moves model logic into model' do
|
11
11
|
content = <<-EOF
|
12
12
|
class PostsController < ApplicationController
|
13
13
|
def publish
|
@@ -26,10 +26,12 @@ module RailsBestPractices
|
|
26
26
|
EOF
|
27
27
|
runner.review('app/controllers/posts_controller.rb', content)
|
28
28
|
expect(runner.errors.size).to eq(1)
|
29
|
-
expect(runner.errors[0].to_s).to eq(
|
29
|
+
expect(runner.errors[0].to_s).to eq(
|
30
|
+
'app/controllers/posts_controller.rb:2 - move model logic into model (@post use_count > 4)'
|
31
|
+
)
|
30
32
|
end
|
31
33
|
|
32
|
-
it '
|
34
|
+
it 'does not move model logic into model with simple model calling' do
|
33
35
|
content = <<-EOF
|
34
36
|
class PostsController < ApplicationController
|
35
37
|
def publish
|
@@ -45,7 +47,7 @@ module RailsBestPractices
|
|
45
47
|
expect(runner.errors.size).to eq(0)
|
46
48
|
end
|
47
49
|
|
48
|
-
it '
|
50
|
+
it 'does not move model logic into model with self calling' do
|
49
51
|
content = <<-EOF
|
50
52
|
class PostsController < ApplicationController
|
51
53
|
def publish
|
@@ -61,8 +63,8 @@ module RailsBestPractices
|
|
61
63
|
expect(runner.errors.size).to eq(0)
|
62
64
|
end
|
63
65
|
|
64
|
-
it '
|
65
|
-
runner = Core::Runner.new(reviews:
|
66
|
+
it 'does not check ignored files' do
|
67
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: %r{app/controllers/posts}))
|
66
68
|
content = <<-EOF
|
67
69
|
class PostsController < ApplicationController
|
68
70
|
def publish
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe NeedlessDeepNestingReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'needlesses deep nesting' do
|
11
11
|
content = <<-EOF
|
12
12
|
resources :posts do
|
13
13
|
resources :comments do
|
@@ -20,7 +20,7 @@ module RailsBestPractices
|
|
20
20
|
expect(runner.errors[0].to_s).to eq('config/routes.rb:3 - needless deep nesting (nested_count > 2)')
|
21
21
|
end
|
22
22
|
|
23
|
-
it '
|
23
|
+
it 'does not needless deep nesting for shallow' do
|
24
24
|
content = <<-EOF
|
25
25
|
resources :posts, shallow: true do
|
26
26
|
resources :comments do
|
@@ -32,7 +32,7 @@ module RailsBestPractices
|
|
32
32
|
expect(runner.errors.size).to eq(0)
|
33
33
|
end
|
34
34
|
|
35
|
-
it '
|
35
|
+
it 'does not needless deep nesting for shallow 4 levels' do
|
36
36
|
content = <<-EOF
|
37
37
|
resources :applications, shallow: true, only: [:index, :show, :create] do
|
38
38
|
resources :events, only: [:index, :show, :create, :subscribe, :push] do
|
@@ -46,7 +46,7 @@ module RailsBestPractices
|
|
46
46
|
expect(runner.errors.size).to eq(0)
|
47
47
|
end
|
48
48
|
|
49
|
-
it '
|
49
|
+
it 'needlesses deep nesting with resource' do
|
50
50
|
content = <<-EOF
|
51
51
|
resources :posts do
|
52
52
|
resources :comments do
|
@@ -59,7 +59,7 @@ module RailsBestPractices
|
|
59
59
|
expect(runner.errors[0].to_s).to eq('config/routes.rb:3 - needless deep nesting (nested_count > 2)')
|
60
60
|
end
|
61
61
|
|
62
|
-
it '
|
62
|
+
it 'needlesses deep nesting with block node' do
|
63
63
|
content = <<-EOF
|
64
64
|
resources :posts do
|
65
65
|
resources :comments do
|
@@ -73,7 +73,7 @@ module RailsBestPractices
|
|
73
73
|
expect(runner.errors[0].to_s).to eq('config/routes.rb:3 - needless deep nesting (nested_count > 2)')
|
74
74
|
end
|
75
75
|
|
76
|
-
it '
|
76
|
+
it 'noes needless deep nesting' do
|
77
77
|
content = <<-EOF
|
78
78
|
resources :posts do
|
79
79
|
resources :comments
|
@@ -88,8 +88,8 @@ module RailsBestPractices
|
|
88
88
|
expect(runner.errors.size).to eq(0)
|
89
89
|
end
|
90
90
|
|
91
|
-
it '
|
92
|
-
runner = Core::Runner.new(reviews:
|
91
|
+
it 'does not check ignored files' do
|
92
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: %r{config/routes}))
|
93
93
|
content = <<-EOF
|
94
94
|
map.resources :posts do |post|
|
95
95
|
post.resources :comments do |comment|
|
@@ -5,10 +5,10 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe NotRescueExceptionReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
10
|
describe 'not_rescue_exception' do
|
11
|
-
it '
|
11
|
+
it 'does not rescue exception in method rescue with named var' do
|
12
12
|
content = <<-EOF
|
13
13
|
def my_method
|
14
14
|
do_something
|
@@ -21,7 +21,7 @@ module RailsBestPractices
|
|
21
21
|
expect(runner.errors[0].to_s).to eq("app/helpers/posts_helper.rb:3 - Don't rescue Exception")
|
22
22
|
end
|
23
23
|
|
24
|
-
it '
|
24
|
+
it 'does not rescue exception in method rescue without named var' do
|
25
25
|
content = <<-EOF
|
26
26
|
def my_method
|
27
27
|
do_something
|
@@ -34,7 +34,7 @@ module RailsBestPractices
|
|
34
34
|
expect(runner.errors[0].to_s).to eq("app/helpers/posts_helper.rb:3 - Don't rescue Exception")
|
35
35
|
end
|
36
36
|
|
37
|
-
it '
|
37
|
+
it 'does not rescue exception in block rescue with named var' do
|
38
38
|
content = <<-EOF
|
39
39
|
def my_method
|
40
40
|
begin
|
@@ -49,7 +49,7 @@ module RailsBestPractices
|
|
49
49
|
expect(runner.errors[0].to_s).to eq("app/helpers/posts_helper.rb:4 - Don't rescue Exception")
|
50
50
|
end
|
51
51
|
|
52
|
-
it '
|
52
|
+
it 'does not rescue exception in block rescue without named var' do
|
53
53
|
content = <<-EOF
|
54
54
|
def my_method
|
55
55
|
begin
|
@@ -64,7 +64,7 @@ module RailsBestPractices
|
|
64
64
|
expect(runner.errors[0].to_s).to eq("app/helpers/posts_helper.rb:4 - Don't rescue Exception")
|
65
65
|
end
|
66
66
|
|
67
|
-
it '
|
67
|
+
it 'allows rescue implicit StandardError in block rescue without named var' do
|
68
68
|
content = <<-EOF
|
69
69
|
def my_method
|
70
70
|
begin
|
@@ -78,7 +78,7 @@ module RailsBestPractices
|
|
78
78
|
expect(runner.errors.size).to eq(0)
|
79
79
|
end
|
80
80
|
|
81
|
-
it '
|
81
|
+
it 'allows rescue explicit StandardError in block rescue without named var' do
|
82
82
|
content = <<-EOF
|
83
83
|
def my_method
|
84
84
|
begin
|
@@ -92,8 +92,8 @@ module RailsBestPractices
|
|
92
92
|
expect(runner.errors.size).to eq(0)
|
93
93
|
end
|
94
94
|
|
95
|
-
it '
|
96
|
-
runner = Core::Runner.new(reviews:
|
95
|
+
it 'does not check ignored files' do
|
96
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: /posts_helper/))
|
97
97
|
content = <<-EOF
|
98
98
|
def my_method
|
99
99
|
do_something
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe NotUseDefaultRouteReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'does not use default route' do
|
11
11
|
content = <<-EOF
|
12
12
|
RailsBestpracticesCom::Application.routes.draw do |map|
|
13
13
|
resources :posts
|
@@ -20,7 +20,7 @@ module RailsBestPractices
|
|
20
20
|
expect(runner.errors[0].to_s).to eq('config/routes.rb:4 - not use default route')
|
21
21
|
end
|
22
22
|
|
23
|
-
it '
|
23
|
+
it 'noes not use default route' do
|
24
24
|
content = <<-EOF
|
25
25
|
RailsBestpracticesCom::Application.routes.draw do |map|
|
26
26
|
resources :posts
|
@@ -30,8 +30,8 @@ module RailsBestPractices
|
|
30
30
|
expect(runner.errors.size).to eq(0)
|
31
31
|
end
|
32
32
|
|
33
|
-
it '
|
34
|
-
runner = Core::Runner.new(reviews:
|
33
|
+
it 'does not check ignored files' do
|
34
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: %r{config/routes\.rb}))
|
35
35
|
content = <<-EOF
|
36
36
|
RailsBestpracticesCom::Application.routes.draw do |map|
|
37
37
|
resources :posts
|