rails_best_practices 1.14.4 → 1.15.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.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +1 -0
  4. data/README.md +26 -6
  5. data/lib/rails_best_practices/core/check.rb +15 -2
  6. data/lib/rails_best_practices/core/klasses.rb +13 -3
  7. data/lib/rails_best_practices/core/model_associations.rb +1 -1
  8. data/lib/rails_best_practices/core/runner.rb +2 -0
  9. data/lib/rails_best_practices/lexicals/long_line_check.rb +1 -1
  10. data/lib/rails_best_practices/prepares/route_prepare.rb +17 -1
  11. data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +2 -2
  12. data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +2 -2
  13. data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +1 -1
  14. data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +1 -1
  15. data/lib/rails_best_practices/reviews/move_code_into_model_review.rb +1 -1
  16. data/lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb +1 -1
  17. data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +1 -1
  18. data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +1 -1
  19. data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +1 -2
  20. data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +1 -1
  21. data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +2 -1
  22. data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +15 -26
  23. data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +4 -2
  24. data/lib/rails_best_practices/version.rb +1 -1
  25. data/spec/rails_best_practices/analyzer_spec.rb +11 -11
  26. data/spec/rails_best_practices/core/check_spec.rb +1 -1
  27. data/spec/rails_best_practices/core/error_spec.rb +6 -6
  28. data/spec/rails_best_practices/core/klasses_spec.rb +26 -2
  29. data/spec/rails_best_practices/core/methods_spec.rb +18 -18
  30. data/spec/rails_best_practices/core/model_associations_spec.rb +6 -6
  31. data/spec/rails_best_practices/core/model_attributes_spec.rb +6 -6
  32. data/spec/rails_best_practices/core/modules_spec.rb +3 -3
  33. data/spec/rails_best_practices/core/routes_spec.rb +4 -4
  34. data/spec/rails_best_practices/core/runner_spec.rb +1 -1
  35. data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +18 -6
  36. data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +18 -5
  37. data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +17 -5
  38. data/spec/rails_best_practices/prepares/config_prepare_spec.rb +1 -1
  39. data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +13 -13
  40. data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +1 -1
  41. data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +2 -2
  42. data/spec/rails_best_practices/prepares/initializer_prepare_spec.rb +2 -2
  43. data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +1 -1
  44. data/spec/rails_best_practices/prepares/model_prepare_spec.rb +44 -44
  45. data/spec/rails_best_practices/prepares/route_prepare_spec.rb +102 -78
  46. data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +6 -6
  47. data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +25 -9
  48. data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +43 -23
  49. data/spec/rails_best_practices/reviews/check_save_return_value_spec.rb +34 -20
  50. data/spec/rails_best_practices/reviews/default_scope_is_evil_review_spec.rb +16 -5
  51. data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +25 -3
  52. data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +18 -7
  53. data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +30 -7
  54. data/spec/rails_best_practices/reviews/keep_finders_on_their_own_model_review_spec.rb +24 -8
  55. data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +24 -12
  56. data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +17 -5
  57. data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +14 -3
  58. data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +24 -13
  59. data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +25 -6
  60. data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +26 -4
  61. data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +31 -18
  62. data/spec/rails_best_practices/reviews/not_rescue_exception_spec.rb +23 -10
  63. data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +34 -7
  64. data/spec/rails_best_practices/reviews/not_use_times_ago_in_words_review_spec.rb +19 -8
  65. data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +33 -19
  66. data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +25 -13
  67. data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +14 -4
  68. data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +91 -23
  69. data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +20 -5
  70. data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +66 -41
  71. data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +28 -4
  72. data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +16 -7
  73. data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +45 -32
  74. data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +20 -9
  75. data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +23 -14
  76. data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +34 -7
  77. data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +21 -6
  78. data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +124 -79
  79. data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +12 -12
  80. data/spec/rails_best_practices/reviews/use_parenthesis_in_method_def_spec.rb +16 -4
  81. data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +39 -27
  82. data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +22 -8
  83. data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +39 -21
  84. data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +66 -7
  85. metadata +36 -37
  86. data/.ruby-gemset +0 -1
