rails_best_practices 1.20.0 → 1.22.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (140) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/Gemfile +2 -1
  4. data/Gemfile.lock +49 -43
  5. data/Guardfile +2 -0
  6. data/Rakefile +2 -0
  7. data/assets/result.html.erb +2 -0
  8. data/lib/rails_best_practices/analyzer.rb +59 -48
  9. data/lib/rails_best_practices/core/check.rb +39 -32
  10. data/lib/rails_best_practices/core/checks_loader.rb +8 -6
  11. data/lib/rails_best_practices/core/configs.rb +1 -2
  12. data/lib/rails_best_practices/core/controllers.rb +1 -2
  13. data/lib/rails_best_practices/core/error.rb +1 -1
  14. data/lib/rails_best_practices/core/helpers.rb +1 -2
  15. data/lib/rails_best_practices/core/mailers.rb +1 -2
  16. data/lib/rails_best_practices/core/methods.rb +21 -16
  17. data/lib/rails_best_practices/core/model_associations.rb +9 -4
  18. data/lib/rails_best_practices/core/models.rb +1 -2
  19. data/lib/rails_best_practices/core/modules.rb +1 -1
  20. data/lib/rails_best_practices/core/routes.rb +2 -2
  21. data/lib/rails_best_practices/core/runner.rb +49 -34
  22. data/lib/rails_best_practices/inline_disables/comment_ripper.rb +19 -0
  23. data/lib/rails_best_practices/inline_disables/inline_disable.rb +50 -0
  24. data/lib/rails_best_practices/inline_disables.rb +3 -0
  25. data/lib/rails_best_practices/lexicals/long_line_check.rb +7 -3
  26. data/lib/rails_best_practices/option_parser.rb +22 -6
  27. data/lib/rails_best_practices/prepares/controller_prepare.rb +15 -3
  28. data/lib/rails_best_practices/prepares/gemfile_prepare.rb +1 -1
  29. data/lib/rails_best_practices/prepares/helper_prepare.rb +6 -1
  30. data/lib/rails_best_practices/prepares/initializer_prepare.rb +2 -2
  31. data/lib/rails_best_practices/prepares/mailer_prepare.rb +1 -0
  32. data/lib/rails_best_practices/prepares/model_prepare.rb +52 -12
  33. data/lib/rails_best_practices/prepares/route_prepare.rb +16 -10
  34. data/lib/rails_best_practices/prepares.rb +1 -1
  35. data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +15 -13
  36. data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +34 -29
  37. data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +14 -5
  38. data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +19 -8
  39. data/lib/rails_best_practices/reviews/hash_syntax_review.rb +5 -5
  40. data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +4 -4
  41. data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +7 -8
  42. data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +6 -6
  43. data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +1 -1
  44. data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +6 -7
  45. data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +7 -8
  46. data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +12 -10
  47. data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +1 -2
  48. data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +5 -5
  49. data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +5 -2
  50. data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +6 -3
  51. data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +6 -4
  52. data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +29 -9
  53. data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +3 -3
  54. data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +17 -15
  55. data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +1 -2
  56. data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +3 -3
  57. data/lib/rails_best_practices/reviews/use_before_filter_review.rb +2 -1
  58. data/lib/rails_best_practices/reviews/use_model_association_review.rb +5 -5
  59. data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +9 -8
  60. data/lib/rails_best_practices/reviews/use_observer_review.rb +9 -9
  61. data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +26 -26
  62. data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +8 -7
  63. data/lib/rails_best_practices/reviews/use_scope_access_review.rb +17 -15
  64. data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -1
  65. data/lib/rails_best_practices/version.rb +1 -1
  66. data/lib/rails_best_practices.rb +2 -2
  67. data/rails_best_practices.gemspec +39 -38
  68. data/spec/fixtures/lib/rails_best_practices/plugins/reviews/not_use_rails_root_review.rb +1 -2
  69. data/spec/rails_best_practices/analyzer_spec.rb +73 -42
  70. data/spec/rails_best_practices/core/check_spec.rb +5 -5
  71. data/spec/rails_best_practices/core/checks_loader_spec.rb +3 -3
  72. data/spec/rails_best_practices/core/configs_spec.rb +1 -1
  73. data/spec/rails_best_practices/core/controllers_spec.rb +1 -1
  74. data/spec/rails_best_practices/core/error_spec.rb +21 -21
  75. data/spec/rails_best_practices/core/except_methods_spec.rb +7 -7
  76. data/spec/rails_best_practices/core/gems_spec.rb +4 -4
  77. data/spec/rails_best_practices/core/helpers_spec.rb +1 -1
  78. data/spec/rails_best_practices/core/klasses_spec.rb +3 -3
  79. data/spec/rails_best_practices/core/mailers_spec.rb +1 -1
  80. data/spec/rails_best_practices/core/methods_spec.rb +6 -6
  81. data/spec/rails_best_practices/core/model_associations_spec.rb +10 -6
  82. data/spec/rails_best_practices/core/model_attributes_spec.rb +4 -4
  83. data/spec/rails_best_practices/core/models_spec.rb +1 -1
  84. data/spec/rails_best_practices/core/modules_spec.rb +5 -5
  85. data/spec/rails_best_practices/core/routes_spec.rb +5 -5
  86. data/spec/rails_best_practices/core/runner_spec.rb +9 -7
  87. data/spec/rails_best_practices/core_ext/erubis_spec.rb +10 -10
  88. data/spec/rails_best_practices/inline_disables/inline_disable_spec.rb +62 -0
  89. data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +11 -10
  90. data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +6 -6
  91. data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +6 -6
  92. data/spec/rails_best_practices/prepares/config_prepare_spec.rb +2 -2
  93. data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +18 -10
  94. data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +2 -2
  95. data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +3 -3
  96. data/spec/rails_best_practices/prepares/initializer_prepare_spec.rb +3 -3
  97. data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +2 -2
  98. data/spec/rails_best_practices/prepares/model_prepare_spec.rb +79 -43
  99. data/spec/rails_best_practices/prepares/route_prepare_spec.rb +138 -77
  100. data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +2 -2
  101. data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +18 -12
  102. data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +28 -22
  103. data/spec/rails_best_practices/reviews/check_destroy_return_value_review_spec.rb +15 -13
  104. data/spec/rails_best_practices/reviews/check_save_return_value_review_spec.rb +31 -21
  105. data/spec/rails_best_practices/reviews/default_scope_is_evil_review_spec.rb +6 -6
  106. data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +5 -5
  107. data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +9 -9
  108. data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +7 -7
  109. data/spec/rails_best_practices/reviews/keep_finders_on_their_own_model_review_spec.rb +9 -9
  110. data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +21 -14
  111. data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +6 -6
  112. data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +11 -6
  113. data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +26 -16
  114. data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +7 -7
  115. data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +9 -7
  116. data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +9 -9
  117. data/spec/rails_best_practices/reviews/not_rescue_exception_review_spec.rb +9 -9
  118. data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +5 -5
  119. data/spec/rails_best_practices/reviews/not_use_time_ago_in_words_review_spec.rb +7 -7
  120. data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +7 -7
  121. data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +24 -19
  122. data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +6 -6
  123. data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +44 -31
  124. data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +17 -12
  125. data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +46 -44
  126. data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +10 -8
  127. data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +16 -10
  128. data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +54 -31
  129. data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +9 -9
  130. data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +13 -13
  131. data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +11 -9
  132. data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +7 -7
  133. data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +21 -17
  134. data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +6 -6
  135. data/spec/rails_best_practices/reviews/use_parentheses_in_method_def_review_spec.rb +9 -7
  136. data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +31 -24
  137. data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +15 -11
  138. data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +14 -14
  139. data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +10 -8
  140. metadata +12 -7
