commontator 4.0.2 → 4.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -5
  3. data/app/assets/stylesheets/commontator/comments.css +16 -5
  4. data/app/assets/stylesheets/commontator/comments.css~ +98 -0
  5. data/app/controllers/commontator/application_controller.rb +6 -3
  6. data/app/controllers/commontator/application_controller.rb~ +30 -0
  7. data/app/controllers/commontator/threads_controller.rb +2 -0
  8. data/app/controllers/commontator/threads_controller.rb~ +44 -0
  9. data/app/helpers/commontator/threads_helper.rb +1 -8
  10. data/app/helpers/commontator/threads_helper.rb~ +11 -0
  11. data/app/mailers/commontator/subscriptions_mailer.rb +2 -4
  12. data/app/mailers/commontator/subscriptions_mailer.rb~ +50 -0
  13. data/app/models/commontator/comment.rb +23 -19
  14. data/app/models/commontator/comment.rb~ +106 -0
  15. data/app/models/commontator/thread.rb +10 -10
  16. data/app/models/commontator/thread.rb~ +124 -0
  17. data/app/views/commontator/comments/_show.html.erb +36 -34
  18. data/app/views/commontator/comments/_show.html.erb~ +47 -0
  19. data/app/views/commontator/comments/_votes.html.erb +6 -2
  20. data/app/views/commontator/comments/_votes.html.erb~ +61 -0
  21. data/app/views/commontator/comments/delete.js.erb +2 -2
  22. data/app/views/commontator/comments/delete.js.erb~ +17 -0
  23. data/app/views/commontator/comments/update.js.erb +2 -2
  24. data/app/views/commontator/comments/update.js.erb~ +7 -0
  25. data/app/views/commontator/subscriptions_mailer/comment_created.html.erb +2 -2
  26. data/app/views/commontator/subscriptions_mailer/comment_created.html.erb~ +6 -0
  27. data/app/views/commontator/threads/_show.html.erb +3 -7
  28. data/app/views/commontator/threads/_show.html.erb~ +58 -0
  29. data/config/initializers/commontator.rb +52 -47
  30. data/config/initializers/commontator.rb~ +176 -0
  31. data/lib/commontator.rb +6 -7
  32. data/lib/commontator.rb~ +61 -0
  33. data/lib/commontator/controller_includes.rb +1 -3
  34. data/lib/commontator/controller_includes.rb~ +22 -0
  35. data/lib/commontator/shared_helper.rb +3 -8
  36. data/lib/commontator/shared_helper.rb~ +37 -0
  37. data/lib/commontator/version.rb +1 -1
  38. data/lib/commontator/version.rb~ +3 -0
  39. data/spec/app/controllers/commontator/comments_controller_spec.rb +64 -45
  40. data/spec/app/controllers/commontator/comments_controller_spec.rb~ +580 -0
  41. data/spec/app/controllers/commontator/subscriptions_controller_spec.rb +3 -3
  42. data/spec/app/controllers/commontator/subscriptions_controller_spec.rb~ +99 -0
  43. data/spec/app/controllers/commontator/threads_controller_spec.rb +15 -9
  44. data/spec/app/controllers/commontator/threads_controller_spec.rb~ +126 -0
  45. data/spec/app/helpers/commontator/application_helper_spec.rb +1 -1
  46. data/spec/app/helpers/commontator/application_helper_spec.rb~ +9 -0
  47. data/spec/app/helpers/commontator/threads_helper_spec.rb +1 -5
  48. data/spec/app/helpers/commontator/threads_helper_spec.rb~ +13 -0
  49. data/spec/app/models/commontator/comment_spec.rb +4 -3
  50. data/spec/app/models/commontator/comment_spec.rb~ +62 -0
  51. data/spec/dummy/config/application.rb +1 -1
  52. data/spec/dummy/config/application.rb~ +27 -0
  53. data/spec/dummy/config/initializers/commontator.rb +67 -55
  54. data/spec/dummy/config/initializers/commontator.rb~ +176 -0
  55. data/spec/dummy/config/initializers/commontator2.rb~ +169 -0
  56. data/spec/dummy/db/test.sqlite3 +0 -0
  57. data/spec/dummy/log/test.log +84489 -0
  58. data/spec/dummy/tmp/cache/assets/test/sprockets/02d4b791eb831cf2057bf4703a1218d1 +0 -0
  59. data/spec/dummy/tmp/cache/assets/test/sprockets/0f196a1a50363b0a076ec6e1ee5417f6 +0 -0
  60. data/spec/dummy/tmp/cache/assets/test/sprockets/a41c8be5379abec3c0d0d98e2f0d5609 +0 -0
  61. data/spec/dummy/tmp/cache/assets/test/sprockets/e1f674c11941d62aac1764ef3a7134e4 +0 -0
  62. data/spec/dummy/tmp/cache/assets/test/sprockets/e85565206c3e5fdf9dfeb367c85557b1 +0 -0
  63. data/spec/lib/commontator/commontable_config_spec.rb +1 -1
  64. data/spec/lib/commontator/commontable_config_spec.rb~ +26 -0
  65. data/spec/lib/commontator/commontator_config_spec.rb +5 -5
  66. data/spec/lib/commontator/commontator_config_spec.rb~ +26 -0
  67. data/spec/lib/commontator_spec.rb +6 -4
  68. data/spec/lib/commontator_spec.rb~ +28 -0
  69. data/spec/test_helper.rb +4 -4
  70. data/spec/test_helper.rb~ +37 -0
  71. metadata +46 -2
