commontator 1.0.6 → 1.1.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.
- data/app/controllers/commontator/application_controller.rb +5 -2
- data/app/controllers/commontator/application_controller.rb~ +5 -3
- data/app/controllers/commontator/comments_controller.rb +1 -4
- data/app/controllers/commontator/comments_controller.rb~ +4 -5
- data/app/controllers/commontator/subscriptions_controller.rb +0 -1
- data/app/controllers/commontator/subscriptions_controller.rb~ +1 -1
- data/app/controllers/commontator/threads_controller.rb +2 -2
- data/app/controllers/commontator/threads_controller.rb~ +3 -4
- data/app/mailers/commontator/subscriptions_mailer.rb +9 -13
- data/app/mailers/commontator/subscriptions_mailer.rb~ +9 -13
- data/app/models/commontator/comment_observer.rb +12 -0
- data/app/models/commontator/comment_observer.rb~ +13 -0
- data/app/models/commontator/thread.rb +4 -0
- data/app/models/commontator/thread.rb~ +5 -1
- data/app/views/commontator/subscriptions_mailer/{comment_created_email.html.erb → comment_created.html.erb} +0 -0
- data/config/initializers/commontator.rb +15 -12
- data/config/initializers/commontator.rb~ +15 -12
- data/lib/commontator.rb +3 -2
- data/lib/commontator.rb~ +4 -2
- data/lib/commontator/engine.rb~ +6 -0
- data/lib/commontator/version.rb +1 -1
- data/lib/commontator/version.rb~ +1 -1
- data/spec/app/mailers/commontator/subscriptions_mailer_spec.rb +9 -17
- data/spec/app/mailers/commontator/subscriptions_mailer_spec.rb~ +10 -17
- data/spec/app/models/commontator/comment_observer_spec.rb +27 -0
- data/spec/app/models/commontator/comment_observer_spec.rb~ +27 -0
- data/spec/dummy/config/initializers/commontator.rb +14 -9
- data/spec/dummy/config/initializers/commontator.rb~ +15 -9
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +926 -0
- data/spec/dummy/log/test.log +32956 -0
- metadata +10 -3
@@ -2,6 +2,8 @@ module Commontator
|
|
2
2
|
class ApplicationController < ActionController::Base
|
3
3
|
before_filter :get_user
|
4
4
|
|
5
|
+
cattr_accessor :commontable_url
|
6
|
+
|
5
7
|
rescue_from SecurityTransgression, :with => lambda { head(:forbidden) }
|
6
8
|
|
7
9
|
protected
|
@@ -15,10 +17,11 @@ module Commontator
|
|
15
17
|
@thread = params[:thread_id].blank? ? \
|
16
18
|
Commontator::Thread.find(params[:id]) : \
|
17
19
|
Commontator::Thread.find(params[:thread_id])
|
20
|
+
raise SecurityTransgression if @thread.commontable.nil?
|
18
21
|
end
|
19
22
|
|
20
|
-
def
|
21
|
-
|
23
|
+
def set_commontable_url
|
24
|
+
self.commontable_url = @thread.config.commontable_url_proc.call(main_app, @thread.commontable)
|
22
25
|
end
|
23
26
|
end
|
24
27
|
end
|
@@ -2,7 +2,7 @@ module Commontator
|
|
2
2
|
class ApplicationController < ActionController::Base
|
3
3
|
before_filter :get_user
|
4
4
|
|
5
|
-
|
5
|
+
cattr_accessor :commontable_url
|
6
6
|
|
7
7
|
rescue_from SecurityTransgression, :with => lambda { head(:forbidden) }
|
8
8
|
|
@@ -17,10 +17,12 @@ module Commontator
|
|
17
17
|
@thread = params[:thread_id].blank? ? \
|
18
18
|
Commontator::Thread.find(params[:id]) : \
|
19
19
|
Commontator::Thread.find(params[:thread_id])
|
20
|
+
raise SecurityTransgression if @thread.commontable.nil?
|
21
|
+
set_commontable_url
|
20
22
|
end
|
21
23
|
|
22
|
-
def
|
23
|
-
|
24
|
+
def set_commontable_url
|
25
|
+
self.commontable_url = @thread.config.commontable_url_proc.call(main_app, @thread.commontable)
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
@@ -2,7 +2,7 @@ module Commontator
|
|
2
2
|
class CommentsController < ApplicationController
|
3
3
|
before_filter :get_thread, :only => [:new, :create]
|
4
4
|
before_filter :get_comment_and_thread, :except => [:new, :create]
|
5
|
-
before_filter :
|
5
|
+
before_filter :set_commontable_url, :only => :create
|
6
6
|
|
7
7
|
# GET /1/comments/new
|
8
8
|
def new
|
@@ -29,9 +29,6 @@ module Commontator
|
|
29
29
|
|
30
30
|
respond_to do |format|
|
31
31
|
if @comment.save
|
32
|
-
@thread.subscribe(@user) if @thread.config.auto_subscribe_on_comment
|
33
|
-
@thread.add_unread_except_for(@user)
|
34
|
-
SubscriptionsMailer.comment_created_email(@comment, @commontable_url)
|
35
32
|
format.html { redirect_to @thread }
|
36
33
|
format.js
|
37
34
|
else
|
@@ -2,7 +2,7 @@ module Commontator
|
|
2
2
|
class CommentsController < ApplicationController
|
3
3
|
before_filter :get_thread, :only => [:new, :create]
|
4
4
|
before_filter :get_comment_and_thread, :except => [:new, :create]
|
5
|
-
before_filter :
|
5
|
+
before_filter :set_commontable_url, :only => :show
|
6
6
|
|
7
7
|
# GET /1/comments/new
|
8
8
|
def new
|
@@ -21,6 +21,7 @@ module Commontator
|
|
21
21
|
|
22
22
|
# POST /1/comments
|
23
23
|
def create
|
24
|
+
set_commontable_url
|
24
25
|
@comment = Comment.new(params[:comment])
|
25
26
|
@comment.thread = @thread
|
26
27
|
@comment.creator = @user
|
@@ -29,9 +30,6 @@ module Commontator
|
|
29
30
|
|
30
31
|
respond_to do |format|
|
31
32
|
if @comment.save
|
32
|
-
@thread.subscribe(@user) if @thread.config.auto_subscribe_on_comment
|
33
|
-
@thread.add_unread_except_for(@user)
|
34
|
-
SubscriptionsMailer.comment_created_email(@comment, @commontable_url)
|
35
33
|
format.html { redirect_to @thread }
|
36
34
|
format.js
|
37
35
|
else
|
@@ -60,7 +58,8 @@ module Commontator
|
|
60
58
|
format.html { redirect_to @thread }
|
61
59
|
format.js
|
62
60
|
else
|
63
|
-
format.html {
|
61
|
+
format.html { redirect_to @thread }
|
62
|
+
format.js { render :edit }
|
64
63
|
end
|
65
64
|
end
|
66
65
|
end
|
@@ -21,7 +21,7 @@ module Commontator
|
|
21
21
|
def destroy
|
22
22
|
raise SecurityTransgression unless @thread.can_subscribe?(@user)
|
23
23
|
|
24
|
-
@thread.errors.add(:
|
24
|
+
@thread.errors.add(:subscription, "You are not subscribed to this thread") \
|
25
25
|
unless @thread.unsubscribe(@user)
|
26
26
|
|
27
27
|
respond_to do |format|
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Commontator
|
2
2
|
class ThreadsController < ApplicationController
|
3
3
|
before_filter :get_thread
|
4
|
-
before_filter :
|
4
|
+
before_filter :set_commontable_url, :only => :show
|
5
5
|
|
6
6
|
# GET /threads/1
|
7
7
|
def show
|
8
8
|
commontator_thread_show(@thread.commontable)
|
9
9
|
|
10
10
|
respond_to do |format|
|
11
|
-
format.html { redirect_to
|
11
|
+
format.html { redirect_to commontable_url }
|
12
12
|
format.js
|
13
13
|
end
|
14
14
|
end
|
@@ -1,14 +1,13 @@
|
|
1
1
|
module Commontator
|
2
2
|
class ThreadsController < ApplicationController
|
3
3
|
before_filter :get_thread
|
4
|
-
before_filter :get_commontable_url, :only => :show
|
5
4
|
|
6
5
|
# GET /threads/1
|
7
6
|
def show
|
8
7
|
commontator_thread_show(@thread.commontable)
|
9
8
|
|
10
9
|
respond_to do |format|
|
11
|
-
format.html { redirect_to
|
10
|
+
format.html { redirect_to commontable_url }
|
12
11
|
format.js
|
13
12
|
end
|
14
13
|
end
|
@@ -17,7 +16,7 @@ module Commontator
|
|
17
16
|
def close
|
18
17
|
raise SecurityTransgression unless @thread.can_be_edited_by?(@user)
|
19
18
|
|
20
|
-
@thread.errors.add(:base,
|
19
|
+
@thread.errors.add(:base, 'This thread has already been closed.') \
|
21
20
|
unless @thread.close(@user)
|
22
21
|
|
23
22
|
respond_to do |format|
|
@@ -30,7 +29,7 @@ module Commontator
|
|
30
29
|
def reopen
|
31
30
|
raise SecurityTransgression unless @thread.can_be_edited_by?(@user)
|
32
31
|
|
33
|
-
@thread.errors.add(:base,
|
32
|
+
@thread.errors.add(:base, 'This thread is not closed.') \
|
34
33
|
unless @thread.reopen
|
35
34
|
|
36
35
|
respond_to do |format|
|
@@ -3,27 +3,21 @@ module Commontator
|
|
3
3
|
include SharedHelper
|
4
4
|
include ThreadsHelper
|
5
5
|
|
6
|
-
def
|
7
|
-
setup_variables(comment,
|
6
|
+
def comment_created(comment, recipients)
|
7
|
+
setup_variables(comment, recipients)
|
8
8
|
|
9
|
-
mail
|
10
|
-
|
9
|
+
mail :bcc => @bcc,
|
10
|
+
:from => @from,
|
11
|
+
:subject => @subject
|
11
12
|
end
|
12
13
|
|
13
14
|
protected
|
14
15
|
|
15
|
-
def setup_variables(comment,
|
16
|
-
|
16
|
+
def setup_variables(comment, recipients)
|
17
17
|
@comment = comment
|
18
18
|
@thread = @comment.thread
|
19
19
|
@creator = @comment.creator
|
20
20
|
|
21
|
-
@bcc = @thread.subscribers.reject{|s| !s.commontator_config.subscription_emails || \
|
22
|
-
s == @creator} \
|
23
|
-
.collect{|s| commontator_email(s)}
|
24
|
-
|
25
|
-
return if @bcc.empty?
|
26
|
-
|
27
21
|
@commontable = @thread.commontable
|
28
22
|
@config = @thread.config
|
29
23
|
|
@@ -33,7 +27,7 @@ protected
|
|
33
27
|
@commontable_name = commontable_name(@thread)
|
34
28
|
@commontable_id = commontable_id(@thread).to_s
|
35
29
|
|
36
|
-
@commontable_url = commontable_url
|
30
|
+
@commontable_url = ApplicationController.commontable_url
|
37
31
|
|
38
32
|
params = Hash.new
|
39
33
|
params[:comment] = @comment
|
@@ -47,6 +41,8 @@ protected
|
|
47
41
|
params[:commontable_id] = @commontable_id
|
48
42
|
params[:commontable_url] = @commontable_url
|
49
43
|
|
44
|
+
@bcc = recipients.collect{|s| commontator_email(s)}
|
45
|
+
@from = @config.subscription_email_from_proc.call(params)
|
50
46
|
@subject = @config.subscription_email_subject_proc.call(params)
|
51
47
|
end
|
52
48
|
end
|
@@ -3,27 +3,21 @@ module Commontator
|
|
3
3
|
include SharedHelper
|
4
4
|
include ThreadsHelper
|
5
5
|
|
6
|
-
def
|
7
|
-
setup_variables(comment,
|
6
|
+
def comment_created(comment, recipients)
|
7
|
+
setup_variables(comment, recipients)
|
8
8
|
|
9
|
-
mail
|
10
|
-
|
9
|
+
mail :bcc => @bcc,
|
10
|
+
:from => @from,
|
11
|
+
:subject => @subject)
|
11
12
|
end
|
12
13
|
|
13
14
|
protected
|
14
15
|
|
15
|
-
def setup_variables(comment,
|
16
|
-
|
16
|
+
def setup_variables(comment, recipients)
|
17
17
|
@comment = comment
|
18
18
|
@thread = @comment.thread
|
19
19
|
@creator = @comment.creator
|
20
20
|
|
21
|
-
@bcc = @thread.subscribers.reject{|s| s == @creator || \
|
22
|
-
!s.commontator_config.subscription_emails} \
|
23
|
-
.collect{|s| commontator_email(s)}
|
24
|
-
|
25
|
-
return if @bcc.empty?
|
26
|
-
|
27
21
|
@commontable = @thread.commontable
|
28
22
|
@config = @thread.config
|
29
23
|
|
@@ -33,7 +27,7 @@ protected
|
|
33
27
|
@commontable_name = commontable_name(@thread)
|
34
28
|
@commontable_id = commontable_id(@thread).to_s
|
35
29
|
|
36
|
-
@commontable_url = commontable_url
|
30
|
+
@commontable_url = ApplicationController.commontable_url
|
37
31
|
|
38
32
|
params = Hash.new
|
39
33
|
params[:comment] = @comment
|
@@ -47,6 +41,8 @@ protected
|
|
47
41
|
params[:commontable_id] = @commontable_id
|
48
42
|
params[:commontable_url] = @commontable_url
|
49
43
|
|
44
|
+
@bcc = recipients.collect{|s| commontator_email(s)}
|
45
|
+
@from = @config.subscription_email_from_proc.call(params)
|
50
46
|
@subject = @config.subscription_email_subject_proc.call(params)
|
51
47
|
end
|
52
48
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Commontator
|
2
|
+
class CommentObserver < ActiveRecord::Observer
|
3
|
+
def after_create(comment)
|
4
|
+
thread = comment.thread
|
5
|
+
thread.subscribe(comment.creator) if thread.config.auto_subscribe_on_comment
|
6
|
+
thread.add_unread_except_for(comment.creator)
|
7
|
+
recipients = thread.active_subscribers.reject{|s| s == comment.creator}
|
8
|
+
SubscriptionsMailer.comment_created(comment, recipients).deliver \
|
9
|
+
unless recipients.empty?
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Commontator
|
2
|
+
class CommentObserver < ActiveRecord::Observer
|
3
|
+
def after_create(comment)
|
4
|
+
thread = comment.thread
|
5
|
+
thread.subscribe(comment.creator) if thread.config.auto_subscribe_on_comment
|
6
|
+
thread.add_unread_except_for(comment.creator)
|
7
|
+
recipients = thread.active_subscribers.reject{|s| s == comment.creator}
|
8
|
+
pp recipients
|
9
|
+
SubscriptionsMailer.comment_created(comment, recipients).deliver \
|
10
|
+
unless recipients.empty?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -23,6 +23,10 @@ module Commontator
|
|
23
23
|
subscriptions.collect{|s| s.subscriber}
|
24
24
|
end
|
25
25
|
|
26
|
+
def active_subscribers
|
27
|
+
subscribers.select{|s| s.commontator_config.subscription_email_enable_proc.call(s)}
|
28
|
+
end
|
29
|
+
|
26
30
|
def subscription_for(subscriber)
|
27
31
|
return nil if subscriber.nil?
|
28
32
|
Subscription.find_by_thread_id_and_subscriber_id_and_subscriber_type(self.id, subscriber.id, subscriber.class.name)
|
@@ -15,7 +15,7 @@ module Commontator
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def ordered_comments
|
18
|
-
(!commontable.blank? && config.
|
18
|
+
(!commontable.blank? && config.can_vote_on_comments && config.comments_ordered_by_votes) ? \
|
19
19
|
comments.order("cached_votes_down - cached_votes_up") : comments
|
20
20
|
end
|
21
21
|
|
@@ -23,6 +23,10 @@ module Commontator
|
|
23
23
|
subscriptions.collect{|s| s.subscriber}
|
24
24
|
end
|
25
25
|
|
26
|
+
def active_subscribers
|
27
|
+
subscribers.select{|s| s.commontator_config.subscription_emails}
|
28
|
+
end
|
29
|
+
|
26
30
|
def subscription_for(subscriber)
|
27
31
|
return nil if subscriber.nil?
|
28
32
|
Subscription.find_by_thread_id_and_subscriber_id_and_subscriber_type(self.id, subscriber.id, subscriber.class.name)
|
File without changes
|
@@ -8,14 +8,12 @@ Commontator.configure do |config|
|
|
8
8
|
# Default: 'current_user'
|
9
9
|
config.current_user_method = 'current_user'
|
10
10
|
|
11
|
-
# Proc that is called after any javascript runs (e.g. to clear flash)
|
12
|
-
# It is passed the
|
11
|
+
# Proc that is called after any javascript runs (e.g. to display/clear flash messages)
|
12
|
+
# It is passed the view_context object (self from the view template), so you should be able to
|
13
13
|
# access anything you normally could in a view template (by using, e.g. view.flash)
|
14
14
|
# Should return a string containing JS to be appended to all Commontator JS responses
|
15
|
-
# Default: lambda { |view| '$("#error_explanation").
|
16
|
-
config.javascript_proc = lambda { |view| '$("#
|
17
|
-
escape_javascript(render(:partial => 'shared/attention')) + \
|
18
|
-
'");' }
|
15
|
+
# Default: lambda { |view| '$("#error_explanation").hide();' }
|
16
|
+
config.javascript_proc = lambda { |view| '$("#error_explanation").hide();' }
|
19
17
|
|
20
18
|
|
21
19
|
# User (acts_as_commontator) Configuration
|
@@ -28,11 +26,6 @@ Commontator.configure do |config|
|
|
28
26
|
# If enabled, the link will point to the comment creator's show page
|
29
27
|
# Default: false
|
30
28
|
config.user_name_clickable = false
|
31
|
-
|
32
|
-
# Whether automated emails are sent to the user whenever
|
33
|
-
# a comment is posted on a thread they subscribe to
|
34
|
-
# Default: true
|
35
|
-
config.subscription_emails = true
|
36
29
|
|
37
30
|
# The method that returns the user's email address
|
38
31
|
# Default: 'email'
|
@@ -47,6 +40,11 @@ Commontator.configure do |config|
|
|
47
40
|
# Note: user can be nil
|
48
41
|
# Default: lambda { |user| false } (no admins)
|
49
42
|
config.user_admin_proc = lambda { |user| false }
|
43
|
+
|
44
|
+
# Proc called with user as argument that returns true
|
45
|
+
# if the user should receive subscription emails
|
46
|
+
# Default: lambda { |user| true } (always receive subscription emails)
|
47
|
+
config.subscription_email_enable_proc = lambda { |user| true }
|
50
48
|
|
51
49
|
|
52
50
|
# Commontable (acts_as_commontable) Configuration
|
@@ -146,8 +144,13 @@ Commontator.configure do |config|
|
|
146
144
|
# Main application's routes can be accessed using main_app object
|
147
145
|
# Default: lambda { |main_app, commontable| main_app.polymorphic_url(commontable) }
|
148
146
|
config.commontable_url_proc = lambda { |main_app, commontable| main_app.polymorphic_url(commontable) }
|
147
|
+
|
148
|
+
# Proc that returns the subscription email 'from' address
|
149
|
+
# Default:
|
150
|
+
# lambda { |params| 'no-reply@example.com' }
|
151
|
+
config.subscription_email_from_proc = lambda { |params| 'no-reply@example.com' }
|
149
152
|
|
150
|
-
# Proc that returns the subscription email subject string
|
153
|
+
# Proc that returns the subscription email 'subject' string
|
151
154
|
# Default:
|
152
155
|
# lambda do |params|
|
153
156
|
# "#{params[:creator_name]} #{params[:config].comment_create_verb_past} a " + \
|
@@ -8,14 +8,12 @@ Commontator.configure do |config|
|
|
8
8
|
# Default: 'current_user'
|
9
9
|
config.current_user_method = 'current_user'
|
10
10
|
|
11
|
-
# Proc that is called after any javascript runs (e.g. to clear flash)
|
12
|
-
# It is passed the
|
11
|
+
# Proc that is called after any javascript runs (e.g. to display/clear flash messages)
|
12
|
+
# It is passed the view_context object (self from the view template), so you should be able to
|
13
13
|
# access anything you normally could in a view template (by using, e.g. view.flash)
|
14
14
|
# Should return a string containing JS to be appended to all Commontator JS responses
|
15
15
|
# Default: lambda { |view| '$("#error_explanation").remove();' }
|
16
|
-
config.javascript_proc = lambda { |view| '$("#
|
17
|
-
escape_javascript(render(:partial => 'shared/attention')) + \
|
18
|
-
'");' }
|
16
|
+
config.javascript_proc = lambda { |view| '$("#error_explanation").hide();' }
|
19
17
|
|
20
18
|
|
21
19
|
# User (acts_as_commontator) Configuration
|
@@ -24,15 +22,10 @@ Commontator.configure do |config|
|
|
24
22
|
# Default: 'Anonymous'
|
25
23
|
config.user_missing_name = 'Anonymous'
|
26
24
|
|
27
|
-
# Whether the
|
25
|
+
# Whether the comment creator's name is clickable in the comment view
|
28
26
|
# If enabled, the link will point to the comment creator's show page
|
29
27
|
# Default: false
|
30
28
|
config.user_name_clickable = false
|
31
|
-
|
32
|
-
# Whether automated emails are sent to the user whenever
|
33
|
-
# a comment is posted on a thread they subscribe to
|
34
|
-
# Default: true
|
35
|
-
config.subscription_emails = true
|
36
29
|
|
37
30
|
# The method that returns the user's email address
|
38
31
|
# Default: 'email'
|
@@ -47,6 +40,11 @@ Commontator.configure do |config|
|
|
47
40
|
# Note: user can be nil
|
48
41
|
# Default: lambda { |user| false } (no admins)
|
49
42
|
config.user_admin_proc = lambda { |user| false }
|
43
|
+
|
44
|
+
# Proc called with user as argument that returns true
|
45
|
+
# if the user should receive subscription emails
|
46
|
+
# Default: lambda { |user| true } (always receive subscription emails)
|
47
|
+
config.subscription_email_enable_proc = lambda { |user| true }
|
50
48
|
|
51
49
|
|
52
50
|
# Commontable (acts_as_commontable) Configuration
|
@@ -146,8 +144,13 @@ Commontator.configure do |config|
|
|
146
144
|
# Main application's routes can be accessed using main_app object
|
147
145
|
# Default: lambda { |main_app, commontable| main_app.polymorphic_url(commontable) }
|
148
146
|
config.commontable_url_proc = lambda { |main_app, commontable| main_app.polymorphic_url(commontable) }
|
147
|
+
|
148
|
+
# Proc that returns the subscription email 'from' address
|
149
|
+
# Default:
|
150
|
+
# lambda { |params| 'no-reply@example.com' }
|
151
|
+
config.subscription_email_from_proc = lambda { |params| 'no-reply@example.com' }
|
149
152
|
|
150
|
-
# Proc that returns the subscription email subject string
|
153
|
+
# Proc that returns the subscription email 'subject' string
|
151
154
|
# Default:
|
152
155
|
# lambda do |params|
|
153
156
|
# "#{params[:creator_name]} #{params[:config].comment_create_verb_past} a " + \
|