@@ -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: AlwaysAddDbIndexReview.new) }
8
+ let(:runner) { Core::Runner.new(reviews: described_class.new) }
9
9
 
10
- it 'should always add db index' do
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 'should always add db index with polymorphic foreign key' do
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('db/schema.rb:2 - always add db index (versions => [versioned_id, versioned_type])')
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 'should always add db index with polymorphic foreign key and _type is defined before _id' do
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('db/schema.rb:2 - always add db index (versions => [versioned_id, versioned_type])')
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 'should always add db index with single index, but without polymorphic foreign key' do
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('db/schema.rb:2 - always add db index (taggings => [taggable_id, taggable_type])')
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 'should always add db index with polymorphic foreign key, but without single index' do
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 'should always add db index only _id without non related _type column' do
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 'should not always add db index with column has no id' do
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 'should not always add db index with add_index' do
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 'should not always add db index with t.index' do
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 'should not always add db index with only _type column' do
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 'should not always add db index with multi-column index' do
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 'should not always add db index if there is an index contains more columns' do
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 'should not always add db index if two indexes for polymorphic association' do
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 'should not always add db index if table does not exist' do
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 'should always add db index if association_name is different to foreign_key' do
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 'should not check ignored files' do
282
- runner = Core::Runner.new(reviews: AlwaysAddDbIndexReview.new(ignored_files: /db\/schema/))
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 'should detect index option in column creation' do
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: CheckDestroyReturnValueReview.new) }
8
+ let(:runner) { Core::Runner.new(reviews: described_class.new) }
9
9
 