@@ -6,16 +6,15 @@ module Commontator
6
6
 
7
7
  # Can be set in initializer only
8
8
  ENGINE_ATTRIBUTES = [
9
- :current_user_method,
9
+ :current_user_proc,
10
10
  :javascript_proc
11
11
  ]
12
12
 
13
13
  # Can be set in initializer or passed as an option to acts_as_commontator
14
14
  COMMONTATOR_ATTRIBUTES = [
15
- :user_missing_name,
16
15
  :user_name_clickable,
17
- :user_email_method,
18
- :user_name_method,
16
+ :user_name_proc,
17
+ :user_email_proc,
19
18
  :user_admin_proc,
20
19
  :subscription_email_enable_proc
21
20
  ]
@@ -27,7 +26,6 @@ module Commontator
27
26
  :comment_create_verb_past,
28
27
  :comment_edit_verb_present,
29
28
  :comment_edit_verb_past,
30
- :commontable_name,
31
29
  :timestamp_format,
32
30
  :admin_can_edit_comments,
33
31
  :auto_subscribe_on_comment,
@@ -37,12 +35,13 @@ module Commontator
37
35
  :can_delete_old_comments,
38
36
  :can_subscribe_to_thread,
39
37
  :can_vote_on_comments,
38
+ :combine_upvotes_and_downvotes,
40
39
  :comments_ordered_by_votes,
41
40
  :closed_threads_are_readable,
42
41
  :deleted_comments_are_visible,
43
- :commontable_id_method,
44
- :can_edit_thread_proc,
45
42
  :can_read_thread_proc,
43
+ :can_edit_thread_proc,
44
+ :commontable_name_proc,
46
45
  :commontable_url_proc,
47
46
  :subscription_email_from_proc,
48
47
  :subscription_email_subject_proc
