commontator 2.0.2 → 4.0.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/MIT-LICENSE +1 -1
- data/README.md +20 -2
- data/app/controllers/commontator/comments_controller.rb +19 -11
- data/app/controllers/commontator/subscriptions_controller.rb +5 -5
- data/app/controllers/commontator/threads_controller.rb +3 -3
- data/app/mailers/commontator/subscriptions_mailer.rb +3 -2
- data/app/models/commontator/comment.rb +0 -6
- data/app/models/commontator/subscription.rb +0 -4
- data/app/models/commontator/thread.rb +4 -7
- data/app/views/commontator/comments/_actions.html.erb +1 -1
- data/app/views/commontator/comments/_votes.html.erb +4 -4
- data/app/views/commontator/shared/_thread.html.erb +1 -1
- data/app/views/commontator/subscriptions/_link.html.erb +1 -1
- data/app/views/commontator/threads/_show.html.erb +1 -1
- data/config/initializers/commontator.rb +1 -1
- data/config/routes.rb +15 -15
- data/db/migrate/0_install.rb +50 -0
- data/db/migrate/0_install.rb~ +3 -3
- data/lib/commontator/shared_helper.rb +1 -1
- data/lib/commontator/version.rb +1 -1
- data/lib/commontator/version.rb~ +1 -1
- data/spec/app/controllers/commontator/comments_controller_spec.rb +90 -41
- data/spec/app/controllers/commontator/subscriptions_controller_spec.rb +16 -16
- data/spec/app/controllers/commontator/threads_controller_spec.rb +13 -13
- data/spec/app/helpers/commontator/application_helper_spec.rb +1 -1
- data/spec/app/helpers/commontator/threads_helper_spec.rb +1 -1
- data/spec/app/mailers/commontator/subscriptions_mailer_spec.rb +2 -2
- data/spec/app/models/commontator/comment_spec.rb +1 -1
- data/spec/app/models/commontator/subscription_spec.rb +1 -1
- data/spec/app/models/commontator/thread_spec.rb +1 -1
- data/spec/dummy/Rakefile +0 -1
- data/spec/dummy/config.ru +1 -1
- data/spec/dummy/config/application.rb +4 -36
- data/spec/dummy/config/boot.rb +4 -9
- data/spec/dummy/config/environment.rb +2 -2
- data/spec/dummy/config/environments/development.rb +11 -19
- data/spec/dummy/config/environments/production.rb +40 -27
- data/spec/dummy/config/environments/test.rb +13 -14
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +6 -5
- data/spec/dummy/config/initializers/secret_token.rb +7 -2
- data/spec/dummy/config/initializers/session_store.rb +0 -5
- data/spec/dummy/config/initializers/wrap_parameters.rb +6 -6
- data/spec/dummy/config/locales/en.yml +20 -2
- data/spec/dummy/db/schema.rb +41 -41
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/test.log +0 -8352
- data/spec/lib/commontator/acts_as_commontable_spec.rb +1 -1
- data/spec/lib/commontator/acts_as_commontable_spec.rb~ +2 -2
- data/spec/lib/commontator/acts_as_commontator_spec.rb +1 -1
- data/spec/lib/commontator/commontable_config_spec.rb +1 -1
- data/spec/lib/commontator/commontator_config_spec.rb +1 -1
- data/spec/lib/commontator/controller_includes_spec.rb +3 -3
- data/spec/lib/commontator/shared_helper_spec.rb +7 -3
- data/spec/lib/commontator_spec.rb +1 -1
- data/spec/{minitest_helper.rb → test_helper.rb} +8 -4
- metadata +9 -10
- data/app/models/commontator/comment_observer.rb +0 -12
- data/db/migrate/0_install_commontator.rb +0 -50
- data/spec/app/models/commontator/comment_observer_spec.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 407651f272db411b6547f9e0a48b8dff5b1bfe23
|
4
|
+
data.tar.gz: 69bee372a89c33f4bb4c2e696391f4f73376eea1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a09b58656b2ea37d063e42b88d70289d929a5e07b3b6afec7312f10e6082d006907791b479ff991505ff81a6f3914e81b4380c2def1c0ef92686a8f4dbf3c1e
|
7
|
+
data.tar.gz: 9f13d4b9d2eec2fcbed8d96136d28682ae85b5c8fc43bd964bcb7b6dc8c6131eb6c9a04b2cd222ac56f8c3eb4acb11c893f922cf1bcb99edec83ca0a68876745
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -10,12 +10,14 @@ There are 4 steps you must follow to install commontator:
|
|
10
10
|
|
11
11
|
1. Gem
|
12
12
|
|
13
|
-
Add this line to your application's Gemfile:
|
13
|
+
Add this line to your application's Gemfile (for Rails 4+):
|
14
14
|
|
15
15
|
```ruby
|
16
|
-
gem 'commontator', '~>
|
16
|
+
gem 'commontator', '~> 4.0.0'
|
17
17
|
```
|
18
18
|
|
19
|
+
If you are still using rails 3, use Commontator version 2.0.1 instead.
|
20
|
+
|
19
21
|
And then execute:
|
20
22
|
|
21
23
|
```sh
|
@@ -113,6 +115,22 @@ Follow the steps below to add commontator to your models and views:
|
|
113
115
|
|
114
116
|
That's it! Commontator is now ready for use.
|
115
117
|
|
118
|
+
## Voting
|
119
|
+
|
120
|
+
You can allow users to vote on each others' comments by adding the acts_as_votable gem to your gemfile:
|
121
|
+
|
122
|
+
```ruby
|
123
|
+
gem 'acts_as_votable'
|
124
|
+
```
|
125
|
+
|
126
|
+
And enabling the relevant option in commontator's initializer:
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
config.can_vote_on_comments = true
|
130
|
+
```
|
131
|
+
|
132
|
+
Note that acts_as_votable is currently incompatible with the protected_attributes gem if config.active_record.whitelist_attributes is set to true.
|
133
|
+
|
116
134
|
## Browser Support
|
117
135
|
|
118
136
|
No incompatibilities are currently known with any of the major browsers.
|
@@ -1,10 +1,10 @@
|
|
1
1
|
module Commontator
|
2
|
-
class CommentsController < ApplicationController
|
2
|
+
class CommentsController < Commontator::ApplicationController
|
3
3
|
before_filter :get_thread, :only => [:new, :create]
|
4
4
|
before_filter :get_comment_and_thread, :except => [:new, :create]
|
5
5
|
before_filter :set_commontable_url, :only => :create
|
6
6
|
|
7
|
-
# GET /1/comments/new
|
7
|
+
# GET /threads/1/comments/new
|
8
8
|
def new
|
9
9
|
@comment = Comment.new
|
10
10
|
@comment.thread = @thread
|
@@ -19,9 +19,10 @@ module Commontator
|
|
19
19
|
|
20
20
|
end
|
21
21
|
|
22
|
-
# POST /1/comments
|
22
|
+
# POST /threads/1/comments
|
23
23
|
def create
|
24
|
-
@comment = Comment.new
|
24
|
+
@comment = Comment.new
|
25
|
+
@comment.body = params[:comment].nil? ? nil : params[:comment][:body]
|
25
26
|
@comment.thread = @thread
|
26
27
|
@comment.creator = @user
|
27
28
|
|
@@ -29,6 +30,12 @@ module Commontator
|
|
29
30
|
|
30
31
|
respond_to do |format|
|
31
32
|
if @comment.save
|
33
|
+
@thread.subscribe(@user) if @thread.config.auto_subscribe_on_comment
|
34
|
+
@thread.add_unread_except_for(@user)
|
35
|
+
recipients = @thread.active_subscribers.reject{|s| s == @user}
|
36
|
+
SubscriptionsMailer.comment_created(@comment, recipients).deliver \
|
37
|
+
unless recipients.empty?
|
38
|
+
|
32
39
|
format.html { redirect_to @thread }
|
33
40
|
format.js
|
34
41
|
else
|
@@ -48,13 +55,14 @@ module Commontator
|
|
48
55
|
end
|
49
56
|
end
|
50
57
|
|
51
|
-
#
|
58
|
+
# PATCH /comments/1
|
52
59
|
def update
|
53
60
|
raise SecurityTransgression unless @comment.can_be_edited_by?(@user)
|
61
|
+
@comment.body = params[:comment].nil? ? nil : params[:comment][:body]
|
54
62
|
@comment.editor = @user
|
55
63
|
|
56
64
|
respond_to do |format|
|
57
|
-
if @comment.
|
65
|
+
if @comment.save
|
58
66
|
format.html { redirect_to @thread }
|
59
67
|
format.js
|
60
68
|
else
|
@@ -64,7 +72,7 @@ module Commontator
|
|
64
72
|
end
|
65
73
|
end
|
66
74
|
|
67
|
-
#
|
75
|
+
# PATCH /comments/1/delete
|
68
76
|
def delete
|
69
77
|
raise SecurityTransgression unless @comment.can_be_deleted_by?(@user)
|
70
78
|
|
@@ -77,7 +85,7 @@ module Commontator
|
|
77
85
|
end
|
78
86
|
end
|
79
87
|
|
80
|
-
#
|
88
|
+
# PATCH /comments/1/undelete
|
81
89
|
def undelete
|
82
90
|
raise SecurityTransgression unless @comment.can_be_deleted_by?(@user)
|
83
91
|
|
@@ -90,7 +98,7 @@ module Commontator
|
|
90
98
|
end
|
91
99
|
end
|
92
100
|
|
93
|
-
#
|
101
|
+
# PATCH /comments/1/upvote
|
94
102
|
def upvote
|
95
103
|
raise SecurityTransgression unless @comment.can_be_voted_on_by?(@user)
|
96
104
|
|
@@ -102,7 +110,7 @@ module Commontator
|
|
102
110
|
end
|
103
111
|
end
|
104
112
|
|
105
|
-
#
|
113
|
+
# PATCH /comments/1/downvote
|
106
114
|
def downvote
|
107
115
|
raise SecurityTransgression unless @comment.can_be_voted_on_by?(@user)
|
108
116
|
|
@@ -114,7 +122,7 @@ module Commontator
|
|
114
122
|
end
|
115
123
|
end
|
116
124
|
|
117
|
-
#
|
125
|
+
# PATCH /comments/1/unvote
|
118
126
|
def unvote
|
119
127
|
raise SecurityTransgression unless @comment.can_be_voted_on_by?(@user)
|
120
128
|
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Commontator
|
2
|
-
class SubscriptionsController < ApplicationController
|
2
|
+
class SubscriptionsController < Commontator::ApplicationController
|
3
3
|
before_filter :get_thread
|
4
4
|
|
5
|
-
#
|
6
|
-
def
|
5
|
+
# PATCH /threads/1/subscribe
|
6
|
+
def subscribe
|
7
7
|
raise SecurityTransgression unless @thread.can_subscribe?(@user)
|
8
8
|
|
9
9
|
@thread.errors.add(:subscription, "You are already subscribed to this thread") \
|
@@ -16,8 +16,8 @@ module Commontator
|
|
16
16
|
|
17
17
|
end
|
18
18
|
|
19
|
-
#
|
20
|
-
def
|
19
|
+
# PATCH /threads/1/unsubscribe
|
20
|
+
def unsubscribe
|
21
21
|
raise SecurityTransgression unless @thread.can_subscribe?(@user)
|
22
22
|
|
23
23
|
@thread.errors.add(:subscription, "You are not subscribed to this thread") \
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Commontator
|
2
|
-
class ThreadsController < ApplicationController
|
2
|
+
class ThreadsController < Commontator::ApplicationController
|
3
3
|
before_filter :get_thread
|
4
4
|
before_filter :set_commontable_url, :only => :show
|
5
5
|
|
@@ -13,7 +13,7 @@ module Commontator
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
#
|
16
|
+
# PATCH /threads/1/close
|
17
17
|
def close
|
18
18
|
raise SecurityTransgression unless @thread.can_be_edited_by?(@user)
|
19
19
|
|
@@ -26,7 +26,7 @@ module Commontator
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
#
|
29
|
+
# PATCH /threads/1/reopen
|
30
30
|
def reopen
|
31
31
|
raise SecurityTransgression unless @thread.can_be_edited_by?(@user)
|
32
32
|
|
@@ -6,12 +6,13 @@ module Commontator
|
|
6
6
|
def comment_created(comment, recipients)
|
7
7
|
setup_variables(comment, recipients)
|
8
8
|
|
9
|
-
mail :
|
9
|
+
mail :to => 'Undisclosed Recipients',
|
10
|
+
:bcc => @bcc,
|
10
11
|
:from => @from,
|
11
12
|
:subject => @subject
|
12
13
|
end
|
13
14
|
|
14
|
-
protected
|
15
|
+
protected
|
15
16
|
|
16
17
|
def setup_variables(comment, recipients)
|
17
18
|
@comment = comment
|
@@ -2,16 +2,12 @@ module Commontator
|
|
2
2
|
class Comment < ActiveRecord::Base
|
3
3
|
belongs_to :creator, :polymorphic => true
|
4
4
|
belongs_to :editor, :polymorphic => true
|
5
|
-
|
6
5
|
belongs_to :thread
|
7
6
|
|
8
7
|
has_one :commontable, :through => :thread
|
9
8
|
|
10
|
-
attr_accessible :body
|
11
|
-
|
12
9
|
validates_presence_of :creator, :on => :create
|
13
10
|
validates_presence_of :editor, :on => :update
|
14
|
-
|
15
11
|
validates_presence_of :thread
|
16
12
|
validates_presence_of :body
|
17
13
|
|
@@ -103,6 +99,4 @@ module Commontator
|
|
103
99
|
can_be_voted_on? && thread.can_be_read_by?(user) && user != creator
|
104
100
|
end
|
105
101
|
end
|
106
|
-
|
107
|
-
CommentObserver.instance
|
108
102
|
end
|
@@ -1,13 +1,9 @@
|
|
1
1
|
module Commontator
|
2
2
|
class Subscription < ActiveRecord::Base
|
3
3
|
belongs_to :subscriber, :polymorphic => true
|
4
|
-
|
5
4
|
belongs_to :thread
|
6
5
|
|
7
|
-
attr_accessible :subscriber, :thread
|
8
|
-
|
9
6
|
validates_presence_of :subscriber, :thread
|
10
|
-
|
11
7
|
validates_uniqueness_of :thread_id, :scope => [:subscriber_type, :subscriber_id]
|
12
8
|
|
13
9
|
def mark_as_read
|
@@ -1,17 +1,12 @@
|
|
1
1
|
module Commontator
|
2
2
|
class Thread < ActiveRecord::Base
|
3
3
|
belongs_to :closer, :polymorphic => true
|
4
|
-
|
5
4
|
belongs_to :commontable, :polymorphic => true
|
6
5
|
|
7
6
|
has_many :comments, :dependent => :destroy
|
8
|
-
|
9
7
|
has_many :subscriptions, :dependent => :destroy
|
10
8
|
|
11
|
-
attr_accessible :is_closed
|
12
|
-
|
13
9
|
validates_presence_of :commontable, :unless => :is_closed?
|
14
|
-
|
15
10
|
validates_uniqueness_of :commontable_id, :scope => :commontable_type, :allow_nil => true
|
16
11
|
|
17
12
|
def config
|
@@ -46,8 +41,10 @@ module Commontator
|
|
46
41
|
|
47
42
|
def subscribe(subscriber)
|
48
43
|
return false if is_subscribed?(subscriber) || !subscriber.is_commontator
|
49
|
-
subscription = Subscription.
|
50
|
-
|
44
|
+
subscription = Subscription.new
|
45
|
+
subscription.subscriber = subscriber
|
46
|
+
subscription.thread = self
|
47
|
+
subscription.save
|
51
48
|
end
|
52
49
|
|
53
50
|
def unsubscribe(subscriber)
|
@@ -23,7 +23,7 @@
|
|
23
23
|
:confirm => (!is_deleted ? \
|
24
24
|
"Are you sure you want to delete this " + \
|
25
25
|
"#{comment.thread.config.comment_name}?" : nil),
|
26
|
-
:method => :
|
26
|
+
:method => :patch,
|
27
27
|
:id => "comment_#{comment.id.to_s}_#{del_string}_link",
|
28
28
|
:class => "comment_#{del_string}_link",
|
29
29
|
:remote => true %>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
<span id="comment_<%= comment.id %>_upvote_span" class="comment_upvote">
|
11
11
|
<% if can_vote && (vote.blank? || !vote.vote_flag) %>
|
12
12
|
<%= form_tag commontator.upvote_comment_path(comment),
|
13
|
-
:method => :
|
13
|
+
:method => :patch,
|
14
14
|
:remote => true do %>
|
15
15
|
<%= image_submit_tag "commontator/upvote.png",
|
16
16
|
:onmouseover => "this.src='/assets/commontator/upvote_hover.png'",
|
@@ -18,7 +18,7 @@
|
|
18
18
|
<% end %>
|
19
19
|
<% elsif can_vote %>
|
20
20
|
<%= form_tag commontator.unvote_comment_path(comment),
|
21
|
-
:method => :
|
21
|
+
:method => :patch,
|
22
22
|
:remote => true do %>
|
23
23
|
<%= image_submit_tag "commontator/upvote_hover.png",
|
24
24
|
:onmouseover => "this.src='/assets/commontator/upvote.png'",
|
@@ -36,7 +36,7 @@
|
|
36
36
|
<span id="comment_<%= comment.id %>_downvote_span" class="comment_downvote">
|
37
37
|
<% if can_vote && (vote.blank? || vote.vote_flag) %>
|
38
38
|
<%= form_tag commontator.downvote_comment_path(comment),
|
39
|
-
:method => :
|
39
|
+
:method => :patch,
|
40
40
|
:remote => true do %>
|
41
41
|
<%= image_submit_tag "commontator/downvote.png",
|
42
42
|
:onmouseover => "this.src='/assets/commontator/downvote_hover.png'",
|
@@ -44,7 +44,7 @@
|
|
44
44
|
<% end %>
|
45
45
|
<% elsif can_vote %>
|
46
46
|
<%= form_tag commontator.unvote_comment_path(comment),
|
47
|
-
:method => :
|
47
|
+
:method => :patch,
|
48
48
|
:remote => true do %>
|
49
49
|
<%= image_submit_tag "commontator/downvote_hover.png",
|
50
50
|
:onmouseover => "this.src='/assets/commontator/downvote.png'",
|
@@ -6,7 +6,7 @@
|
|
6
6
|
<% subscription = thread.subscription_for(user) %>
|
7
7
|
|
8
8
|
<% if thread.can_be_read_by?(user) %>
|
9
|
-
<%= stylesheet_link_tag "commontator/application", :media => "all" %>
|
9
|
+
<%= stylesheet_link_tag "commontator/application.css", :media => "all" %>
|
10
10
|
|
11
11
|
<div id="thread_<%= thread.id %>_div" class="thread" style="display: none;">
|
12
12
|
<% if @commontator_thread_show %>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
:confirm => (is_subscribed ? \
|
11
11
|
"Are you sure you want to unsubscribe from this thread?" : \
|
12
12
|
nil),
|
13
|
-
:method => :
|
13
|
+
:method => :patch,
|
14
14
|
:id => "thread_#{thread.id.to_s}_#{sub_string}_link",
|
15
15
|
:class => "thread_#{sub_string}_link",
|
16
16
|
:remote => true %>
|
@@ -28,7 +28,7 @@
|
|
28
28
|
commontator.polymorphic_path([close_string, thread]),
|
29
29
|
:confirm => (!is_closed ? \
|
30
30
|
'Are you sure you want to close this thread?' : nil),
|
31
|
-
:method => :
|
31
|
+
:method => :patch,
|
32
32
|
:id => "thread_#{thread.id.to_s}_#{close_string}_link",
|
33
33
|
:class => "thread_#{close_string}_link",
|
34
34
|
:remote => true %>
|
@@ -23,7 +23,7 @@ Commontator.configure do |config|
|
|
23
23
|
config.user_missing_name = 'Anonymous'
|
24
24
|
|
25
25
|
# Whether the comment creator's name is clickable in the comment view
|
26
|
-
# If enabled, the link will point to the comment creator's show page
|
26
|
+
# If enabled, the link will point to the comment creator's 'show' page
|
27
27
|
# Default: false
|
28
28
|
config.user_name_clickable = false
|
29
29
|
|
data/config/routes.rb
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
Commontator::Engine.routes.draw do
|
2
2
|
resources :threads, :only => [:show] do
|
3
3
|
resources :comments, :except => [:index, :destroy], :shallow => true do
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
member do
|
5
|
+
patch 'delete'
|
6
|
+
patch 'undelete'
|
7
|
+
|
8
|
+
patch 'upvote'
|
9
|
+
patch 'downvote'
|
10
|
+
patch 'unvote'
|
11
|
+
end
|
10
12
|
end
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
:as => 'unsubscribe',
|
20
|
-
:on => :member
|
14
|
+
member do
|
15
|
+
patch 'close'
|
16
|
+
patch 'reopen'
|
17
|
+
|
18
|
+
patch 'subscribe', :to => 'subscriptions#subscribe'
|
19
|
+
patch 'unsubscribe', :to => 'subscriptions#unsubscribe'
|
20
|
+
end
|
21
21
|
end
|
22
22
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class Install < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table 'commontator_comments' do |t|
|
4
|
+
t.string 'creator_type'
|
5
|
+
t.integer 'creator_id'
|
6
|
+
t.string 'editor_type'
|
7
|
+
t.integer 'editor_id'
|
8
|
+
t.integer 'thread_id', :null => false
|
9
|
+
t.text 'body', :null => false
|
10
|
+
t.datetime 'deleted_at'
|
11
|
+
|
12
|
+
t.integer 'cached_votes_total', :default => 0
|
13
|
+
t.integer 'cached_votes_up', :default => 0
|
14
|
+
t.integer 'cached_votes_down', :default => 0
|
15
|
+
|
16
|
+
t.timestamps
|
17
|
+
end
|
18
|
+
|
19
|
+
add_index :commontator_comments, [:creator_type, :creator_id, :thread_id], :name => 'index_c_c_on_c_type_and_c_id_and_t_id'
|
20
|
+
add_index :commontator_comments, :thread_id
|
21
|
+
|
22
|
+
add_index :commontator_comments, :cached_votes_total
|
23
|
+
add_index :commontator_comments, :cached_votes_up
|
24
|
+
add_index :commontator_comments, :cached_votes_down
|
25
|
+
|
26
|
+
create_table 'commontator_subscriptions' do |t|
|
27
|
+
t.string 'subscriber_type', :null => false
|
28
|
+
t.integer 'subscriber_id', :null => false
|
29
|
+
t.integer 'thread_id', :null => false
|
30
|
+
t.integer 'unread', :null => false, :default => 0
|
31
|
+
|
32
|
+
t.timestamps
|
33
|
+
end
|
34
|
+
|
35
|
+
add_index :commontator_subscriptions, [:subscriber_type, :subscriber_id, :thread_id], :unique => true, :name => 'index_c_s_on_s_type_and_s_id_and_t_id'
|
36
|
+
add_index :commontator_subscriptions, :thread_id
|
37
|
+
|
38
|
+
create_table 'commontator_threads' do |t|
|
39
|
+
t.string 'commontable_type'
|
40
|
+
t.integer 'commontable_id'
|
41
|
+
t.datetime 'closed_at'
|
42
|
+
t.string 'closer_type'
|
43
|
+
t.integer 'closer_id'
|
44
|
+
|
45
|
+
t.timestamps
|
46
|
+
end
|
47
|
+
|
48
|
+
add_index :commontator_threads, [:commontable_type, :commontable_id], :unique => true, :name => 'index_c_t_on_c_type_and_c_id'
|
49
|
+
end
|
50
|
+
end
|