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 UseObserverReview do
|
8
|
-
let(:runner) { Core::Runner.new(prepares: Prepares::MailerPrepare.new, reviews:
|
8
|
+
let(:runner) { Core::Runner.new(prepares: Prepares::MailerPrepare.new, reviews: described_class.new) }
|
9
9
|
|
10
|
-
before
|
10
|
+
before do
|
11
11
|
content = <<-EOF
|
12
12
|
class ProjectMailer < ActionMailer::Base
|
13
13
|
end
|
@@ -15,7 +15,7 @@ module RailsBestPractices
|
|
15
15
|
runner.prepare('app/models/project_mailer.rb', content)
|
16
16
|
end
|
17
17
|
|
18
|
-
it '
|
18
|
+
it 'uses observer' do
|
19
19
|
content = <<-EOF
|
20
20
|
class Project < ActiveRecord::Base
|
21
21
|
after_create :send_create_notification
|
@@ -33,7 +33,7 @@ module RailsBestPractices
|
|
33
33
|
expect(runner.errors[0].to_s).to eq('app/models/project.rb:5 - use observer')
|
34
34
|
end
|
35
35
|
|
36
|
-
it '
|
36
|
+
it 'does not use observer without callback' do
|
37
37
|
content = <<-EOF
|
38
38
|
class Project < ActiveRecord::Base
|
39
39
|
private
|
@@ -48,7 +48,7 @@ module RailsBestPractices
|
|
48
48
|
expect(runner.errors.size).to eq(0)
|
49
49
|
end
|
50
50
|
|
51
|
-
it '
|
51
|
+
it 'uses observer with two after_create' do
|
52
52
|
content = <<-EOF
|
53
53
|
class Project < ActiveRecord::Base
|
54
54
|
after_create :send_create_notification, :update_author
|
@@ -69,7 +69,7 @@ module RailsBestPractices
|
|
69
69
|
expect(runner.errors[0].to_s).to eq('app/models/project.rb:5 - use observer')
|
70
70
|
end
|
71
71
|
|
72
|
-
it '
|
72
|
+
it 'does not raise when initiate an object in callback' do
|
73
73
|
content = <<-EOF
|
74
74
|
class Project < ActiveRecord::Base
|
75
75
|
after_create ProjectMailer.new
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe UseParenthesesInMethodDefReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'finds missing parentheses' do
|
11
11
|
content = <<-EOF
|
12
12
|
class PostsController < ApplicationController
|
13
13
|
def edit foo, bar
|
@@ -16,9 +16,11 @@ module RailsBestPractices
|
|
16
16
|
EOF
|
17
17
|
runner.review('app/controllers/posts_controller.rb', content)
|
18
18
|
expect(runner.errors.size).to eq(1)
|
19
|
-
expect(runner.errors[0].to_s).to eq(
|
19
|
+
expect(runner.errors[0].to_s).to eq(
|
20
|
+
'app/controllers/posts_controller.rb:2 - use parentheses around parameters in method definitions'
|
21
|
+
)
|
20
22
|
end
|
21
|
-
it '
|
23
|
+
it 'finds parentheses with no error' do
|
22
24
|
content = <<-EOF
|
23
25
|
class PostsController < ApplicationController
|
24
26
|
def edit(foo, bar)
|
@@ -28,7 +30,7 @@ module RailsBestPractices
|
|
28
30
|
runner.review('app/controllers/posts_controller.rb', content)
|
29
31
|
expect(runner.errors.size).to eq(0)
|
30
32
|
end
|
31
|
-
it '
|
33
|
+
it 'does not throw an error without parameters' do
|
32
34
|
content = <<-EOF
|
33
35
|
class PostsController < ApplicationController
|
34
36
|
def edit
|
@@ -39,8 +41,8 @@ module RailsBestPractices
|
|
39
41
|
expect(runner.errors.size).to eq(0)
|
40
42
|
end
|
41
43
|
|
42
|
-
it '
|
43
|
-
runner = Core::Runner.new(reviews:
|
44
|
+
it 'does not check ignored files' do
|
45
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: /posts_controller/))
|
44
46
|
content = <<-EOF
|
45
47
|
class PostsController < ApplicationController
|
46
48
|
def edit foo, bar
|
@@ -5,9 +5,13 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe UseQueryAttributeReview 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
|
-
before
|
14
|
+
before do
|
11
15
|
content = <<-EOF
|
12
16
|
class User < ActiveRecord::Base
|
13
17
|
has_many :projects
|
@@ -30,7 +34,7 @@ module RailsBestPractices
|
|
30
34
|
runner.prepare('db/schema.rb', content)
|
31
35
|
end
|
32
36
|
|
33
|
-
it '
|
37
|
+
it 'uses query attribute by blank call' do
|
34
38
|
content = <<-EOF
|
35
39
|
<% if @user.login.blank? %>
|
36
40
|
<%= link_to 'login', new_session_path %>
|
@@ -41,7 +45,7 @@ module RailsBestPractices
|
|
41
45
|
expect(runner.errors[0].to_s).to eq('app/views/users/show.html.erb:1 - use query attribute (@user.login?)')
|
42
46
|
end
|
43
47
|
|
44
|
-
it '
|
48
|
+
it 'uses query attribute by blank call with if in one line' do
|
45
49
|
content = <<-EOF
|
46
50
|
<%= link_to 'login', new_session_path if @user.login.blank? %>
|
47
51
|
EOF
|
@@ -50,7 +54,7 @@ module RailsBestPractices
|
|
50
54
|
expect(runner.errors[0].to_s).to eq('app/views/users/show.html.erb:1 - use query attribute (@user.login?)')
|
51
55
|
end
|
52
56
|
|
53
|
-
it "
|
57
|
+
it "uses query attribute by blank call with '? :'" do
|
54
58
|
content = <<-EOF
|
55
59
|
<%= @user.login.blank? ? link_to('login', new_session_path) : '' %>
|
56
60
|
EOF
|
@@ -59,7 +63,7 @@ module RailsBestPractices
|
|
59
63
|
expect(runner.errors[0].to_s).to eq('app/views/users/show.html.erb:1 - use query attribute (@user.login?)')
|
60
64
|
end
|
61
65
|
|
62
|
-
it '
|
66
|
+
it 'uses query attribute by comparing empty string' do
|
63
67
|
content = <<-EOF
|
64
68
|
<% if @user.login == "" %>
|
65
69
|
<%= link_to 'login', new_session_path %>
|
@@ -70,7 +74,7 @@ module RailsBestPractices
|
|
70
74
|
expect(runner.errors[0].to_s).to eq('app/views/users/show.html.erb:1 - use query attribute (@user.login?)')
|
71
75
|
end
|
72
76
|
|
73
|
-
it '
|
77
|
+
it 'uses query attribute by nil call' do
|
74
78
|
content = <<-EOF
|
75
79
|
<% if @user.login.nil? %>
|
76
80
|
<%= link_to 'login', new_session_path %>
|
@@ -81,7 +85,7 @@ module RailsBestPractices
|
|
81
85
|
expect(runner.errors[0].to_s).to eq('app/views/users/show.html.erb:1 - use query attribute (@user.login?)')
|
82
86
|
end
|
83
87
|
|
84
|
-
it '
|
88
|
+
it 'uses query attribute by present call' do
|
85
89
|
content = <<-EOF
|
86
90
|
<% if @user.login.present? %>
|
87
91
|
<%= @user.login %>
|
@@ -92,7 +96,7 @@ module RailsBestPractices
|
|
92
96
|
expect(runner.errors[0].to_s).to eq('app/views/users/show.html.erb:1 - use query attribute (@user.login?)')
|
93
97
|
end
|
94
98
|
|
95
|
-
it '
|
99
|
+
it 'uses query attribute within and conditions' do
|
96
100
|
content = <<-EOF
|
97
101
|
<% if @user.active? && @user.login.present? %>
|
98
102
|
<%= @user.login %>
|
@@ -103,7 +107,7 @@ module RailsBestPractices
|
|
103
107
|
expect(runner.errors[0].to_s).to eq('app/views/users/show.html.erb:1 - use query attribute (@user.login?)')
|
104
108
|
end
|
105
109
|
|
106
|
-
it '
|
110
|
+
it 'uses query attribute within or conditions' do
|
107
111
|
content = <<-EOF
|
108
112
|
<% if @user.active? or @user.login != "" %>
|
109
113
|
<%= @user.login %>
|
@@ -114,7 +118,7 @@ module RailsBestPractices
|
|
114
118
|
expect(runner.errors[0].to_s).to eq('app/views/users/show.html.erb:1 - use query attribute (@user.login?)')
|
115
119
|
end
|
116
120
|
|
117
|
-
it '
|
121
|
+
it 'does not use query attribute' do
|
118
122
|
content = <<-EOF
|
119
123
|
<% if @user.login? %>
|
120
124
|
<%= @user.login %>
|
@@ -124,7 +128,7 @@ module RailsBestPractices
|
|
124
128
|
expect(runner.errors.size).to eq(0)
|
125
129
|
end
|
126
130
|
|
127
|
-
it '
|
131
|
+
it 'does not use query attribute for number' do
|
128
132
|
content = <<-EOF
|
129
133
|
<% unless @user.age.blank? %>
|
130
134
|
<%= @user.age %>
|
@@ -134,7 +138,7 @@ module RailsBestPractices
|
|
134
138
|
expect(runner.errors.size).to eq(0)
|
135
139
|
end
|
136
140
|
|
137
|
-
it '
|
141
|
+
it 'does not review for pluralize attribute' do
|
138
142
|
content = <<-EOF
|
139
143
|
<% if @user.roles.blank? %>
|
140
144
|
<%= @user.login %>
|
@@ -144,7 +148,7 @@ module RailsBestPractices
|
|
144
148
|
expect(runner.errors.size).to eq(0)
|
145
149
|
end
|
146
150
|
|
147
|
-
it '
|
151
|
+
it 'does not review non model class' do
|
148
152
|
content = <<-EOF
|
149
153
|
<% if @person.login.present? %>
|
150
154
|
<%= @person.login %>
|
@@ -155,7 +159,7 @@ module RailsBestPractices
|
|
155
159
|
end
|
156
160
|
|
157
161
|
context 'association' do
|
158
|
-
it '
|
162
|
+
it 'does not review belongs_to association' do
|
159
163
|
content = <<-EOF
|
160
164
|
<% if @user.location.present? %>
|
161
165
|
<%= @user.location.name %>
|
@@ -165,7 +169,7 @@ module RailsBestPractices
|
|
165
169
|
expect(runner.errors.size).to eq(0)
|
166
170
|
end
|
167
171
|
|
168
|
-
it '
|
172
|
+
it 'does not review belongs_to category' do
|
169
173
|
content = <<-EOF
|
170
174
|
<% if @user.category.present? %>
|
171
175
|
<%= @user.category.name %>
|
@@ -175,7 +179,7 @@ module RailsBestPractices
|
|
175
179
|
expect(runner.errors.size).to eq(0)
|
176
180
|
end
|
177
181
|
|
178
|
-
it '
|
182
|
+
it 'does not review has_one association' do
|
179
183
|
content = <<-EOF
|
180
184
|
<% if @user.phone.present? %>
|
181
185
|
<%= @user.phone.number %>
|
@@ -185,7 +189,7 @@ module RailsBestPractices
|
|
185
189
|
expect(runner.errors.size).to eq(0)
|
186
190
|
end
|
187
191
|
|
188
|
-
it '
|
192
|
+
it 'does not review has_many association' do
|
189
193
|
content = <<-EOF
|
190
194
|
<% if @user.projects.present? %>
|
191
195
|
<%= @user.projects.first.name %>
|
@@ -196,7 +200,7 @@ module RailsBestPractices
|
|
196
200
|
end
|
197
201
|
end
|
198
202
|
|
199
|
-
it '
|
203
|
+
it 'does not review for class method' do
|
200
204
|
content = <<-EOF
|
201
205
|
<% if User.name.present? %>
|
202
206
|
<%= User.name %>
|
@@ -206,7 +210,7 @@ module RailsBestPractices
|
|
206
210
|
expect(runner.errors.size).to eq(0)
|
207
211
|
end
|
208
212
|
|
209
|
-
it '
|
213
|
+
it 'does not review for non attribute call' do
|
210
214
|
content = <<-EOF
|
211
215
|
if @user.login(false).nil?
|
212
216
|
puts @user.login(false)
|
@@ -216,7 +220,7 @@ module RailsBestPractices
|
|
216
220
|
expect(runner.errors.size).to eq(0)
|
217
221
|
end
|
218
222
|
|
219
|
-
it '
|
223
|
+
it 'does not raise error for common conditional statement' do
|
220
224
|
content = <<-EOF
|
221
225
|
if voteable.is_a? Answer
|
222
226
|
puts voteable.title
|
@@ -225,9 +229,12 @@ module RailsBestPractices
|
|
225
229
|
expect { runner.review('app/models/users_controller.rb', content) }.not_to raise_error
|
226
230
|
end
|
227
231
|
|
228
|
-
it '
|
229
|
-
runner =
|
230
|
-
|
232
|
+
it 'does not check ignored files' do
|
233
|
+
runner =
|
234
|
+
Core::Runner.new(
|
235
|
+
prepares: [Prepares::ModelPrepare.new, Prepares::SchemaPrepare.new],
|
236
|
+
reviews: described_class.new(ignored_files: %r{users/show})
|
237
|
+
)
|
231
238
|
content = <<-EOF
|
232
239
|
<% if @user.login.blank? %>
|
233
240
|
<%= link_to 'login', new_session_path %>
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe UseSayWithTimeInMigrationsReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'uses say with time in migrations' do
|
11
11
|
content = <<-EOF
|
12
12
|
def self.up
|
13
13
|
User.find_each do |user|
|
@@ -18,10 +18,12 @@ module RailsBestPractices
|
|
18
18
|
EOF
|
19
19
|
runner.review('db/migrate/20101010080658_update_users.rb', content)
|
20
20
|
expect(runner.errors.size).to eq(1)
|
21
|
-
expect(runner.errors[0].to_s).to eq(
|
21
|
+
expect(runner.errors[0].to_s).to eq(
|
22
|
+
'db/migrate/20101010080658_update_users.rb:2 - use say with time in migrations'
|
23
|
+
)
|
22
24
|
end
|
23
25
|
|
24
|
-
it '
|
26
|
+
it 'uses say with time in migrations with create_table' do
|
25
27
|
content = <<-EOF
|
26
28
|
def self.up
|
27
29
|
create_table :users do |t|
|
@@ -37,10 +39,12 @@ module RailsBestPractices
|
|
37
39
|
EOF
|
38
40
|
runner.review('db/migrate/20101010080658_update_users.rb', content)
|
39
41
|
expect(runner.errors.size).to eq(1)
|
40
|
-
expect(runner.errors[0].to_s).to eq(
|
42
|
+
expect(runner.errors[0].to_s).to eq(
|
43
|
+
'db/migrate/20101010080658_update_users.rb:7 - use say with time in migrations'
|
44
|
+
)
|
41
45
|
end
|
42
46
|
|
43
|
-
it '
|
47
|
+
it 'does not use say with time in migrations' do
|
44
48
|
content = <<-EOF
|
45
49
|
def self.up
|
46
50
|
say_with_time("Initialize first_name and last_name for users") do
|
@@ -56,7 +60,7 @@ module RailsBestPractices
|
|
56
60
|
expect(runner.errors.size).to eq(0)
|
57
61
|
end
|
58
62
|
|
59
|
-
it '
|
63
|
+
it 'does not use say with time in migrations when not first code line' do
|
60
64
|
content = <<-EOF
|
61
65
|
def self.up
|
62
66
|
User.find_each do |user|
|
@@ -70,7 +74,7 @@ module RailsBestPractices
|
|
70
74
|
expect(runner.errors.size).to eq(0)
|
71
75
|
end
|
72
76
|
|
73
|
-
it '
|
77
|
+
it 'does not use say with time when default migration message' do
|
74
78
|
content = <<-EOF
|
75
79
|
def self.up
|
76
80
|
create_table :users do |t|
|
@@ -84,7 +88,7 @@ module RailsBestPractices
|
|
84
88
|
expect(runner.errors.size).to eq(0)
|
85
89
|
end
|
86
90
|
|
87
|
-
it '
|
91
|
+
it 'does not raise an error' do
|
88
92
|
content = <<-EOF
|
89
93
|
class AddAdmin < ActiveRecord::Migration
|
90
94
|
|
@@ -120,8 +124,8 @@ module RailsBestPractices
|
|
120
124
|
expect(runner.errors.size).to eq(3)
|
121
125
|
end
|
122
126
|
|
123
|
-
it '
|
124
|
-
runner = Core::Runner.new(reviews:
|
127
|
+
it 'does not check ignored files' do
|
128
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: /20101010080658_update_users/))
|
125
129
|
content = <<-EOF
|
126
130
|
def self.up
|
127
131
|
User.find_each do |user|
|
@@ -5,10 +5,10 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe UseScopeAccessReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
10
|
context 'if' do
|
11
|
-
it '
|
11
|
+
it 'uses scope access' do
|
12
12
|
content = <<-EOF
|
13
13
|
class PostsController < ApplicationController
|
14
14
|
def edit
|
@@ -26,7 +26,7 @@ module RailsBestPractices
|
|
26
26
|
expect(runner.errors[0].to_s).to eq('app/controllers/posts_controller.rb:5 - use scope access')
|
27
27
|
end
|
28
28
|
|
29
|
-
it '
|
29
|
+
it 'uses scope access with if in one line' do
|
30
30
|
content = <<-EOF
|
31
31
|
class PostsController < ApplicationController
|
32
32
|
def edit
|
@@ -41,7 +41,7 @@ module RailsBestPractices
|
|
41
41
|
expect(runner.errors[0].to_s).to eq('app/controllers/posts_controller.rb:5 - use scope access')
|
42
42
|
end
|
43
43
|
|
44
|
-
it "
|
44
|
+
it "uses scope access with '? :'" do
|
45
45
|
content = <<-EOF
|
46
46
|
class PostsController < ApplicationController
|
47
47
|
def edit
|
@@ -56,7 +56,7 @@ module RailsBestPractices
|
|
56
56
|
expect(runner.errors[0].to_s).to eq('app/controllers/posts_controller.rb:5 - use scope access')
|
57
57
|
end
|
58
58
|
|
59
|
-
it '
|
59
|
+
it 'uses scope access by comparing with id' do
|
60
60
|
content = <<-EOF
|
61
61
|
class PostsController < ApplicationController
|
62
62
|
def edit
|
@@ -74,7 +74,7 @@ module RailsBestPractices
|
|
74
74
|
expect(runner.errors[0].to_s).to eq('app/controllers/posts_controller.rb:5 - use scope access')
|
75
75
|
end
|
76
76
|
|
77
|
-
it '
|
77
|
+
it 'uses scope access with current_user ==' do
|
78
78
|
content = <<-EOF
|
79
79
|
class PostsController < ApplicationController
|
80
80
|
def edit
|
@@ -92,7 +92,7 @@ module RailsBestPractices
|
|
92
92
|
expect(runner.errors[0].to_s).to eq('app/controllers/posts_controller.rb:5 - use scope access')
|
93
93
|
end
|
94
94
|
|
95
|
-
it '
|
95
|
+
it 'uses scope access by current_user.id ==' do
|
96
96
|
content = <<-EOF
|
97
97
|
class PostsController < ApplicationController
|
98
98
|
def edit
|
@@ -112,7 +112,7 @@ module RailsBestPractices
|
|
112
112
|
end
|
113
113
|
|
114
114
|
context 'unless' do
|
115
|
-
it '
|
115
|
+
it 'uses scope access' do
|
116
116
|
content = <<-EOF
|
117
117
|
class PostsController < ApplicationController
|
118
118
|
def edit
|
@@ -130,7 +130,7 @@ module RailsBestPractices
|
|
130
130
|
expect(runner.errors[0].to_s).to eq('app/controllers/posts_controller.rb:5 - use scope access')
|
131
131
|
end
|
132
132
|
|
133
|
-
it '
|
133
|
+
it 'uses scope access by comparing with id' do
|
134
134
|
content = <<-EOF
|
135
135
|
class PostsController < ApplicationController
|
136
136
|
def edit
|
@@ -148,7 +148,7 @@ module RailsBestPractices
|
|
148
148
|
expect(runner.errors[0].to_s).to eq('app/controllers/posts_controller.rb:5 - use scope access')
|
149
149
|
end
|
150
150
|
|
151
|
-
it '
|
151
|
+
it 'uses scope access with current_user ==' do
|
152
152
|
content = <<-EOF
|
153
153
|
class PostsController < ApplicationController
|
154
154
|
def edit
|
@@ -166,7 +166,7 @@ module RailsBestPractices
|
|
166
166
|
expect(runner.errors[0].to_s).to eq('app/controllers/posts_controller.rb:5 - use scope access')
|
167
167
|
end
|
168
168
|
|
169
|
-
it '
|
169
|
+
it 'uses scope access by current_user.id ==' do
|
170
170
|
content = <<-EOF
|
171
171
|
class PostsController < ApplicationController
|
172
172
|
def edit
|
@@ -184,7 +184,7 @@ module RailsBestPractices
|
|
184
184
|
expect(runner.errors[0].to_s).to eq('app/controllers/posts_controller.rb:5 - use scope access')
|
185
185
|
end
|
186
186
|
|
187
|
-
it '
|
187
|
+
it 'noes error in use_scope_access_review' do
|
188
188
|
content = <<-EOF
|
189
189
|
class CommentsController < ApplicationController
|
190
190
|
def add_comment
|
@@ -206,8 +206,8 @@ module RailsBestPractices
|
|
206
206
|
expect(runner.errors.size).to eq(0)
|
207
207
|
end
|
208
208
|
|
209
|
-
it '
|
210
|
-
runner = Core::Runner.new(reviews:
|
209
|
+
it 'does not check ignored files' do
|
210
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: /posts_controller/))
|
211
211
|
content = <<-EOF
|
212
212
|
class PostsController < ApplicationController
|
213
213
|
def edit
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe UseTurboSprocketsRails3Review do
|
8
|
-
let(:runner) { Core::Runner.new(prepares: Prepares::GemfilePrepare.new, reviews:
|
8
|
+
let(:runner) { Core::Runner.new(prepares: Prepares::GemfilePrepare.new, reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'uses turbo-sprockets-rails3' do
|
11
11
|
content = <<~EOF
|
12
12
|
GEM
|
13
13
|
remote: https://rubygems.org
|
@@ -32,7 +32,7 @@ module RailsBestPractices
|
|
32
32
|
expect(runner.errors[0].to_s).to eq('Capfile:2 - speed up assets precompile with turbo-sprockets-rails3')
|
33
33
|
end
|
34
34
|
|
35
|
-
it '
|
35
|
+
it 'does not use turbo-sprockets-rails3 with turbo-sprockets-rails3 gem' do
|
36
36
|
content = <<~EOF
|
37
37
|
GEM
|
38
38
|
remote: https://rubygems.org
|
@@ -59,7 +59,7 @@ module RailsBestPractices
|
|
59
59
|
expect(runner.errors.size).to eq(0)
|
60
60
|
end
|
61
61
|
|
62
|
-
it '
|
62
|
+
it 'does not use turbo-sprockets-rails3 without deploy/assets' do
|
63
63
|
content = <<-EOF
|
64
64
|
load 'deploy' if respond_to?(:namespace)
|
65
65
|
#load 'deploy/assets'
|
@@ -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 use turbo-sprockets-rails3 with rails4 gem' do
|
73
73
|
content = <<~EOF
|
74
74
|
GEM
|
75
75
|
remote: https://rubygems.org
|
@@ -93,9 +93,11 @@ module RailsBestPractices
|
|
93
93
|
expect(runner.errors.size).to eq(0)
|
94
94
|
end
|
95
95
|
|
96
|
-
it '
|
97
|
-
runner =
|
98
|
-
|
96
|
+
it 'does not check ignored files' do
|
97
|
+
runner =
|
98
|
+
Core::Runner.new(
|
99
|
+
prepares: Prepares::GemfilePrepare.new, reviews: described_class.new(ignored_files: /Capfile/)
|
100
|
+
)
|
99
101
|
content = <<~EOF
|
100
102
|
GEM
|
101
103
|
remote: https://rubygems.org
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_best_practices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.22.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-10-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.5.
|
33
|
+
version: 0.5.2
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.5.
|
40
|
+
version: 0.5.2
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: erubis
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -235,6 +235,9 @@ files:
|
|
235
235
|
- lib/rails_best_practices/core/routes.rb
|
236
236
|
- lib/rails_best_practices/core/runner.rb
|
237
237
|
- lib/rails_best_practices/core_ext/erubis.rb
|
238
|
+
- lib/rails_best_practices/inline_disables.rb
|
239
|
+
- lib/rails_best_practices/inline_disables/comment_ripper.rb
|
240
|
+
- lib/rails_best_practices/inline_disables/inline_disable.rb
|
238
241
|
- lib/rails_best_practices/lexicals.rb
|
239
242
|
- lib/rails_best_practices/lexicals/long_line_check.rb
|
240
243
|
- lib/rails_best_practices/lexicals/remove_tab_check.rb
|
@@ -314,6 +317,7 @@ files:
|
|
314
317
|
- spec/rails_best_practices/core/routes_spec.rb
|
315
318
|
- spec/rails_best_practices/core/runner_spec.rb
|
316
319
|
- spec/rails_best_practices/core_ext/erubis_spec.rb
|
320
|
+
- spec/rails_best_practices/inline_disables/inline_disable_spec.rb
|
317
321
|
- spec/rails_best_practices/lexicals/long_line_check_spec.rb
|
318
322
|
- spec/rails_best_practices/lexicals/remove_tab_check_spec.rb
|
319
323
|
- spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb
|
@@ -399,8 +403,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
399
403
|
- !ruby/object:Gem::Version
|
400
404
|
version: 1.3.6
|
401
405
|
requirements: []
|
402
|
-
rubygems_version: 3.
|
403
|
-
signing_key:
|
406
|
+
rubygems_version: 3.2.22
|
407
|
+
signing_key:
|
404
408
|
specification_version: 4
|
405
409
|
summary: a code metric tool for rails codes.
|
406
410
|
test_files:
|
@@ -424,6 +428,7 @@ test_files:
|
|
424
428
|
- spec/rails_best_practices/core/routes_spec.rb
|
425
429
|
- spec/rails_best_practices/core/runner_spec.rb
|
426
430
|
- spec/rails_best_practices/core_ext/erubis_spec.rb
|
431
|
+
- spec/rails_best_practices/inline_disables/inline_disable_spec.rb
|
427
432
|
- spec/rails_best_practices/lexicals/long_line_check_spec.rb
|
428
433
|
- spec/rails_best_practices/lexicals/remove_tab_check_spec.rb
|
429
434
|
- spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb
|