@@ -0,0 +1,61 @@
1
+ require 'commontator/engine'
2
+ require 'commontator/controller_includes'
3
+
4
+ module Commontator
5
+ # Attributes
6
+
7
+ # Can be set in initializer only
8
+ ENGINE_ATTRIBUTES = [
9
+ :current_user_method,
10
+ :javascript_proc
11
+ ]
12
+
13
+ # Can be set in initializer or passed as an option to acts_as_commontator
14
+ COMMONTATOR_ATTRIBUTES = [
15
+ :user_name_clickable,
16
+ :user_name_proc,
17
+ :user_email_proc,
18
+ :user_admin_proc,
19
+ :subscription_email_enable_proc
20
+ ]
21
+
22
+ # Can be set in initializer or passed as an option to acts_as_commontable
23
+ COMMONTABLE_ATTRIBUTES = [
24
+ :comment_name,
25
+ :comment_create_verb_present,
26
+ :comment_create_verb_past,
27
+ :comment_edit_verb_present,
28
+ :comment_edit_verb_past,
29
+ :timestamp_format,
30
+ :admin_can_edit_comments,
31
+ :auto_subscribe_on_comment,
32
+ :can_edit_own_comments,
33
+ :can_edit_old_comments,
34
+ :can_delete_own_comments,
35
+ :can_delete_old_comments,
36
+ :can_subscribe_to_thread,
37
+ :can_vote_on_comments,
38
+ :combine_upvotes_and_downvotes,
39
+ :comments_ordered_by_votes,
40
+ :closed_threads_are_readable,
41
+ :deleted_comments_are_visible,
42
+ :can_read_thread_proc,
43
+ :can_edit_thread_proc,
44
+ :commontable_name_proc,
45
+ :commontable_url_proc,
46
+ :subscription_email_from_proc,
47
+ :subscription_email_subject_proc
48
+ ]
49
+
50
+ (ENGINE_ATTRIBUTES + COMMONTATOR_ATTRIBUTES + \
51
+ COMMONTABLE_ATTRIBUTES).each do |attribute|
52
+ mattr_accessor attribute
53
+ end
54
+
55
+ def self.configure
56
+ yield self
57
+ end
58
+ end
59
+
60
+ require 'commontator/acts_as_commontator'
61
+ require 'commontator/acts_as_commontable'
@@ -10,9 +10,7 @@ module Commontator
10
10
  protected
11
11
 
12
12
  def commontator_thread_show(commontable)
13
- user = send Commontator.current_user_method
14
- raise SecurityTransgression unless (user.nil? || user.is_commontator)
15
-
13
+ user = Commontator.current_user_proc.call(self)
16
14
  thread = commontable.thread
17
15
  raise SecurityTransgression unless thread.can_be_read_by?(user)
18
16
  thread.mark_as_read_for(user)
@@ -0,0 +1,22 @@
1
+ require 'commontator/shared_helper'
2
+ require 'commontator/security_transgression'
3
+
4
+ module Commontator
5
+ module ControllerIncludes
6
+ def self.included(base)
7
+ base.helper Commontator::SharedHelper
8
+ end
9
+
10
+ protected
11
+
12
+ def commontator_thread_show(commontable)
13
+ user = send Commontator.current_user_proc.call(self)
14
+ thread = commontable.thread
15
+ raise SecurityTransgression unless thread.can_be_read_by?(user)
16
+ thread.mark_as_read_for(user)
17
+ @commontator_thread_show = true
18
+ end
19
+ end
20
+ end
21
+
22
+ ActionController::Base.send :include, Commontator::ControllerIncludes
@@ -1,7 +1,7 @@
1
1
  module Commontator
2
2
  module SharedHelper
3
3
  def commontator_thread(commontable)
4
- user = send(Commontator.current_user_method)
4
+ user = Commontator.current_user_proc.call(self)
5
5
 
