rails_best_practices 1.18.1 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +4 -1
- data/Gemfile +3 -3
- data/README.md +1 -1
- data/Rakefile +1 -4
- data/lib/rails_best_practices/analyzer.rb +3 -3
- data/lib/rails_best_practices/core/routes.rb +1 -1
- data/lib/rails_best_practices/lexicals/remove_tab_check.rb +2 -2
- data/lib/rails_best_practices/lexicals/remove_trailing_whitespace_check.rb +2 -2
- data/lib/rails_best_practices/prepares/route_prepare.rb +5 -0
- data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +2 -2
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +2 -2
- data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +2 -2
- data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +2 -2
- data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +2 -2
- data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +2 -2
- data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +2 -2
- data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_code_into_model_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +2 -2
- data/lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb +2 -2
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +2 -2
- data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +2 -2
- data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +3 -12
- data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +2 -2
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +2 -47
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +2 -2
- data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +2 -2
- data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +2 -2
- data/lib/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review.rb +2 -2
- data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +15 -6
- data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +2 -2
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_model_association_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +3 -18
- data/lib/rails_best_practices/reviews/use_observer_review.rb +2 -13
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_scope_access_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -2
- data/lib/rails_best_practices/version.rb +1 -1
- data/rails_best_practices.gemspec +2 -2
- data/spec/rails_best_practices/analyzer_spec.rb +1 -1
- data/spec/rails_best_practices/prepares/route_prepare_spec.rb +338 -586
- data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +59 -140
- data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +26 -69
- data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +44 -153
- data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +2 -2
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +21 -0
- data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +160 -272
- data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +76 -209
- data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +43 -110
- data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +4 -4
- metadata +5 -23
- data/.rubocop.yml +0 -1
- data/.rubocop_todo.yml +0 -382
- data/install_supported_rubies.sh +0 -10
- data/rake_rubies.sh +0 -9
@@ -11,142 +11,10 @@ module RailsBestPractices
|
|
11
11
|
allow(Dir).to receive(:entries).with("./app/views/project_mailer").and_return(entry_files)
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
content = <<-EOF
|
14
|
+
before do
|
15
|
+
content = <<-EOF
|
17
16
|
GEM
|
18
|
-
remote:
|
19
|
-
specs:
|
20
|
-
rails (2.3.14)
|
21
|
-
actionmailer (= 2.3.14)
|
22
|
-
actionpack (= 2.3.14)
|
23
|
-
activerecord (= 2.3.14)
|
24
|
-
activeresource (= 2.3.14)
|
25
|
-
activesupport (= 2.3.14)
|
26
|
-
bundler (~> 1.0)
|
27
|
-
railties (= 2.3.14)
|
28
|
-
EOF
|
29
|
-
runner.prepare('Gemfile.lock', content)
|
30
|
-
end
|
31
|
-
|
32
|
-
context "project_mailer" do
|
33
|
-
let(:content) {
|
34
|
-
<<-EOF
|
35
|
-
class ProjectMailer < ActionMailer::Base
|
36
|
-
def send_email(email)
|
37
|
-
receiver email.receiver
|
38
|
-
from email.from
|
39
|
-
recipients email.recipients
|
40
|
-
sent_on Time.now
|
41
|
-
body email: email
|
42
|
-
end
|
43
|
-
end
|
44
|
-
EOF
|
45
|
-
}
|
46
|
-
|
47
|
-
context "erb" do
|
48
|
-
it "should use mulipart/alternative as content_type of email" do
|
49
|
-
mock_email_files(["send_email.text.html.erb"])
|
50
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
51
|
-
expect(runner.errors.size).to eq(1)
|
52
|
-
expect(runner.errors[0].to_s).to eq("app/mailers/project_mailer.rb:2 - use multipart/alternative as content_type of email")
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should not use multiple/alternative as content_type of email when only plain text" do
|
56
|
-
mock_email_files(["send_email.text.plain.erb"])
|
57
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
58
|
-
expect(runner.errors.size).to eq(0)
|
59
|
-
end
|
60
|
-
|
61
|
-
it "should not use multipart/alternative as content_type of email" do
|
62
|
-
mock_email_files(["send_email.text.plain.erb", "send_email.text.html.erb"])
|
63
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
64
|
-
expect(runner.errors.size).to eq(0)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
context "haml" do
|
69
|
-
it "should use mulipart/alternative as content_type of email" do
|
70
|
-
mock_email_files(["send_email.text.html.haml"])
|
71
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
72
|
-
expect(runner.errors.size).to eq(1)
|
73
|
-
expect(runner.errors[0].to_s).to eq("app/mailers/project_mailer.rb:2 - use multipart/alternative as content_type of email")
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should not use multiple/alternative as content_type of email when only plain text" do
|
77
|
-
mock_email_files(["send_email.text.plain.haml"])
|
78
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
79
|
-
expect(runner.errors.size).to eq(0)
|
80
|
-
end
|
81
|
-
|
82
|
-
it "should not use multipart/alternative as content_type of email" do
|
83
|
-
mock_email_files(["send_email.text.plain.haml", "send_email.text.html.haml"])
|
84
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
85
|
-
expect(runner.errors.size).to eq(0)
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context "slim" do
|
90
|
-
it "should use mulipart/alternative as content_type of email" do
|
91
|
-
mock_email_files(["send_email.text.html.slim"])
|
92
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
93
|
-
expect(runner.errors.size).to eq(1)
|
94
|
-
expect(runner.errors[0].to_s).to eq("app/mailers/project_mailer.rb:2 - use multipart/alternative as content_type of email")
|
95
|
-
end
|
96
|
-
|
97
|
-
it "should not use multiple/alternative as content_type of email when only plain text" do
|
98
|
-
mock_email_files(["send_email.text.plain.slim"])
|
99
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
100
|
-
expect(runner.errors.size).to eq(0)
|
101
|
-
end
|
102
|
-
|
103
|
-
it "should not use multipart/alternative as content_type of email" do
|
104
|
-
mock_email_files(["send_email.text.plain.slim", "send_email.text.html.slim"])
|
105
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
106
|
-
expect(runner.errors.size).to eq(0)
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
context "rhtml" do
|
111
|
-
it "should use mulipart/alternative as content_type of email" do
|
112
|
-
mock_email_files(["send_email.text.html.rhtml"])
|
113
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
114
|
-
expect(runner.errors.size).to eq(1)
|
115
|
-
expect(runner.errors[0].to_s).to eq("app/mailers/project_mailer.rb:2 - use multipart/alternative as content_type of email")
|
116
|
-
end
|
117
|
-
|
118
|
-
it "should not use multiple/alternative as content_type of email when only plain text" do
|
119
|
-
mock_email_files(["send_email.text.plain.rhtml"])
|
120
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
121
|
-
expect(runner.errors.size).to eq(0)
|
122
|
-
end
|
123
|
-
|
124
|
-
it "should not use multipart/alternative as content_type of email" do
|
125
|
-
mock_email_files(["send_email.text.plain.rhtml", "send_email.text.html.rhtml"])
|
126
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
127
|
-
expect(runner.errors.size).to eq(0)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should not use mulipart/alternative as content_type of email for non deliver method" do
|
133
|
-
content =<<-EOF
|
134
|
-
class ProjectMailer < ActionMailer::Base
|
135
|
-
def no_deliver
|
136
|
-
end
|
137
|
-
end
|
138
|
-
EOF
|
139
|
-
mock_email_files([])
|
140
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
141
|
-
expect(runner.errors.size).to eq(0)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
context "rails3" do
|
146
|
-
before do
|
147
|
-
content = <<-EOF
|
148
|
-
GEM
|
149
|
-
remote: http://rubygems.org
|
17
|
+
remote: https://rubygems.org
|
150
18
|
specs:
|
151
19
|
rails (3.2.13)
|
152
20
|
actionmailer (= 3.2.13)
|
@@ -156,98 +24,97 @@ GEM
|
|
156
24
|
activesupport (= 3.2.13)
|
157
25
|
bundler (~> 1.0)
|
158
26
|
railties (= 3.2.13)
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
context "project_mailer" do
|
164
|
-
let(:content) {
|
165
|
-
<<-EOF
|
166
|
-
class ProjectMailer < ActionMailer::Base
|
167
|
-
def send_email(email)
|
168
|
-
receiver email.receiver
|
169
|
-
from email.from
|
170
|
-
recipients email.recipients
|
171
|
-
sent_on Time.now
|
172
|
-
body email: email
|
173
|
-
end
|
174
|
-
end
|
175
|
-
EOF
|
176
|
-
}
|
177
|
-
|
178
|
-
context "erb" do
|
179
|
-
it "should use mulipart/alternative as content_type of email" do
|
180
|
-
mock_email_files(["send_email.html.erb"])
|
181
|
-
runner.review('app/mailers/project_mailer.rb', content)
|
182
|
-
expect(runner.errors.size).to eq(1)
|
183
|
-
expect(runner.errors[0].to_s).to eq("app/mailers/project_mailer.rb:2 - use multipart/alternative as content_type of email")
|
184
|
-
end
|
27
|
+
EOF
|
28
|
+
runner.prepare('Gemfile.lock', content)
|
29
|
+
end
|
185
30
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
31
|
+
context "project_mailer" do
|
32
|
+
let(:content) {
|
33
|
+
<<-EOF
|
34
|
+
class ProjectMailer < ActionMailer::Base
|
35
|
+
def send_email(email)
|
36
|
+
receiver email.receiver
|
37
|
+
from email.from
|
38
|
+
recipients email.recipients
|
39
|
+
sent_on Time.now
|
40
|
+
body email: email
|
190
41
|
end
|
42
|
+
end
|
43
|
+
EOF
|
44
|
+
}
|
191
45
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
46
|
+
context "erb" do
|
47
|
+
it "should use mulipart/alternative as content_type of email" do
|
48
|
+
mock_email_files(["send_email.html.erb"])
|
49
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
50
|
+
expect(runner.errors.size).to eq(1)
|
51
|
+
expect(runner.errors[0].to_s).to eq("app/mailers/project_mailer.rb:2 - use multipart/alternative as content_type of email")
|
197
52
|
end
|
198
53
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
expect(runner.errors[0].to_s).to eq("app/mailers/project_mailer.rb:2 - use multipart/alternative as content_type of email")
|
205
|
-
end
|
54
|
+
it "should not use multiple/alternative as content_type of email when only plain text" do
|
55
|
+
mock_email_files(["send_email.text.erb"])
|
56
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
57
|
+
expect(runner.errors.size).to eq(0)
|
58
|
+
end
|
206
59
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
60
|
+
it "should not use multipart/alternative as content_type of email" do
|
61
|
+
mock_email_files(["send_email.text.erb", "send_email.html.erb"])
|
62
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
63
|
+
expect(runner.errors.size).to eq(0)
|
64
|
+
end
|
65
|
+
end
|
212
66
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
67
|
+
context "haml" do
|
68
|
+
it "should use mulipart/alternative as content_type of email" do
|
69
|
+
mock_email_files(["send_email.html.haml"])
|
70
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
71
|
+
expect(runner.errors.size).to eq(1)
|
72
|
+
expect(runner.errors[0].to_s).to eq("app/mailers/project_mailer.rb:2 - use multipart/alternative as content_type of email")
|
73
|
+
end
|
218
74
|
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
75
|
+
it "should not use multiple/alternative as content_type of email when only plain text" do
|
76
|
+
mock_email_files(["send_email.text.haml"])
|
77
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
78
|
+
expect(runner.errors.size).to eq(0)
|
79
|
+
end
|
224
80
|
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
end
|
81
|
+
it "should not use multipart/alternative as content_type of email" do
|
82
|
+
mock_email_files(["send_email.html.haml", "send_email.text.haml"])
|
83
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
84
|
+
expect(runner.errors.size).to eq(0)
|
230
85
|
end
|
231
86
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
87
|
+
it "should not use multipart/alternative as content_type of email with text locale" do
|
88
|
+
mock_email_files(["send_email.html.haml", "send_email.de.text.haml"])
|
89
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
90
|
+
expect(runner.errors.size).to eq(0)
|
91
|
+
end
|
237
92
|
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
93
|
+
it "should not use multipart/alternative as content_type of email with html locale" do
|
94
|
+
mock_email_files(["send_email.de.html.haml", "send_email.text.haml"])
|
95
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
96
|
+
expect(runner.errors.size).to eq(0)
|
242
97
|
end
|
98
|
+
end
|
243
99
|
|
244
|
-
|
245
|
-
|
246
|
-
mock_email_files(["send_email.html.haml"])
|
100
|
+
context "haml/erb mix" do
|
101
|
+
it "should not suggest using multipart/alternative when mixing html.haml and text.erb" do
|
102
|
+
mock_email_files(["send_email.html.haml", "send_email.text.erb"])
|
103
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
104
|
+
expect(runner.errors.size).to eq(0)
|
105
|
+
|
106
|
+
mock_email_files(["send_email.html.erb", "send_email.text.haml"])
|
247
107
|
runner.review('app/mailers/project_mailer.rb', content)
|
248
108
|
expect(runner.errors.size).to eq(0)
|
249
109
|
end
|
250
110
|
end
|
111
|
+
|
112
|
+
it "should not check ignored files" do
|
113
|
+
runner = Core::Runner.new(reviews: UseMultipartAlternativeAsContentTypeOfEmailReview.new(ignored_files: /project_mailer/))
|
114
|
+
mock_email_files(["send_email.html.haml"])
|
115
|
+
runner.review('app/mailers/project_mailer.rb', content)
|
116
|
+
expect(runner.errors.size).to eq(0)
|
117
|
+
end
|
251
118
|
end
|
252
119
|
end
|
253
120
|
end
|
@@ -13,134 +13,67 @@ module RailsBestPractices
|
|
13
13
|
runner.prepare('app/models/project_mailer.rb', content)
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
after_create :send_create_notification
|
21
|
-
|
22
|
-
private
|
23
|
-
def send_create_notification
|
24
|
-
self.members.each do |member|
|
25
|
-
ProjectMailer.deliver_notification(self, member)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
EOF
|
30
|
-
runner.review('app/models/project.rb', content)
|
31
|
-
expect(runner.errors.size).to eq(1)
|
32
|
-
expect(runner.errors[0].to_s).to eq("app/models/project.rb:5 - use observer")
|
33
|
-
end
|
16
|
+
it "should use observer" do
|
17
|
+
content =<<-EOF
|
18
|
+
class Project < ActiveRecord::Base
|
19
|
+
after_create :send_create_notification
|
34
20
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
def send_create_notification
|
40
|
-
self.members.each do |member|
|
41
|
-
ProjectMailer.deliver_notification(self, member)
|
42
|
-
end
|
21
|
+
private
|
22
|
+
def send_create_notification
|
23
|
+
self.members.each do |member|
|
24
|
+
ProjectMailer.notification(self, member).deliver
|
43
25
|
end
|
44
26
|
end
|
45
|
-
EOF
|
46
|
-
runner.review('app/models/project.rb', content)
|
47
|
-
expect(runner.errors.size).to eq(0)
|
48
27
|
end
|
28
|
+
EOF
|
29
|
+
runner.review('app/models/project.rb', content)
|
30
|
+
expect(runner.errors.size).to eq(1)
|
31
|
+
expect(runner.errors[0].to_s).to eq("app/models/project.rb:5 - use observer")
|
32
|
+
end
|
49
33
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
self.members.each do |member|
|
58
|
-
ProjectMailer.deliver_notification(self, member)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def update_author
|
34
|
+
it "should not use observer without callback" do
|
35
|
+
content =<<-EOF
|
36
|
+
class Project < ActiveRecord::Base
|
37
|
+
private
|
38
|
+
def send_create_notification
|
39
|
+
self.members.each do |member|
|
40
|
+
ProjectMailer.notification(self, member).deliver
|
63
41
|
end
|
64
42
|
end
|
65
|
-
EOF
|
66
|
-
runner.review('app/models/project.rb', content)
|
67
|
-
expect(runner.errors.size).to eq(1)
|
68
|
-
expect(runner.errors[0].to_s).to eq("app/models/project.rb:5 - use observer")
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should not raise when initiate an object in callback" do
|
72
|
-
content =<<-EOF
|
73
|
-
class Project < ActiveRecord::Base
|
74
|
-
after_create ProjectMailer.new
|
75
|
-
end
|
76
|
-
EOF
|
77
|
-
expect { runner.review('app/models/project.rb', content) }.not_to raise_error
|
78
43
|
end
|
44
|
+
EOF
|
45
|
+
runner.review('app/models/project.rb', content)
|
46
|
+
expect(runner.errors.size).to eq(0)
|
79
47
|
end
|
80
48
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
after_create :send_create_notification
|
49
|
+
it "should use observer with two after_create" do
|
50
|
+
content =<<-EOF
|
51
|
+
class Project < ActiveRecord::Base
|
52
|
+
after_create :send_create_notification, :update_author
|
86
53
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
54
|
+
private
|
55
|
+
def send_create_notification
|
56
|
+
self.members.each do |member|
|
57
|
+
ProjectMailer.notification(self, member).deliver
|
92
58
|
end
|
93
59
|
end
|
94
|
-
EOF
|
95
|
-
runner.review('app/models/project.rb', content)
|
96
|
-
expect(runner.errors.size).to eq(1)
|
97
|
-
expect(runner.errors[0].to_s).to eq("app/models/project.rb:5 - use observer")
|
98
|
-
end
|
99
60
|
|
100
|
-
|
101
|
-
content =<<-EOF
|
102
|
-
class Project < ActiveRecord::Base
|
103
|
-
private
|
104
|
-
def send_create_notification
|
105
|
-
self.members.each do |member|
|
106
|
-
ProjectMailer.notification(self, member).deliver
|
107
|
-
end
|
108
|
-
end
|
61
|
+
def update_author
|
109
62
|
end
|
110
|
-
EOF
|
111
|
-
runner.review('app/models/project.rb', content)
|
112
|
-
expect(runner.errors.size).to eq(0)
|
113
|
-
end
|
114
|
-
|
115
|
-
it "should use observer with two after_create" do
|
116
|
-
content =<<-EOF
|
117
|
-
class Project < ActiveRecord::Base
|
118
|
-
after_create :send_create_notification, :update_author
|
119
|
-
|
120
|
-
private
|
121
|
-
def send_create_notification
|
122
|
-
self.members.each do |member|
|
123
|
-
ProjectMailer.notification(self, member).deliver
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
def update_author
|
128
|
-
end
|
129
|
-
end
|
130
|
-
EOF
|
131
|
-
runner.review('app/models/project.rb', content)
|
132
|
-
expect(runner.errors.size).to eq(1)
|
133
|
-
expect(runner.errors[0].to_s).to eq("app/models/project.rb:5 - use observer")
|
134
63
|
end
|
64
|
+
EOF
|
65
|
+
runner.review('app/models/project.rb', content)
|
66
|
+
expect(runner.errors.size).to eq(1)
|
67
|
+
expect(runner.errors[0].to_s).to eq("app/models/project.rb:5 - use observer")
|
68
|
+
end
|
135
69
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
end
|
141
|
-
EOF
|
142
|
-
expect { runner.review('app/models/project.rb', content) }.not_to raise_error
|
70
|
+
it "should not raise when initiate an object in callback" do
|
71
|
+
content =<<-EOF
|
72
|
+
class Project < ActiveRecord::Base
|
73
|
+
after_create ProjectMailer.new
|
143
74
|
end
|
75
|
+
EOF
|
76
|
+
expect { runner.review('app/models/project.rb', content) }.not_to raise_error
|
144
77
|
end
|
145
78
|
end
|
146
79
|
end
|