10
10
  describe 'check_destroy_return_value' do
11
- it 'should warn you if you fail to check the destroy return value' do
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("app/helpers/posts_helper.rb:5 - check 'destroy' return value or use 'destroy!'")
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 'should allow destroy return value if assigned to a var' do
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 'should allow destroy return value used in if' do
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 'should allow destroy return value used in elsif' do
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 'should allow destroy return value used in unless' do
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 'should allow destroy return value used in if_mod' do
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 'should allow destroy return value used in unless_mod' do
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 'should allow destroy return value used in unless with &&' do
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 'should allow destroy!' do
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 'should not check ignored files' do
139
- runner = Core::Runner.new(reviews: CheckDestroyReturnValueReview.new(ignored_files: /helpers/))
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: CheckSaveReturnValueReview.new) }
8
+ let(:runner) { Core::Runner.new(reviews: described_class.new) }
9
9
 
10
10
  describe 'check_save_return_value' do
11
- it 'should warn you if you fail to check save return value' do
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("app/helpers/posts_helper.rb:5 - check 'save' return value or use 'save!'")
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 'should allow save return value assigned to var' do
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 'should allow save return value used in if' do
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 'should allow save return value used in elsif' do
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 'should allow save return value used in unless' do
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 'should allow save return value used in if_mod' do
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 'should allow save return value used in unless_mod' do
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 'should allow save return value used in unless with &&' do
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 'should allow save!' do
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 'should warn you if you fail to check update_attributes return value' do
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("app/helpers/posts_helper.rb:2 - check 'update_attributes' return value or use 'update_attributes!'")
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 'should allow update_attributes if return value is checked' do
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("app/controllers/posts_controller.rb:12 - check 'update_attributes' return value or use 'update_attributes!'")
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 'should warn you if you use create which is always unsafe' do
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("app/helpers/posts_helper.rb:2 - use 'create!' instead of 'create' as the latter may not always save")
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 'should warn you if you use create with a block which is always unsafe' do
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("app/helpers/blog/posts_helper.rb:4 - use 'create!' instead of 'create' as the latter may not always save")
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 'should not check ignored files' do
245
- runner = Core::Runner.new(reviews: CheckSaveReturnValueReview.new(ignored_files: /helpers/))
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|
@@ -5,9 +5,9 @@ require 'spec_helper'
5
5
  module RailsBestPractices
6
6
  module Reviews
7
7
  describe DefaultScopeIsEvilReview do
8
- let(:runner) { Core::Runner.new(reviews: DefaultScopeIsEvilReview.new) }
8
+ let(:runner) { Core::Runner.new(reviews: described_class.new) }
9
9
 
10
- it 'should detect default_scope with -> syntax' do
10
+ it 'detects default_scope with -> syntax' do
11
11
  content = <<-EOF
12
12
  class User < ActiveRecord::Base
13
13
  default_scope -> { order('created_at desc') }
@@ -18,7 +18,7 @@ module RailsBestPractices
18
18
  expect(runner.errors[0].to_s).to eq('app/models/user.rb:2 - default_scope is evil')
19
19
  end
20
20
 
21
- it 'should detect default_scope with old syntax' do
21
+ it 'detects default_scope with old syntax' do
22
22
  content = <<-EOF