6
6
  render(:partial => 'commontator/shared/thread',
7
7
  :locals => {:thread => commontable.thread,
@@ -9,16 +9,11 @@ module Commontator
9
9
  end
10
10
 
11
11
  def commontator_name(user)
12
- return Commontator.user_missing_name if user.nil?
13
- config = user.commontator_config
14
- config.user_name_method.blank? ? config.user_missing_name : \
15
- user.send(config.user_name_method)
12
+ user.commontator_config.user_name_proc.call(user)
16
13
  end
17
14
 
18
15
  def commontator_email(user)
19
- return '' if user.nil?
20
- config = user.commontator_config
21
- config.user_email_method.blank? ? '' : user.send(config.user_email_method)
16
+ user.commontator_config.user_email_proc.call(user)
22
17
  end
23
18
 
24
19
  def commontator_gravatar_url(user, options = {})
@@ -0,0 +1,37 @@
1
+ module Commontator
2
+ module SharedHelper
3
+ def commontator_thread(commontable)
4
+ user = send(Commontator.current_user_method)
5
+
6
+ render(:partial => 'commontator/shared/thread',
7
+ :locals => {:thread => commontable.thread,
8
+ :user => user}).html_safe
9
+ end
10
+
11
+ def commontator_name(user)
12
+ user.commontator_config.user_name_proc.call(user)
13
+ end
14
+
15
+ def commontator_email(user)
16
+ user.commontator_config.user_email_proc.call(user)
17
+ end
18
+
19
+ def commontator_gravatar_url(user, options = {})
20
+ options[:secure] ||= request.ssl?
21
+ options[:size] ||= 50
22
+
23
+ hash = Digest::MD5.hexdigest(commontator_email(user))
24
+ base = options[:secure] ? "s://secure" : "://www"
25
+
26
+ "http#{base}.gravatar.com/avatar/#{hash}?s=#{options[:size]}"
27
+ end
28
+
29
+ def commontator_gravatar_image(user, options = {})
30
+ name = commontator_name(user)
31
+ image_tag(commontator_gravatar_url(user, options),
32
+ { :alt => name,
33
+ :title => name,
34
+ :border => 1 })
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module Commontator
2
- VERSION = "4.0.2"
2
+ VERSION = "4.1.1"
3
3
  end
@@ -0,0 +1,3 @@
1
+ module Commontator
2
+ VERSION = "4.1.0"
3
+ end
@@ -13,7 +13,7 @@ module Commontator
13
13
  @comment.is_votable?.must_equal true
14
14
  end
15
15
 
16
- it 'wont get new unless authorized' do
16
+ it "won't get new unless authorized" do
17
17
  get :new, :thread_id => @thread.id, :use_route => :commontator
18
18
  assert_response 403
19
19
 
@@ -43,7 +43,7 @@ module Commontator
43
43
  assigns(:comment).errors.must_be_empty
44
44
  end
45
45
 
46
- it 'wont create unless authorized' do
46
+ it "won't create unless authorized" do
47
47
  attributes = Hash.new
48
48
  attributes[:body] = 'Something else'
49
49
 
@@ -99,7 +99,7 @@ module Commontator
99
99
  assigns(:comment).thread.must_equal @thread
100
100
  end
101
101
 
102
- it 'wont create if double posting' do
102
+ it "won't create if double posting" do
103
103
  sign_in @user
104
104
  @user.can_read = true
105
105
  attributes = Hash.new
@@ -124,7 +124,7 @@ module Commontator
124
124
  assigns(:comment).errors.wont_be_empty
125
125
  end
126
126
 
127
- it 'wont edit unless authorized' do
127
+ it "won't edit unless authorized" do
128
128
  get :edit, :id => @comment.id, :use_route => :commontator
129
129
  assert_response 403
130
130
 
@@ -174,20 +174,22 @@ module Commontator
174
174
  assigns(:comment).errors.must_be_empty
175
175
  end
176
176
 
177
- it 'wont update unless authorized' do
177
+ it "won't update unless authorized" do
178
178
  attributes = Hash.new
179
179
  attributes[:body] = 'Something else'
180
180
 
181
181
  put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
182
182
  assert_response 403
183
- assigns(:comment).body.must_equal 'Something'
184
- assigns(:comment).editor.must_be_nil
183
+ @comment.reload
184
+ @comment.body.must_equal 'Something'
185
+ @comment.editor.must_be_nil
185
186
 
186
187
  sign_in @user
187
188
  put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
188
189
  assert_response 403
189
- assigns(:comment).body.must_equal 'Something'
190
- assigns(:comment).editor.must_be_nil
190
+ @comment.reload
191
+ @comment.body.must_equal 'Something'
192
+ @comment.editor.must_be_nil
191
193
 
192
194
  user2 = DummyUser.create
193
195
  user2.can_read = true
@@ -196,8 +198,9 @@ module Commontator
196
198
  sign_in user2
197
199
  put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
198
200
  assert_response 403
199
- assigns(:comment).body.must_equal 'Something'
200
- assigns(:comment).editor.must_be_nil
201
+ @comment.reload
202
+ @comment.body.must_equal 'Something'
203
+ @comment.editor.must_be_nil
201
204
 
202
205
  @user.can_read = true
203
206
  @user.can_edit = true
@@ -209,9 +212,9 @@ module Commontator
209
212
  comment2.body = 'Something else'
210
213
  comment2.save!
211
214
  put :update, :id => @comment.id, :comment => attributes, :use_route => :commontator
212
- assert_response 403
213
- assigns(:comment).body.must_equal 'Something'
214
- assigns(:comment).editor.must_be_nil
215
+ @comment.reload
216
+ @comment.body.must_equal 'Something'
217
+ @comment.editor.must_be_nil
215
218
  end
216
219
 
217
220
  it 'must update if authorized' do
@@ -240,16 +243,18 @@ module Commontator
240
243
  assigns(:comment).editor.must_equal @user
241
244
  end
242
245
 
243
- it 'wont delete unless authorized and not deleted' do
246
+ it "won't delete unless authorized and not deleted" do
244
247
  put :delete, :id => @comment.id, :use_route => :commontator
245
248
  assert_response 403
246
- assigns(:comment).is_deleted?.must_equal false
249
+ @comment.reload
250
+ @comment.is_deleted?.must_equal false
247
251
 
248
252
  sign_in @user
249
253
 
250
254
  put :delete, :id => @comment.id, :use_route => :commontator
251
255
  assert_response 403
252
- assigns(:comment).is_deleted?.must_equal false
256
+ @comment.reload
257
+ @comment.is_deleted?.must_equal false
253
258
 
254
259
  @user.can_read = true
255
260
  @comment.delete_by(@user).must_equal true
@@ -265,7 +270,8 @@ module Commontator
265
270
  @comment.undelete_by(@user).must_equal true
266
271
  put :delete, :id => @comment.id, :use_route => :commontator
267
272
  assert_response 403
268
- assigns(:comment).is_deleted?.must_equal false
273
+ @comment.reload
274
+ @comment.is_deleted?.must_equal false
269
275
  end
270
276
 
271
277
  it 'must delete if authorized and not deleted' do
@@ -304,17 +310,19 @@ module Commontator
304
310
  assigns(:comment).editor.must_equal user2
305
311
  end
306
312
 
307
- it 'wont undelete unless authorized and deleted' do
313
+ it "won't undelete unless authorized and deleted" do
308
314
  @comment.delete_by(@user).must_equal true
309
315
  put :undelete, :id => @comment.id, :use_route => :commontator
310
316
  assert_response 403
311
- assigns(:comment).is_deleted?.must_equal true
317
+ @comment.reload
318
+ @comment.is_deleted?.must_equal true
312
319
 
313
320
  sign_in @user
314
321
 
315
322
  put :undelete, :id => @comment.id, :use_route => :commontator
316
323
  assert_response 403
317
- assigns(:comment).is_deleted?.must_equal true
324
+ @comment.reload
325
+ @comment.is_deleted?.must_equal true
318
326
 
319
327
  @user.can_read = true
320
328
  @comment.undelete_by(@user).must_equal true
@@ -329,7 +337,8 @@ module Commontator
329
337
  @comment.delete_by(user2).must_equal true
330
338
  put :undelete, :id => @comment.id, :use_route => :commontator
331
339
  assert_response 403
332
- assigns(:comment).is_deleted?.must_equal true
340
+ @comment.reload
341
+ @comment.is_deleted?.must_equal true
333
342
 
334
343
  comment2 = Comment.new
335
344
  comment2.thread = @thread
@@ -340,7 +349,8 @@ module Commontator
340
349
  @comment.delete_by(@user).must_equal true
341
350
  put :undelete, :id => @comment.id, :use_route => :commontator
342
351
  assert_response 403
343
- assigns(:comment).is_deleted?.must_equal true
352
+ @comment.reload
353
+ @comment.is_deleted?.must_equal true
344
354
  end
345
355
 
346
356
  it 'must undelete if authorized and deleted' do
@@ -377,25 +387,28 @@ module Commontator
377
387
  assigns(:comment).is_deleted?.must_equal false
378
388
  end
379
389
 
380
- it 'wont upvote if not authorized' do
390
+ it "won't upvote unless authorized" do
381
391
  put :upvote, :id => @comment.id, :use_route => :commontator
382
392
  assert_response 403
383
- assigns(:comment).upvotes.must_be_empty
384
- assigns(:comment).downvotes.must_be_empty
393
+ @comment.reload
394
+ @comment.upvotes.must_be_empty
395
+ @comment.downvotes.must_be_empty
385
396
 
386
397
  sign_in @user
387
398
  @user.can_read = true
388
399
  put :upvote, :id => @comment.id, :use_route => :commontator
389
400
  assert_response 403
390
- assigns(:comment).upvotes.must_be_empty
391
- assigns(:comment).downvotes.must_be_empty
401
+ @comment.reload
402
+ @comment.upvotes.must_be_empty
403
+ @comment.downvotes.must_be_empty
392
404
 
393
405
  user2 = DummyUser.create
394
406
  sign_in user2
395
407
  put :upvote, :id => @comment.id, :use_route => :commontator
396
408
  assert_response 403
397
- assigns(:comment).upvotes.must_be_empty
398
- assigns(:comment).downvotes.must_be_empty
409
+ @comment.reload
410
+ @comment.upvotes.must_be_empty
411
+ @comment.downvotes.must_be_empty
399
412
  end
400
413
 
401
414
  it 'must upvote if authorized' do
@@ -421,25 +434,28 @@ module Commontator
421
434
  assigns(:comment).downvotes.must_be_empty
422
435
  end
423
436
 
424
- it 'wont downvote if not authorized' do
437
+ it "won't downvote unless authorized" do
425
438
  put :downvote, :id => @comment.id, :use_route => :commontator
426
439
  assert_response 403
427
- assigns(:comment).upvotes.must_be_empty
428
- assigns(:comment).downvotes.must_be_empty
440
+ @comment.reload
441
+ @comment.upvotes.must_be_empty
442
+ @comment.downvotes.must_be_empty
429
443
 
430
444
  sign_in @user
431
445
  @user.can_read = true
432
446
  put :downvote, :id => @comment.id, :use_route => :commontator
433
447
  assert_response 403
434
- assigns(:comment).upvotes.must_be_empty
435
- assigns(:comment).downvotes.must_be_empty
448
+ @comment.reload
449
+ @comment.upvotes.must_be_empty
450
+ @comment.downvotes.must_be_empty
436
451
 
437
452
  user2 = DummyUser.create
438
453
  sign_in user2
439
454
  put :downvote, :id => @comment.id, :use_route => :commontator
440
455
  assert_response 403
441
- assigns(:comment).upvotes.must_be_empty
442
- assigns(:comment).downvotes.must_be_empty
456
+ @comment.reload
457
+ @comment.upvotes.must_be_empty
458
+ @comment.downvotes.must_be_empty
443
459
  end
444
460
 
445
461
  it 'must downvote if authorized' do
@@ -465,27 +481,30 @@ module Commontator
465
481
  assigns(:comment).downvotes.count.must_equal 1
466
482
  end
467
483
 
468
- it 'wont unvote if not authorized' do
484
+ it "won't unvote unless authorized" do
469
485
  @comment.upvote_from(@user).must_equal true
470
486
 
471
487
  put :unvote, :id => @comment.id, :use_route => :commontator
472
488
  assert_response 403
473
- assigns(:comment).upvotes.count.must_equal 1
474
- assigns(:comment).downvotes.must_be_empty
489
+ @comment.reload
490
+ @comment.upvotes.count.must_equal 1
491
+ @comment.downvotes.must_be_empty
475
492
 
476
493
  sign_in @user
477
494
  @user.can_read = true
478
495
  put :unvote, :id => @comment.id, :use_route => :commontator
479
496
  assert_response 403
480
- assigns(:comment).upvotes.count.must_equal 1
481
- assigns(:comment).downvotes.must_be_empty
497
+ @comment.reload
498
+ @comment.upvotes.count.must_equal 1
499
+ @comment.downvotes.must_be_empty
482
500
 
483
501
  user2 = DummyUser.create
484
502
  sign_in user2
485
503
  put :unvote, :id => @comment.id, :use_route => :commontator
486
504
  assert_response 403
487
- assigns(:comment).upvotes.count.must_equal 1
488
- assigns(:comment).downvotes.must_be_empty
505
+ @comment.reload
506
+ @comment.upvotes.count.must_equal 1
507
+ @comment.downvotes.must_be_empty
489
508
  end
490
509
 
491
510
  it 'must unvote if authorized' do
@@ -511,7 +530,7 @@ module Commontator
511
530
  assigns(:comment).downvotes.must_be_empty
512
531
  end
513
532
 
514
- it 'wont send mail if recipients empty' do
533
+ it "won't send mail if recipients empty" do
515
534
  if defined?(CommentsController::SubscriptionsMailer)
516
535
  CommentsController::SubscriptionsMailer.__send__(:initialize)
517
536
  else