@@ -21,9 +21,9 @@ module RailsBestPractices
21
21
  EOF
22
22
  runner.review('db/schema.rb', content)
23
23
  runner.after_review
24
- runner.should have(2).errors
25
- runner.errors[0].to_s.should == "db/schema.rb:2 - always add db index (comments => [post_id])"
26
- runner.errors[1].to_s.should == "db/schema.rb:2 - always add db index (comments => [user_id])"
24
+ expect(runner.errors.size).to eq(2)
25
+ expect(runner.errors[0].to_s).to eq("db/schema.rb:2 - always add db index (comments => [post_id])")
26
+ expect(runner.errors[1].to_s).to eq("db/schema.rb:2 - always add db index (comments => [user_id])")
27
27
  end
28
28
 
29
29
  it "should always add db index with polymorphic foreign key" do
@@ -38,8 +38,8 @@ module RailsBestPractices
38
38
  EOF
39
39
  runner.review('db/schema.rb', content)
40
40
  runner.after_review
41
- runner.should have(1).errors
42
- runner.errors[0].to_s.should == "db/schema.rb:2 - always add db index (versions => [versioned_id, versioned_type])"
41
+ expect(runner.errors.size).to eq(1)
42
+ expect(runner.errors[0].to_s).to eq("db/schema.rb:2 - always add db index (versions => [versioned_id, versioned_type])")
43
43
  end
44
44
 
45
45
  it "should always add db index with polymorphic foreign key and _type is defined before _id" do
@@ -54,8 +54,8 @@ module RailsBestPractices
54
54
  EOF
55
55
  runner.review('db/schema.rb', content)
56
56
  runner.after_review
57
- runner.should have(1).errors
58
- runner.errors[0].to_s.should == "db/schema.rb:2 - always add db index (versions => [versioned_id, versioned_type])"
57
+ expect(runner.errors.size).to eq(1)
58
+ expect(runner.errors[0].to_s).to eq("db/schema.rb:2 - always add db index (versions => [versioned_id, versioned_type])")
59
59
  end
60
60
 
61
61
  it "should always add db index with single index, but without polymorphic foreign key" do
@@ -74,8 +74,8 @@ module RailsBestPractices
74
74
  EOF
75
75
  runner.review('db/schema.rb', content)
76
76
  runner.after_review
77
- runner.should have(1).errors
78
- runner.errors[0].to_s.should == "db/schema.rb:2 - always add db index (taggings => [taggable_id, taggable_type])"
77
+ expect(runner.errors.size).to eq(1)
78
+ expect(runner.errors[0].to_s).to eq("db/schema.rb:2 - always add db index (taggings => [taggable_id, taggable_type])")
79
79
  end
80
80
 
81
81
  it "should always add db index with polymorphic foreign key, but without single index" do
@@ -94,8 +94,8 @@ module RailsBestPractices
94
94
  EOF
95
95
  runner.review('db/schema.rb', content)
96
96
  runner.after_review
97
- runner.should have(1).errors
98
- runner.errors[0].to_s.should == "db/schema.rb:2 - always add db index (taggings => [tag_id])"
97
+ expect(runner.errors.size).to eq(1)
98
+ expect(runner.errors[0].to_s).to eq("db/schema.rb:2 - always add db index (taggings => [tag_id])")
99
99
  end
100
100
 
101
101
  it "should always add db index only _id without non related _type column" do
@@ -113,8 +113,8 @@ module RailsBestPractices
113
113
  EOF
114
114
  runner.review('db/schema.rb', content)
115
115
  runner.after_review
116
- runner.should have(1).errors
117
- runner.errors[0].to_s.should == "db/schema.rb:2 - always add db index (websites => [user_id])"
116
+ expect(runner.errors.size).to eq(1)
117
+ expect(runner.errors[0].to_s).to eq("db/schema.rb:2 - always add db index (websites => [user_id])")
118
118
  end
