rails_best_practices 1.19.2 → 1.20.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 +5 -5
- data/.gitignore +0 -1
- data/.travis.yml +2 -3
- data/CHANGELOG.md +7 -7
- data/Gemfile +3 -5
- data/Gemfile.lock +125 -0
- data/Guardfile +2 -0
- data/README.md +6 -6
- data/Rakefile +2 -17
- data/assets/result.html.erb +2 -0
- data/lib/rails_best_practices.rb +3 -2
- data/lib/rails_best_practices/analyzer.rb +61 -49
- data/lib/rails_best_practices/cli.rb +22 -0
- data/lib/rails_best_practices/command.rb +1 -131
- data/lib/rails_best_practices/core/check.rb +64 -56
- data/lib/rails_best_practices/core/checks_loader.rb +24 -23
- 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 +27 -21
- data/lib/rails_best_practices/core/model_associations.rb +10 -5
- 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 +67 -73
- data/lib/rails_best_practices/lexicals/long_line_check.rb +7 -3
- data/lib/rails_best_practices/option_parser.rb +156 -0
- data/lib/rails_best_practices/prepares.rb +1 -1
- data/lib/rails_best_practices/prepares/controller_prepare.rb +24 -17
- data/lib/rails_best_practices/prepares/gemfile_prepare.rb +2 -2
- data/lib/rails_best_practices/prepares/helper_prepare.rb +6 -1
- data/lib/rails_best_practices/prepares/initializer_prepare.rb +3 -3
- data/lib/rails_best_practices/prepares/mailer_prepare.rb +2 -1
- data/lib/rails_best_practices/prepares/model_prepare.rb +63 -23
- data/lib/rails_best_practices/prepares/route_prepare.rb +28 -21
- data/lib/rails_best_practices/prepares/schema_prepare.rb +1 -1
- data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +38 -34
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +94 -89
- data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +15 -5
- data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +20 -8
- data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +1 -1
- data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +1 -1
- data/lib/rails_best_practices/reviews/hash_syntax_review.rb +16 -16
- data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +12 -12
- data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +10 -11
- data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +25 -24
- data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +4 -4
- data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +9 -10
- data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +10 -11
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +24 -22
- data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +1 -1
- data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +1 -2
- data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +1 -1
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +8 -8
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +35 -32
- data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +4 -4
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +26 -19
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +12 -10
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +38 -18
- data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +11 -11
- data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +77 -74
- data/lib/rails_best_practices/reviews/review.rb +2 -1
- data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +2 -3
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +12 -12
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +18 -15
- data/lib/rails_best_practices/reviews/use_model_association_review.rb +15 -15
- data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +24 -22
- data/lib/rails_best_practices/reviews/use_observer_review.rb +28 -28
- data/lib/rails_best_practices/reviews/use_parentheses_in_method_def_review.rb +6 -6
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +68 -66
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +9 -8
- data/lib/rails_best_practices/reviews/use_scope_access_review.rb +16 -14
- data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -1
- data/lib/rails_best_practices/version.rb +1 -1
- data/rails_best_practices.gemspec +38 -43
- 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 -18
- 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/lexicals/long_line_check_spec.rb +32 -31
- 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 +17 -17
- 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 +141 -76
- 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 +13 -13
- 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 +29 -22
- 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 +32 -22
- 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 -17
- 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 +64 -31
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +21 -14
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +57 -53
- 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 +20 -14
- 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 +35 -31
- 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 +10 -8
- 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 +61 -59
- metadata +16 -18
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Prepares
|
7
7
|
describe SchemaPrepare do
|
8
|
-
let(:runner) { Core::Runner.new(prepares:
|
8
|
+
let(:runner) { Core::Runner.new(prepares: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'parses model attributes' do
|
11
11
|
content = <<-EOF
|
12
12
|
ActiveRecord::Schema.define(version: 20110319172136) do
|
13
13
|
create_table "posts", force: true do |t|
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe AddModelVirtualAttributeReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'adds model virtual attribute' do
|
11
11
|
content = <<-EOF
|
12
12
|
class UsersController < ApplicationController
|
13
13
|
def create
|
@@ -20,10 +20,12 @@ module RailsBestPractices
|
|
20
20
|
EOF
|
21
21
|
runner.review('app/controllers/users_controller.rb', content)
|
22
22
|
expect(runner.errors.size).to eq(1)
|
23
|
-
expect(runner.errors[0].to_s).to eq(
|
23
|
+
expect(runner.errors[0].to_s).to eq(
|
24
|
+
'app/controllers/users_controller.rb:2 - add model virtual attribute (for @user)'
|
25
|
+
)
|
24
26
|
end
|
25
27
|
|
26
|
-
it '
|
28
|
+
it 'adds model virtual attribute with local assignment' do
|
27
29
|
content = <<-EOF
|
28
30
|
class UsersController < ApplicationController
|
29
31
|
def create
|
@@ -36,10 +38,12 @@ module RailsBestPractices
|
|
36
38
|
EOF
|
37
39
|
runner.review('app/controllers/users_controller.rb', content)
|
38
40
|
expect(runner.errors.size).to eq(1)
|
39
|
-
expect(runner.errors[0].to_s).to eq(
|
41
|
+
expect(runner.errors[0].to_s).to eq(
|
42
|
+
'app/controllers/users_controller.rb:2 - add model virtual attribute (for user)'
|
43
|
+
)
|
40
44
|
end
|
41
45
|
|
42
|
-
it '
|
46
|
+
it 'does not add model virtual attribute with differen param' do
|
43
47
|
content = <<-EOF
|
44
48
|
class UsersController < ApplicationController
|
45
49
|
def create
|
@@ -54,7 +58,7 @@ module RailsBestPractices
|
|
54
58
|
expect(runner.errors.size).to eq(0)
|
55
59
|
end
|
56
60
|
|
57
|
-
it '
|
61
|
+
it 'does not add model virtual attribute with read' do
|
58
62
|
content = <<-EOF
|
59
63
|
class UsersController < ApplicationController
|
60
64
|
def show
|
@@ -70,7 +74,7 @@ module RailsBestPractices
|
|
70
74
|
expect(runner.errors.size).to eq(0)
|
71
75
|
end
|
72
76
|
|
73
|
-
it '
|
77
|
+
it 'adds model virtual attribute with two dimension params' do
|
74
78
|
content = <<-EOF
|
75
79
|
class UsersController < ApplicationController
|
76
80
|
def create
|
@@ -83,10 +87,12 @@ module RailsBestPractices
|
|
83
87
|
EOF
|
84
88
|
runner.review('app/controllers/users_controller.rb', content)
|
85
89
|
expect(runner.errors.size).to eq(1)
|
86
|
-
expect(runner.errors[0].to_s).to eq(
|
90
|
+
expect(runner.errors[0].to_s).to eq(
|
91
|
+
'app/controllers/users_controller.rb:2 - add model virtual attribute (for @user)'
|
92
|
+
)
|
87
93
|
end
|
88
94
|
|
89
|
-
it '
|
95
|
+
it 'noes add model virtual attribute with two dimension params' do
|
90
96
|
content = <<-EOF
|
91
97
|
class UsersController < ApplicationController
|
92
98
|
def create
|
@@ -101,8 +107,8 @@ module RailsBestPractices
|
|
101
107
|
expect(runner.errors.size).to eq(0)
|
102
108
|
end
|
103
109
|
|
104
|
-
it '
|
105
|
-
runner = Core::Runner.new(reviews:
|
110
|
+
it 'does not check ignored files' do
|
111
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: /user/))
|
106
112
|
content = <<-EOF
|
107
113
|
class UsersController < ApplicationController
|
108
114
|
def create
|
@@ -5,9 +5,9 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe AlwaysAddDbIndexReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
|
-
it '
|
10
|
+
it 'alwayses add db index' do
|
11
11
|
content = <<-EOF
|
12
12
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
13
13
|
create_table "comments", force: true do |t|
|
@@ -28,7 +28,7 @@ module RailsBestPractices
|
|
28
28
|
expect(runner.errors[1].to_s).to eq('db/schema.rb:2 - always add db index (comments => [user_id])')
|
29
29
|
end
|
30
30
|
|
31
|
-
it '
|
31
|
+
it 'alwayses add db index with polymorphic foreign key' do
|
32
32
|
content = <<-EOF
|
33
33
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
34
34
|
create_table "versions", force: true do |t|
|
@@ -41,10 +41,12 @@ module RailsBestPractices
|
|
41
41
|
runner.review('db/schema.rb', content)
|
42
42
|
runner.after_review
|
43
43
|
expect(runner.errors.size).to eq(1)
|
44
|
-
expect(runner.errors[0].to_s).to eq(
|
44
|
+
expect(runner.errors[0].to_s).to eq(
|
45
|
+
'db/schema.rb:2 - always add db index (versions => [versioned_id, versioned_type])'
|
46
|
+
)
|
45
47
|
end
|
46
48
|
|
47
|
-
it '
|
49
|
+
it 'alwayses add db index with polymorphic foreign key and _type is defined before _id' do
|
48
50
|
content = <<-EOF
|
49
51
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
50
52
|
create_table "versions", force: true do |t|
|
@@ -57,10 +59,12 @@ module RailsBestPractices
|
|
57
59
|
runner.review('db/schema.rb', content)
|
58
60
|
runner.after_review
|
59
61
|
expect(runner.errors.size).to eq(1)
|
60
|
-
expect(runner.errors[0].to_s).to eq(
|
62
|
+
expect(runner.errors[0].to_s).to eq(
|
63
|
+
'db/schema.rb:2 - always add db index (versions => [versioned_id, versioned_type])'
|
64
|
+
)
|
61
65
|
end
|
62
66
|
|
63
|
-
it '
|
67
|
+
it 'alwayses add db index with single index, but without polymorphic foreign key' do
|
64
68
|
content = <<-EOF
|
65
69
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
66
70
|
create_table "taggings", force: true do |t|
|
@@ -77,10 +81,12 @@ module RailsBestPractices
|
|
77
81
|
runner.review('db/schema.rb', content)
|
78
82
|
runner.after_review
|
79
83
|
expect(runner.errors.size).to eq(1)
|
80
|
-
expect(runner.errors[0].to_s).to eq(
|
84
|
+
expect(runner.errors[0].to_s).to eq(
|
85
|
+
'db/schema.rb:2 - always add db index (taggings => [taggable_id, taggable_type])'
|
86
|
+
)
|
81
87
|
end
|
82
88
|
|
83
|
-
it '
|
89
|
+
it 'alwayses add db index with polymorphic foreign key, but without single index' do
|
84
90
|
content = <<-EOF
|
85
91
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
86
92
|
create_table "taggings", force: true do |t|
|
@@ -100,7 +106,7 @@ module RailsBestPractices
|
|
100
106
|
expect(runner.errors[0].to_s).to eq('db/schema.rb:2 - always add db index (taggings => [tag_id])')
|
101
107
|
end
|
102
108
|
|
103
|
-
it '
|
109
|
+
it 'alwayses add db index only _id without non related _type column' do
|
104
110
|
content = <<-EOF
|
105
111
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
106
112
|
create_table "websites", force: true do |t|
|
@@ -119,7 +125,7 @@ module RailsBestPractices
|
|
119
125
|
expect(runner.errors[0].to_s).to eq('db/schema.rb:2 - always add db index (websites => [user_id])')
|
120
126
|
end
|
121
127
|
|
122
|
-
it '
|
128
|
+
it 'does not always add db index with column has no id' do
|
123
129
|
content = <<-EOF
|
124
130
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
125
131
|
create_table "comments", force: true do |t|
|
@@ -133,7 +139,7 @@ module RailsBestPractices
|
|
133
139
|
expect(runner.errors.size).to eq(0)
|
134
140
|
end
|
135
141
|
|
136
|
-
it '
|
142
|
+
it 'does not always add db index with add_index' do
|
137
143
|
content = <<-EOF
|
138
144
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
139
145
|
create_table "comments", force: true do |t|
|
@@ -155,7 +161,7 @@ module RailsBestPractices
|
|
155
161
|
expect(runner.errors.size).to eq(0)
|
156
162
|
end
|
157
163
|
|
158
|
-
it '
|
164
|
+
it 'does not always add db index with t.index' do
|
159
165
|
# e.g. schema_plus creates indices like this https://github.com/lomba/schema_plus
|
160
166
|
content = <<-EOF
|
161
167
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
@@ -173,7 +179,7 @@ module RailsBestPractices
|
|
173
179
|
expect(runner.errors.size).to eq(0)
|
174
180
|
end
|
175
181
|
|
176
|
-
it '
|
182
|
+
it 'does not always add db index with only _type column' do
|
177
183
|
content = <<-EOF
|
178
184
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
179
185
|
create_table "versions", force: true do |t|
|
@@ -186,7 +192,7 @@ module RailsBestPractices
|
|
186
192
|
expect(runner.errors.size).to eq(0)
|
187
193
|
end
|
188
194
|
|
189
|
-
it '
|
195
|
+
it 'does not always add db index with multi-column index' do
|
190
196
|
content = <<-EOF
|
191
197
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
192
198
|
create_table "versions", force: true do |t|
|
@@ -203,7 +209,7 @@ module RailsBestPractices
|
|
203
209
|
expect(runner.errors.size).to eq(0)
|
204
210
|
end
|
205
211
|
|
206
|
-
it '
|
212
|
+
it 'does not always add db index if there is an index contains more columns' do
|
207
213
|
content = <<-EOF
|
208
214
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
209
215
|
create_table "taggings", force: true do |t|
|
@@ -220,7 +226,7 @@ module RailsBestPractices
|
|
220
226
|
expect(runner.errors.size).to eq(0)
|
221
227
|
end
|
222
228
|
|
223
|
-
it '
|
229
|
+
it 'does not always add db index if two indexes for polymorphic association' do
|
224
230
|
content = <<-EOF
|
225
231
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
226
232
|
create_table "taggings", force: true do |t|
|
@@ -238,7 +244,7 @@ module RailsBestPractices
|
|
238
244
|
expect(runner.errors.size).to eq(0)
|
239
245
|
end
|
240
246
|
|
241
|
-
it '
|
247
|
+
it 'does not always add db index if table does not exist' do
|
242
248
|
content = <<-EOF
|
243
249
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
244
250
|
create_table "comments", force: true do |t|
|
@@ -251,7 +257,7 @@ module RailsBestPractices
|
|
251
257
|
expect(runner.errors.size).to eq(0)
|
252
258
|
end
|
253
259
|
|
254
|
-
it '
|
260
|
+
it 'alwayses add db index if association_name is different to foreign_key' do
|
255
261
|
content = <<-EOF
|
256
262
|
class Comment < ActiveRecord::Base
|
257
263
|
belongs_to :commentor, class_name: "User"
|
@@ -278,8 +284,8 @@ module RailsBestPractices
|
|
278
284
|
expect(runner.errors[0].to_s).to eq('db/schema.rb:2 - always add db index (comments => [commentor_id])')
|
279
285
|
end
|
280
286
|
|
281
|
-
it '
|
282
|
-
runner = Core::Runner.new(reviews:
|
287
|
+
it 'does not check ignored files' do
|
288
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: %r{db/schema}))
|
283
289
|
content = <<-EOF
|
284
290
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
285
291
|
create_table "comments", force: true do |t|
|
@@ -298,7 +304,7 @@ module RailsBestPractices
|
|
298
304
|
expect(runner.errors.size).to eq(0)
|
299
305
|
end
|
300
306
|
|
301
|
-
it '
|
307
|
+
it 'detects index option in column creation' do
|
302
308
|
content = <<-EOF
|
303
309
|
ActiveRecord::Schema.define(version: 20100603080629) do
|
304
310
|
create_table "comments", force: true do |t|
|
@@ -5,10 +5,10 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe CheckDestroyReturnValueReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
10
|
describe 'check_destroy_return_value' do
|
11
|
-
it '
|
11
|
+
it 'warns you if you fail to check the destroy return value' do
|
12
12
|
content = <<-EOF
|
13
13
|
def my_method
|
14
14
|
post = Posts.create do |p|
|
@@ -19,10 +19,12 @@ module RailsBestPractices
|
|
19
19
|
EOF
|
20
20
|
runner.review('app/helpers/posts_helper.rb', content)
|
21
21
|
expect(runner.errors.size).to eq(1)
|
22
|
-
expect(runner.errors[0].to_s).to eq(
|
22
|
+
expect(runner.errors[0].to_s).to eq(
|
23
|
+
"app/helpers/posts_helper.rb:5 - check 'destroy' return value or use 'destroy!'"
|
24
|
+
)
|
23
25
|
end
|
24
26
|
|
25
|
-
it '
|
27
|
+
it 'allows destroy return value if assigned to a var' do
|
26
28
|
content = <<-EOF
|
27
29
|
def my_method
|
28
30
|
post = Posts.create do |p|
|
@@ -35,7 +37,7 @@ module RailsBestPractices
|
|
35
37
|
expect(runner.errors.size).to eq(0)
|
36
38
|
end
|
37
39
|
|
38
|
-
it '
|
40
|
+
it 'allows destroy return value used in if' do
|
39
41
|
content = <<-EOF
|
40
42
|
def my_method
|
41
43
|
post = Posts.create do |p|
|
@@ -52,7 +54,7 @@ module RailsBestPractices
|
|
52
54
|
expect(runner.errors.size).to eq(0)
|
53
55
|
end
|
54
56
|
|
55
|
-
it '
|
57
|
+
it 'allows destroy return value used in elsif' do
|
56
58
|
content = <<-EOF
|
57
59
|
def my_method
|
58
60
|
post = Posts.create do |p|
|
@@ -71,7 +73,7 @@ module RailsBestPractices
|
|
71
73
|
expect(runner.errors.size).to eq(0)
|
72
74
|
end
|
73
75
|
|
74
|
-
it '
|
76
|
+
it 'allows destroy return value used in unless' do
|
75
77
|
content = <<-EOF
|
76
78
|
def my_method
|
77
79
|
unless @post.destroy
|
@@ -83,7 +85,7 @@ module RailsBestPractices
|
|
83
85
|
expect(runner.errors.size).to eq(0)
|
84
86
|
end
|
85
87
|
|
86
|
-
it '
|
88
|
+
it 'allows destroy return value used in if_mod' do
|
87
89
|
content = <<-EOF
|
88
90
|
def my_method
|
89
91
|
post = Posts.create do |p|
|
@@ -96,7 +98,7 @@ module RailsBestPractices
|
|
96
98
|
expect(runner.errors.size).to eq(0)
|
97
99
|
end
|
98
100
|
|
99
|
-
it '
|
101
|
+
it 'allows destroy return value used in unless_mod' do
|
100
102
|
content = <<-EOF
|
101
103
|
def my_method
|
102
104
|
post = Posts.create do |p|
|
@@ -109,7 +111,7 @@ module RailsBestPractices
|
|
109
111
|
expect(runner.errors.size).to eq(0)
|
110
112
|
end
|
111
113
|
|
112
|
-
it '
|
114
|
+
it 'allows destroy return value used in unless with &&' do
|
113
115
|
content = <<-EOF
|
114
116
|
def my_method
|
115
117
|
unless some_method(1) && other_method(2) && @post.destroy
|
@@ -121,7 +123,7 @@ module RailsBestPractices
|
|
121
123
|
expect(runner.errors.size).to eq(0)
|
122
124
|
end
|
123
125
|
|
124
|
-
it '
|
126
|
+
it 'allows destroy!' do
|
125
127
|
content = <<-EOF
|
126
128
|
def my_method
|
127
129
|
post = Posts.create do |p|
|
@@ -135,8 +137,8 @@ module RailsBestPractices
|
|
135
137
|
end
|
136
138
|
end
|
137
139
|
|
138
|
-
it '
|
139
|
-
runner = Core::Runner.new(reviews:
|
140
|
+
it 'does not check ignored files' do
|
141
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: /helpers/))
|
140
142
|
content = <<-EOF
|
141
143
|
def my_method
|
142
144
|
post = Posts.create do |p|
|
@@ -5,10 +5,10 @@ require 'spec_helper'
|
|
5
5
|
module RailsBestPractices
|
6
6
|
module Reviews
|
7
7
|
describe CheckSaveReturnValueReview do
|
8
|
-
let(:runner) { Core::Runner.new(reviews:
|
8
|
+
let(:runner) { Core::Runner.new(reviews: described_class.new) }
|
9
9
|
|
10
10
|
describe 'check_save_return_value' do
|
11
|
-
it '
|
11
|
+
it 'warns you if you fail to check save return value' do
|
12
12
|
content = <<-EOF
|
13
13
|
def my_method
|
14
14
|
post = Posts.new do |p|
|
@@ -19,10 +19,12 @@ module RailsBestPractices
|
|
19
19
|
EOF
|
20
20
|
runner.review('app/helpers/posts_helper.rb', content)
|
21
21
|
expect(runner.errors.size).to eq(1)
|
22
|
-
expect(runner.errors[0].to_s).to eq(
|
22
|
+
expect(runner.errors[0].to_s).to eq(
|
23
|
+
"app/helpers/posts_helper.rb:5 - check 'save' return value or use 'save!'"
|
24
|
+
)
|
23
25
|
end
|
24
26
|
|
25
|
-
it '
|
27
|
+
it 'allows save return value assigned to var' do
|
26
28
|
content = <<-EOF
|
27
29
|
def my_method
|
28
30
|
post = Posts.new do |p|
|
@@ -35,7 +37,7 @@ module RailsBestPractices
|
|
35
37
|
expect(runner.errors.size).to eq(0)
|
36
38
|
end
|
37
39
|
|
38
|
-
it '
|
40
|
+
it 'allows save return value used in if' do
|
39
41
|
content = <<-EOF
|
40
42
|
def my_method
|
41
43
|
post = Posts.new do |p|
|
@@ -52,7 +54,7 @@ module RailsBestPractices
|
|
52
54
|
expect(runner.errors.size).to eq(0)
|
53
55
|
end
|
54
56
|
|
55
|
-
it '
|
57
|
+
it 'allows save return value used in elsif' do
|
56
58
|
content = <<-EOF
|
57
59
|
def my_method
|
58
60
|
post = Posts.new do |p|
|
@@ -71,7 +73,7 @@ module RailsBestPractices
|
|
71
73
|
expect(runner.errors.size).to eq(0)
|
72
74
|
end
|
73
75
|
|
74
|
-
it '
|
76
|
+
it 'allows save return value used in unless' do
|
75
77
|
content = <<-EOF
|
76
78
|
def my_method
|
77
79
|
unless @post.save
|
@@ -83,7 +85,7 @@ module RailsBestPractices
|
|
83
85
|
expect(runner.errors.size).to eq(0)
|
84
86
|
end
|
85
87
|
|
86
|
-
it '
|
88
|
+
it 'allows save return value used in if_mod' do
|
87
89
|
content = <<-EOF
|
88
90
|
def my_method
|
89
91
|
post = Posts.new do |p|
|
@@ -96,7 +98,7 @@ module RailsBestPractices
|
|
96
98
|
expect(runner.errors.size).to eq(0)
|
97
99
|
end
|
98
100
|
|
99
|
-
it '
|
101
|
+
it 'allows save return value used in unless_mod' do
|
100
102
|
content = <<-EOF
|
101
103
|
def my_method
|
102
104
|
post = Posts.new do |p|
|
@@ -109,7 +111,7 @@ module RailsBestPractices
|
|
109
111
|
expect(runner.errors.size).to eq(0)
|
110
112
|
end
|
111
113
|
|
112
|
-
it '
|
114
|
+
it 'allows save return value used in unless with &&' do
|
113
115
|
content = <<-EOF
|
114
116
|
def my_method
|
115
117
|
unless some_method(1) && other_method(2) && @post.save
|
@@ -121,7 +123,7 @@ module RailsBestPractices
|
|
121
123
|
expect(runner.errors.size).to eq(0)
|
122
124
|
end
|
123
125
|
|
124
|
-
it '
|
126
|
+
it 'allows save!' do
|
125
127
|
content = <<-EOF
|
126
128
|
def my_method
|
127
129
|
post = Posts.new do |p|
|
@@ -134,7 +136,7 @@ module RailsBestPractices
|
|
134
136
|
expect(runner.errors.size).to eq(0)
|
135
137
|
end
|
136
138
|
|
137
|
-
it '
|
139
|
+
it 'warns you if you fail to check update_attributes return value' do
|
138
140
|
content = <<-EOF
|
139
141
|
def my_method
|
140
142
|
@post.update_attributes params
|
@@ -142,10 +144,12 @@ module RailsBestPractices
|
|
142
144
|
EOF
|
143
145
|
runner.review('app/helpers/posts_helper.rb', content)
|
144
146
|
expect(runner.errors.size).to eq(1)
|
145
|
-
expect(runner.errors[0].to_s).to eq(
|
147
|
+
expect(runner.errors[0].to_s).to eq(
|
148
|
+
"app/helpers/posts_helper.rb:2 - check 'update_attributes' return value or use 'update_attributes!'"
|
149
|
+
)
|
146
150
|
end
|
147
151
|
|
148
|
-
it '
|
152
|
+
it 'allows update_attributes if return value is checked' do
|
149
153
|
content = <<-EOF
|
150
154
|
def my_method
|
151
155
|
@post.update_attributes(params) or raise "failed to save"
|
@@ -176,10 +180,12 @@ module RailsBestPractices
|
|
176
180
|
EOF
|
177
181
|
runner.review('app/controllers/posts_controller.rb', content)
|
178
182
|
expect(runner.errors.size).to eq(1)
|
179
|
-
expect(runner.errors[0].to_s).to eq(
|
183
|
+
expect(runner.errors[0].to_s).to eq(
|
184
|
+
"app/controllers/posts_controller.rb:12 - check 'update_attributes' return value or use 'update_attributes!'"
|
185
|
+
)
|
180
186
|
end
|
181
187
|
|
182
|
-
it '
|
188
|
+
it 'warns you if you use create which is always unsafe' do
|
183
189
|
content = <<-EOF
|
184
190
|
class Post < ActiveRecord::Base
|
185
191
|
end
|
@@ -195,10 +201,12 @@ module RailsBestPractices
|
|
195
201
|
EOF
|
196
202
|
runner.review('app/helpers/posts_helper.rb', content)
|
197
203
|
expect(runner.errors.size).to eq(1)
|
198
|
-
expect(runner.errors[0].to_s).to eq(
|
204
|
+
expect(runner.errors[0].to_s).to eq(
|
205
|
+
"app/helpers/posts_helper.rb:2 - use 'create!' instead of 'create' as the latter may not always save"
|
206
|
+
)
|
199
207
|
end
|
200
208
|
|
201
|
-
it '
|
209
|
+
it 'warns you if you use create with a block which is always unsafe' do
|
202
210
|
content = <<-EOF
|
203
211
|
module Blog
|
204
212
|
class Post < ActiveRecord::Base
|
@@ -223,7 +231,9 @@ module RailsBestPractices
|
|
223
231
|
EOF
|
224
232
|
runner.review('app/helpers/blog/posts_helper.rb', content)
|
225
233
|
expect(runner.errors.size).to eq(1)
|
226
|
-
expect(runner.errors[0].to_s).to eq(
|
234
|
+
expect(runner.errors[0].to_s).to eq(
|
235
|
+
"app/helpers/blog/posts_helper.rb:4 - use 'create!' instead of 'create' as the latter may not always save"
|
236
|
+
)
|
227
237
|
end
|
228
238
|
|
229
239
|
it 'allows create called on non-model classes' do
|
@@ -241,8 +251,8 @@ module RailsBestPractices
|
|
241
251
|
end
|
242
252
|
end
|
243
253
|
|
244
|
-
it '
|
245
|
-
runner = Core::Runner.new(reviews:
|
254
|
+
it 'does not check ignored files' do
|
255
|
+
runner = Core::Runner.new(reviews: described_class.new(ignored_files: /helpers/))
|
246
256
|
content = <<-EOF
|
247
257
|
def my_method
|
248
258
|
post = Posts.new do |p|
|