23
23
  class User < ActiveRecord::Base
24
24
  default_scope order('created_at desc')
@@ -29,7 +29,7 @@ module RailsBestPractices
29
29
  expect(runner.errors[0].to_s).to eq('app/models/user.rb:2 - default_scope is evil')
30
30
  end
31
31
 
32
- it 'should not detect default_scope' do
32
+ it 'does not detect default_scope' do
33
33
  content = <<-EOF
34
34
  class User < ActiveRecord::Base
35
35
  scope :default, -> { order('created_at desc') }
@@ -39,8 +39,8 @@ module RailsBestPractices
39
39
  expect(runner.errors.size).to eq(0)
40
40
  end
41
41
 
42
- it 'should not check ignored files' do
43
- runner = Core::Runner.new(reviews: DefaultScopeIsEvilReview.new(ignored_files: /user/))
42
+ it 'does not check ignored files' do
43
+ runner = Core::Runner.new(reviews: described_class.new(ignored_files: /user/))
44
44
  content = <<-EOF
45
45
  class User < ActiveRecord::Base
46
46
  default_scope -> { order('created_at desc') }
@@ -5,9 +5,9 @@ require 'spec_helper'
5
5
  module RailsBestPractices
6
6
  module Reviews
7
7
  describe DryBundlerInCapistranoReview do
8
- let(:runner) { Core::Runner.new(reviews: DryBundlerInCapistranoReview.new) }
8
+ let(:runner) { Core::Runner.new(reviews: described_class.new) }
9
9
 
10
- it 'should dry bundler in capistrno' do
10
+ it 'dries bundler in capistrno' do
11
11
  content = <<-EOF
12
12
  namespace :bundler do
13
13
  task :create_symlink, roles: :app do
@@ -29,7 +29,7 @@ module RailsBestPractices
29
29
  expect(runner.errors[0].to_s).to eq('config/deploy.rb:1 - dry bundler in capistrano')
30
30
  end
31
31
 
32
- it 'should not dry bundler in capistrano' do
32
+ it 'does not dry bundler in capistrano' do
33
33
  content = <<-EOF
34
34
  require 'bundler/capistrano'
35
35
  EOF
@@ -37,8 +37,8 @@ module RailsBestPractices
37
37
  expect(runner.errors.size).to eq(0)
38
38
  end
39
39
 
40
- it 'should not check ignored files' do
41
- runner = Core::Runner.new(reviews: DryBundlerInCapistranoReview.new(ignored_files: /deploy\.rb/))
40
+ it 'does not check ignored files' do
41
+ runner = Core::Runner.new(reviews: described_class.new(ignored_files: /deploy\.rb/))
42
42
  content = <<-EOF
43
43
  namespace :bundler do
44
44
  task :create_symlink, roles: :app do
@@ -5,9 +5,9 @@ require 'spec_helper'
5
5
  module RailsBestPractices
6
6
  module Reviews
7
7
  describe HashSyntaxReview do
8
- let(:runner) { Core::Runner.new(reviews: HashSyntaxReview.new) }
8
+ let(:runner) { Core::Runner.new(reviews: described_class.new) }
9
9
 
10
- it 'should find 1.8 Hash with symbol' do
10
+ it 'finds 1.8 Hash with symbol' do
11
11
  content = <<-EOF
12
12
  class User < ActiveRecord::Base
13
13
  CONST = { :foo => :bar }
@@ -18,7 +18,7 @@ module RailsBestPractices
18
18
  expect(runner.errors[0].to_s).to eq('app/models/user.rb:2 - change Hash Syntax to 1.9')
19
19
  end
20
20
 
21
- it 'should not find 1.8 Hash with string' do
21
+ it 'does not find 1.8 Hash with string' do
22
22
  content = <<-EOF
23
23
  class User < ActiveRecord::Base
24
24
  CONST = { "foo" => "bar" }
@@ -28,7 +28,7 @@ module RailsBestPractices
28
28
  expect(runner.errors.size).to eq(0)
29
29
  end
30
30
 
31
- it 'should not alert on 1.9 Syntax' do
31
+ it 'does not alert on 1.9 Syntax' do
32
32
  content = <<-EOF