119
119
 
120
120
  it "should not always add db index with column has no id" do
@@ -128,7 +128,7 @@ module RailsBestPractices
128
128
  EOF
129
129
  runner.review('db/schema.rb', content)
130
130
  runner.after_review
131
- runner.should have(0).errors
131
+ expect(runner.errors.size).to eq(0)
132
132
  end
133
133
 
134
134
  it "should not always add db index with add_index" do
@@ -150,7 +150,7 @@ module RailsBestPractices
150
150
  EOF
151
151
  runner.review('db/schema.rb', content)
152
152
  runner.after_review
153
- runner.should have(0).errors
153
+ expect(runner.errors.size).to eq(0)
154
154
  end
155
155
 
156
156
  it "should not always add db index with t.index" do
@@ -168,7 +168,7 @@ module RailsBestPractices
168
168
  EOF
169
169
  runner.review('db/schema.rb', content)
170
170
  runner.after_review
171
- runner.should have(0).errors
171
+ expect(runner.errors.size).to eq(0)
172
172
  end
173
173
 
174
174
  it "should not always add db index with only _type column" do
@@ -181,7 +181,7 @@ module RailsBestPractices
181
181
  EOF
182
182
  runner.review('db/schema.rb', content)
183
183
  runner.after_review
184
- runner.should have(0).errors
184
+ expect(runner.errors.size).to eq(0)
185
185
  end
186
186
 
187
187
  it "should not always add db index with multi-column index" do
@@ -198,7 +198,7 @@ module RailsBestPractices
198
198
  EOF
199
199
  runner.review('db/schema.rb', content)
200
200
  runner.after_review
201
- runner.should have(0).errors
201
+ expect(runner.errors.size).to eq(0)
202
202
  end
203
203
 
204
204
  it "should not always add db index if there is an index contains more columns" do
@@ -215,7 +215,7 @@ module RailsBestPractices
215
215
  EOF
216
216
  runner.review('db/schema.rb', content)
217
217
  runner.after_review
218
- runner.should have(0).errors
218
+ expect(runner.errors.size).to eq(0)
219
219
  end
220
220
 
221
221
  it "should not always add db index if two indexes for polymorphic association" do
@@ -233,7 +233,7 @@ module RailsBestPractices
233
233
  EOF
234
234
  runner.review('db/schema.rb', content)
235
235
  runner.after_review
236
- runner.should have(0).errors
236
+ expect(runner.errors.size).to eq(0)
237
237
  end
238
238
 
239
239
  it "should not always add db index if table does not exist" do
@@ -246,7 +246,7 @@ module RailsBestPractices
246
246
  EOF
247
247
  runner.review('db/schema.rb', content)
248
248
  runner.after_review
249
- runner.should have(0).errors
249
+ expect(runner.errors.size).to eq(0)
250
250
  end
251
251
 
252
252
  it "should always add db index if association_name is different to foreign_key" do
@@ -272,8 +272,28 @@ module RailsBestPractices
272
272
  EOF
273
273
  runner.review('db/schema.rb', content)
274
274
  runner.after_review
275
- runner.should have(1).errors
276
- runner.errors[0].to_s.should == "db/schema.rb:2 - always add db index (comments => [commentor_id])"
275
+ expect(runner.errors.size).to eq(1)
276
+ expect(runner.errors[0].to_s).to eq("db/schema.rb:2 - always add db index (comments => [commentor_id])")
277
+ end
278
+
279
+ it "should not check ignored files" do
280
+ runner = Core::Runner.new(reviews: AlwaysAddDbIndexReview.new(ignored_files: /db\/schema/))
281
+ content = <<-EOF
282
+ ActiveRecord::Schema.define(version: 20100603080629) do
283
+ create_table "comments", force: true do |t|
284
+ t.string "content"
285
+ t.integer "post_id"
286
+ t.integer "user_id"
287
+ end
288
+ create_table "posts", force: true do |t|
289
+ end
290
+ create_table "users", force: true do |t|
291
+ end
292
+ end
293
+ EOF
294
+ runner.review('db/schema.rb', content)
295
+ runner.after_review
296
+ expect(runner.errors.size).to eq(0)
277
297
  end
278
298
  end
279
299
  end
@@ -16,8 +16,8 @@ module RailsBestPractices
16
16
  end
17
17
  EOF
18
18
  runner.review('app/helpers/posts_helper.rb', content)
19
- runner.should have(1).errors
20
- runner.errors[0].to_s.should == "app/helpers/posts_helper.rb:5 - check 'save' return value or use 'save!'"
19
+ expect(runner.errors.size).to eq(1)
20
+ expect(runner.errors[0].to_s).to eq("app/helpers/posts_helper.rb:5 - check 'save' return value or use 'save!'")
21
21
  end
22
22
 
23
23
  it "should allow save return value assigned to var" do
@@ -30,7 +30,7 @@ module RailsBestPractices
30
30
  end
31
31
  EOF
32
32
  runner.review('app/helpers/posts_helper.rb', content)
33
- runner.should have(0).errors
33
+ expect(runner.errors.size).to eq(0)
34
34
  end
35
35
 
36
36
  it "should allow save return value used in if" do
@@ -47,7 +47,7 @@ module RailsBestPractices
47
47
  end
48
48
  EOF
49
49
  runner.review('app/helpers/posts_helper.rb', content)
50
- runner.should have(0).errors
50
+ expect(runner.errors.size).to eq(0)
51
51
  end
52
52
 
53
53
  it "should allow save return value used in elsif" do
@@ -66,7 +66,7 @@ module RailsBestPractices
66
66
  end
67
67
  EOF
68
68
  runner.review('app/helpers/posts_helper.rb', content)
69
- runner.should have(0).errors
69
+ expect(runner.errors.size).to eq(0)
70
70
  end
71
71
 
72
72
  it "should allow save return value used in unless" do
@@ -78,7 +78,7 @@ module RailsBestPractices
78
78
  end
79
79
  EOF
80
80
  runner.review('app/helpers/posts_helper.rb', content)
81
- runner.should have(0).errors
81
+ expect(runner.errors.size).to eq(0)
82
82
  end
83
83
 
84
84
  it "should allow save return value used in if_mod" do
@@ -91,7 +91,7 @@ module RailsBestPractices
91
91
  end
92
92
  EOF
93
93
  runner.review('app/helpers/posts_helper.rb', content)
94
- expect(runner).to have(0).errors
94
+ expect(runner.errors.size).to eq(0)
95
95
  end
96
96
 
97
97
  it "should allow save return value used in unless_mod" do
@@ -104,7 +104,7 @@ module RailsBestPractices
104
104
  end
105
105
  EOF
106
106
  runner.review('app/helpers/posts_helper.rb', content)
107
- expect(runner).to have(0).errors
107
+ expect(runner.errors.size).to eq(0)
108
108
  end
109
109
 
110
110
  it "should allow save return value used in unless with &&" do
@@ -116,7 +116,7 @@ module RailsBestPractices
116
116
  end
117
117
  EOF
118
118
  runner.review('app/helpers/posts_helper.rb', content)
119
- runner.should have(0).errors
119
+ expect(runner.errors.size).to eq(0)
120
120
  end
121
121
 
122
122
  it "should allow save!" do
@@ -129,7 +129,7 @@ module RailsBestPractices
129
129
  end
130
130
  EOF
131
131
  runner.review('app/helpers/posts_helper.rb', content)
132
- runner.should have(0).errors
132
+ expect(runner.errors.size).to eq(0)
133
133
  end
134
134
 
135
135
  it "should warn you if you fail to check update_attributes return value" do
@@ -139,8 +139,8 @@ module RailsBestPractices
139
139
  end
140
140
  EOF
141
141
  runner.review('app/helpers/posts_helper.rb', content)