33
33
  class User < ActiveRecord::Base
34
34
  CONST = { foo: :bar }
@@ -38,7 +38,7 @@ module RailsBestPractices
38
38
  expect(runner.errors.size).to eq(0)
39
39
  end
40
40
 
41
- it 'should ignore haml_out' do
41
+ it 'ignores haml_out' do
42
42
  content = <<~EOF
43
43
  %div{ class: "foo1" }
44
44
  .div{ class: "foo2" }
@@ -48,7 +48,7 @@ module RailsBestPractices
48
48
  expect(runner.errors.size).to eq(0)
49
49
  end
50
50
 
51
- it 'should not consider hash with array key' do
51
+ it 'does not consider hash with array key' do
52
52
  content = <<-EOF
53
53
  transition [:unverified, :verified] => :deleted
54
54
  EOF
@@ -56,7 +56,7 @@ module RailsBestPractices
56
56
  expect(runner.errors.size).to eq(0)
57
57
  end
58
58
 
59
- it 'should not consider hash with charaters not valid for symbol' do
59
+ it 'does not consider hash with charaters not valid for symbol' do
60
60
  content = <<-EOF
61
61
  receiver.stub(:` => 'Error')
62
62
  EOF
@@ -64,8 +64,8 @@ module RailsBestPractices
64
64
  expect(runner.errors.size).to eq(0)
65
65
  end
66
66
 
67
- it 'should not check ignored files' do
68
- runner = Core::Runner.new(reviews: HashSyntaxReview.new(ignored_files: /user/))
67
+ it 'does not check ignored files' do
68
+ runner = Core::Runner.new(reviews: described_class.new(ignored_files: /user/))
69
69
  content = <<-EOF
70
70
  class User < ActiveRecord::Base
71
71
  CONST = { :foo => :bar }
@@ -5,10 +5,10 @@ require 'spec_helper'
5
5
  module RailsBestPractices
6
6
  module Reviews
7
7
  describe IsolateSeedDataReview do
8
- let(:runner) { Core::Runner.new(reviews: IsolateSeedDataReview.new) }
8
+ let(:runner) { Core::Runner.new(reviews: described_class.new) }
9
9
 
10
10
  context 'create' do
11
- it 'should isolate seed data' do
11
+ it 'isolates seed data' do
12
12
  content = <<-EOF
13
13
  class CreateRoles < ActiveRecord::Migration
14
14
  def self.up
@@ -33,7 +33,7 @@ module RailsBestPractices
33
33
  end
34
34
 
35
35
  context 'new and save' do
36
- it 'should isolate seed data for local variable' do
36
+ it 'isolates seed data for local variable' do
37
37
  content = <<-EOF
38
38
  class CreateRoles < ActiveRecord::Migration
39
39
  def self.up
@@ -57,7 +57,7 @@ module RailsBestPractices
57
57
  expect(runner.errors[0].to_s).to eq('db/migrate/20090818130258_create_roles.rb:9 - isolate seed data')
58
58
  end
59
59
 
60
- it 'should isolate seed data for instance variable' do
60
+ it 'isolates seed data for instance variable' do
61
61
  content = <<-EOF
62
62
  class CreateRoles < ActiveRecord::Migration
63
63
  def self.up
@@ -82,7 +82,7 @@ module RailsBestPractices
82
82
  end
83
83
  end
84
84
 
85
- it 'should not isolate seed data without data insert' do
85
+ it 'does not isolate seed data without data insert' do
86
86
  content = <<-EOF
87
87
  class CreateRoles < ActiveRecord::Migration
88
88
  def self.up
@@ -100,8 +100,8 @@ module RailsBestPractices
100
100
  expect(runner.errors.size).to eq(0)
101
101
  end
102
102
 
103
- it 'should not check ignored files' do
104
- runner = Core::Runner.new(reviews: IsolateSeedDataReview.new(ignored_files: /create_roles/))
103
+ it 'does not check ignored files' do
104
+ runner = Core::Runner.new(reviews: described_class.new(ignored_files: /create_roles/))
105
105
  content = <<-EOF
106
106
  class CreateRoles < ActiveRecord::Migration
107
107
  def self.up