142
- runner.should have(1).errors
143
- runner.errors[0].to_s.should == "app/helpers/posts_helper.rb:2 - check 'update_attributes' return value or use 'update_attributes!'"
142
+ expect(runner.errors.size).to eq(1)
143
+ expect(runner.errors[0].to_s).to eq("app/helpers/posts_helper.rb:2 - check 'update_attributes' return value or use 'update_attributes!'")
144
144
  end
145
145
 
146
146
  it "should allow update_attributes if return value is checked" do
@@ -150,7 +150,7 @@ module RailsBestPractices
150
150
  end
151
151
  EOF
152
152
  runner.review('app/helpers/posts_helper.rb', content)
153
- runner.should have(0).errors
153
+ expect(runner.errors.size).to eq(0)
154
154
  end
155
155
 
156
156
  it "is not clever enough to allow update_attributes if value is returned from method" do
@@ -173,8 +173,8 @@ module RailsBestPractices
173
173
  end
174
174
  EOF
175
175
  runner.review('app/controllers/posts_controller.rb', content)
176
- runner.should have(1).errors
177
- runner.errors[0].to_s.should == "app/controllers/posts_controller.rb:12 - check 'update_attributes' return value or use 'update_attributes!'"
176
+ expect(runner.errors.size).to eq(1)
177
+ expect(runner.errors[0].to_s).to eq("app/controllers/posts_controller.rb:12 - check 'update_attributes' return value or use 'update_attributes!'")
178
178
  end
179
179
 
180
180
  it "should warn you if you use create which is always unsafe" do
@@ -192,8 +192,8 @@ module RailsBestPractices
192
192
  end
193
193
  EOF
194
194
  runner.review('app/helpers/posts_helper.rb', content)
195
- runner.should have(1).errors
196
- runner.errors[0].to_s.should == "app/helpers/posts_helper.rb:2 - use 'create!' instead of 'create' as the latter may not always save"
195
+ expect(runner.errors.size).to eq(1)
196
+ 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")
197
197
  end
198
198
 
199
199
  it "should warn you if you use create with a block which is always unsafe" do
@@ -220,8 +220,8 @@ module RailsBestPractices
220
220
  end
221
221
  EOF
222
222
  runner.review('app/helpers/blog/posts_helper.rb', content)
223
- runner.should have(1).errors
224
- runner.errors[0].to_s.should == "app/helpers/blog/posts_helper.rb:4 - use 'create!' instead of 'create' as the latter may not always save"
223
+ expect(runner.errors.size).to eq(1)
224
+ 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")
225
225
  end
226
226
 
227
227
  it "allows create called on non-model classes" do
@@ -235,9 +235,23 @@ module RailsBestPractices
235
235
  end
236
236
  EOF
237
237
  runner.review('app/helpers/posts_helper.rb', content)
238
- runner.errors.map(&:to_s).should == []
238
+ expect(runner.errors.map(&:to_s)).to eq([])
239
239
  end
240
240
  end
241
+
242
+ it "should not check ignored files" do
243
+ runner = Core::Runner.new(reviews: CheckSaveReturnValueReview.new(ignored_files: /helpers/))
244
+ content =<<-EOF
245
+ def my_method
246
+ post = Posts.new do |p|
247
+ p.title = "foo"
248
+ end
249
+ post.save
250
+ end
251
+ EOF
252
+ runner.review('app/helpers/posts_helper.rb', content)
253
+ expect(runner.errors.size).to eq(0)
254
+ end
241
255
  end
242
256
  end
243
257
  end
@@ -12,8 +12,8 @@ module RailsBestPractices
12
12
  end
13
13
  EOF
14
14
  runner.review('app/models/user.rb', content)
15
- runner.should have(1).errors
16
- runner.errors[0].to_s.should == "app/models/user.rb:2 - default_scope is evil"
15
+ expect(runner.errors.size).to eq(1)
16
+ expect(runner.errors[0].to_s).to eq("app/models/user.rb:2 - default_scope is evil")
17
17
  end
18
18
 
19
19
  it "should detect default_scope with old syntax" do
@@ -23,8 +23,8 @@ module RailsBestPractices
23
23
  end
24
24
  EOF
25
25
  runner.review('app/models/user.rb', content)
26
- runner.should have(1).errors
27
- runner.errors[0].to_s.should == "app/models/user.rb:2 - default_scope is evil"
26
+ expect(runner.errors.size).to eq(1)
27
+ expect(runner.errors[0].to_s).to eq("app/models/user.rb:2 - default_scope is evil")
28
28
  end
29
29
 
30
30
  it "should not detect default_scope" do
@@ -34,7 +34,18 @@ module RailsBestPractices
34
34
  end
35
35
  EOF
36
36
  runner.review('app/models/user.rb', content)
37
- runner.should have(0).errors
37
+ expect(runner.errors.size).to eq(0)
38
+ end
39
+
40
+ it "should not check ignored files" do
41
+ runner = Core::Runner.new(reviews: DefaultScopeIsEvilReview.new(ignored_files: /user/))
42
+ content = <<-EOF
43
+ class User < ActiveRecord::Base
44
+ default_scope -> { order('created_at desc') }
45
+ end
46
+ EOF
47
+ runner.review('app/models/user.rb', content)
48
+ expect(runner.errors.size).to eq(0)
38
49
  end
39
50
  end
40
51
  end
@@ -23,8 +23,8 @@ module RailsBestPractices
23
23
  after 'deploy:update_code', 'bundler:bundle_new_release'
24
24
  EOF
25
25
  runner.review('config/deploy.rb', content)
26
- runner.should have(1).errors
27
- runner.errors[0].to_s.should == "config/deploy.rb:1 - dry bundler in capistrano"
26
+ expect(runner.errors.size).to eq(1)
27
+ expect(runner.errors[0].to_s).to eq("config/deploy.rb:1 - dry bundler in capistrano")
28
28
  end
29
29
 
30
30
  it "should not dry bundler in capistrano" do
@@ -32,7 +32,29 @@ module RailsBestPractices
32
32
  require 'bundler/capistrano'
33
33
  EOF
34
34
  runner.review('config/deploy.rb', content)
35
- runner.should have(0).errors
35
+ expect(runner.errors.size).to eq(0)
36
+ end
37
+
38
+ it "should not check ignored files" do
39
+ runner = Core::Runner.new(reviews: DryBundlerInCapistranoReview.new(ignored_files: /deploy\.rb/))
40
+ content = <<-EOF
41
+ namespace :bundler do
42
+ task :create_symlink, roles: :app do
43
+ shared_dir = File.join(shared_path, 'bundle')
44
+ release_dir = File.join(current_release, '.bundle')
45
+ run("mkdir -p \#{shared_dir} && ln -s \#{shared_dir} \#{release_dir}")
46
+ end
47
+
48
+ task :bundle_new_release, roles: :app do
49
+ bundler.create_symlink
50
+ run "cd \#{release_path} && bundle install --without development test"
51
+ end
52
+ end
53
+
54
+ after 'deploy:update_code', 'bundler:bundle_new_release'
55
+ EOF
56
+ runner.review('config/deploy.rb', content)
57
+ expect(runner.errors.size).to eq(0)
36
58
  end
37
59
  end
38
60
  end
@@ -12,8 +12,8 @@ module RailsBestPractices
12
12
  end
13
13
  EOF
14
14
  runner.review('app/models/user.rb', content)
15
- runner.should have(1).errors
16
- runner.errors[0].to_s.should == "app/models/user.rb:2 - change Hash Syntax to 1.9"
15
+ expect(runner.errors.size).to eq(1)
16
+ expect(runner.errors[0].to_s).to eq("app/models/user.rb:2 - change Hash Syntax to 1.9")
17
17
  end
18
18
 
19
19
  it "should not find 1.8 Hash with string" do
@@ -23,7 +23,7 @@ module RailsBestPractices
23
23
  end
24
24
  EOF
25
25
  runner.review('app/models/user.rb', content)
26
- runner.should have(0).errors
26
+ expect(runner.errors.size).to eq(0)
27
27
  end
28
28
 
29
29
  it "should not alert on 1.9 Syntax" do
@@ -33,7 +33,7 @@ module RailsBestPractices
33
33
  end
34
34
  EOF
35
35
  runner.review('app/models/user.rb', content)
36
- runner.should have(0).errors
36
+ expect(runner.errors.size).to eq(0)
37
37
  end
38
38
 
39
39
  it "should ignore haml_out" do
@@ -43,7 +43,7 @@ module RailsBestPractices
43
43
  #div{ class: "foo3" }
44
44
  EOF
45
45
  runner.review('app/views/files/show.html.haml', content)
46
- runner.should have(0).errors
46
+ expect(runner.errors.size).to eq(0)
47
47
  end
48
48
 
49
49
  it "should not consider hash with array key" do
@@ -51,7 +51,7 @@ module RailsBestPractices
51
51
  transition [:unverified, :verified] => :deleted
52
52
  EOF
53
53
  runner.review('app/models/post.rb', content)
54
- runner.should have(0).errors
54
+ expect(runner.errors.size).to eq(0)
55
55
  end
56
56
 
57
57
  it "should not consider hash with charaters not valid for symbol" do
@@ -59,7 +59,18 @@ module RailsBestPractices
59
59
  receiver.stub(:` => 'Error')
60
60
  EOF
61
61
  runner.review('app/models/post.rb', content)
62
- runner.should have(0).errors
62
+ expect(runner.errors.size).to eq(0)
63
+ end
64
+
65
+ it "should not check ignored files" do
66
+ runner = Core::Runner.new(reviews: HashSyntaxReview.new(ignored_files: /user/))
67
+ content =<<-EOF
68
+ class User < ActiveRecord::Base
69
+ CONST = { :foo => :bar }
70
+ end
71
+ EOF
72
+ runner.review('app/models/user.rb', content)
73
+ expect(runner.errors.size).to eq(0)
63
74
  end
64
75
  end
65
76
  end
@@ -25,8 +25,8 @@ module RailsBestPractices
25
25
  end
26
26
  EOF
27
27
  runner.review('db/migrate/20090818130258_create_roles.rb', content)
28
- runner.should have(1).errors
29
- runner.errors[0].to_s.should == "db/migrate/20090818130258_create_roles.rb:8 - isolate seed data"
28
+ expect(runner.errors.size).to eq(1)
29
+ expect(runner.errors[0].to_s).to eq("db/migrate/20090818130258_create_roles.rb:8 - isolate seed data")
30
30
  end
31
31
  end
32
32
 
@@ -51,8 +51,8 @@ module RailsBestPractices
51
51
  end
52
52
  EOF
53
53
  runner.review('db/migrate/20090818130258_create_roles.rb', content)
54
- runner.should have(1).errors
55
- runner.errors[0].to_s.should == "db/migrate/20090818130258_create_roles.rb:9 - isolate seed data"
54
+ expect(runner.errors.size).to eq(1)
55
+ expect(runner.errors[0].to_s).to eq("db/migrate/20090818130258_create_roles.rb:9 - isolate seed data")
56
56
  end
57
57
 
58
58
  it "should isolate seed data for instance variable" do
@@ -75,8 +75,8 @@ module RailsBestPractices
75
75
  end
76
76
  EOF
77
77
  runner.review('db/migrate/20090818130258_create_roles.rb', content)
78
- runner.should have(1).errors
79
- runner.errors[0].to_s.should == "db/migrate/20090818130258_create_roles.rb:9 - isolate seed data"
78
+ expect(runner.errors.size).to eq(1)
79
+ expect(runner.errors[0].to_s).to eq("db/migrate/20090818130258_create_roles.rb:9 - isolate seed data")
80
80
  end
81
81
  end
82
82
 
@@ -95,7 +95,30 @@ module RailsBestPractices
95
95
  end
96
96
  EOF
97
97
  runner.review('db/migrate/20090818130258_create_roles.rb', content)
98
- runner.should have(0).errors
98
+ expect(runner.errors.size).to eq(0)
99
+ end
100
+
101
+ it "should not check ignored files" do
102
+ runner = Core::Runner.new(reviews: IsolateSeedDataReview.new(ignored_files: /create_roles/))
103
+ content = <<-EOF
104
+ class CreateRoles < ActiveRecord::Migration
105
+ def self.up
106
+ create_table "roles", force: true do |t|
107
+ t.string :name
108
+ end
109
+
110
+ ["admin", "author", "editor", "account"].each do |name|
111
+ Role.create!(name: name)
112
+ end
113
+ end
114
+
115
+ def self.down
116
+ drop_table "roles"
117
+ end
118
+ end
119
+ EOF
120
+ runner.review('db/migrate/20090818130258_create_roles.rb', content)
121
+ expect(runner.errors.size).to eq(0)
99
122
  end
100
123
  end
101
124
  end
@@ -17,8 +17,8 @@ module RailsBestPractices
17
17
  end
18
18
  EOF
19
19
  runner.review('app/models/post.rb', content)
20
- runner.should have(1).errors
21
- runner.errors[0].to_s.should == "app/models/post.rb:5 - keep finders on their own model"
20
+ expect(runner.errors.size).to eq(1)
21
+ expect(runner.errors[0].to_s).to eq("app/models/post.rb:5 - keep finders on their own model")
22
22
  end
23
23
 
24
24
  it "should keep finders on thier own model with all method" do
@@ -33,8 +33,8 @@ module RailsBestPractices
33
33
  end
34
34
  EOF
35
35
  runner.review('app/models/post.rb', content)
36
- runner.should have(1).errors
37
- runner.errors[0].to_s.should == "app/models/post.rb:5 - keep finders on their own model"
36
+ expect(runner.errors.size).to eq(1)
37
+ expect(runner.errors[0].to_s).to eq("app/models/post.rb:5 - keep finders on their own model")
38
38
  end
39
39
 
40
40
  it "should not keep finders on thier own model with self finder" do
@@ -49,7 +49,7 @@ module RailsBestPractices
49
49
  end
50
50
  EOF
51
51
  runner.review('app/models/post.rb', content)
52
- runner.should have(0).errors
52
+ expect(runner.errors.size).to eq(0)
53
53
  end
54
54
 
55
55
  it "should not keep finders on thier own model with own finder" do
@@ -64,7 +64,7 @@ module RailsBestPractices
64
64
  end
65
65
  EOF
66
66
  runner.review('app/models/post.rb', content)
67
- runner.should have(0).errors
67
+ expect(runner.errors.size).to eq(0)
68
68
  end
69
69
 
70
70
  it "should not keep finders on their own model without finder" do
@@ -78,7 +78,7 @@ module RailsBestPractices
78
78
  end
79
79
  EOF
80
80
  runner.review('app/models/post.rb', content)
81
- runner.should have(0).errors
81
+ expect(runner.errors.size).to eq(0)
82
82
  end
83
83
 
84
84
  it "should not keep finders on their own model with ruby Array#find" do
@@ -92,7 +92,23 @@ module RailsBestPractices
92
92
  end
93
93
  EOF
94
94
  runner.review('app/models/post.rb', content)
95
- runner.should have(0).errors
95
+ expect(runner.errors.size).to eq(0)
96
+ end
97
+
98
+ it "should not check ignored files" do
99
+ runner = Core::Runner.new(reviews: KeepFindersOnTheirOwnModelReview.new(ignored_files: /app\/models\/post\.rb/))
100
+ content = <<-EOF
101
+ class Post < ActiveRecord::Base
102
+ has_many :comments
103
+
104
+ def find_valid_comments
105
+ self.comment.find(:all, conditions: { is_spam: false },
106
+ limit: 10)
107
+ end
108
+ end
109
+ EOF
110
+ runner.review('app/models/post.rb', content)
111
+ expect(runner.errors.size).to eq(0)
96
112
  end
97
113
  end
98
114
  end