acts_as_commentable 3.0.1 → 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.
- data/README.rdoc +43 -25
- data/lib/comment_methods.rb +13 -9
- data/lib/commentable_methods.rb +44 -36
- data/lib/generators/comment/templates/comment.rb +1 -1
- data/lib/generators/comment/templates/create_comments.rb +1 -0
- metadata +20 -38
data/README.rdoc
CHANGED
@@ -1,49 +1,67 @@
|
|
1
|
-
Acts As Commentable
|
2
|
-
=================
|
1
|
+
= Acts As Commentable
|
3
2
|
|
4
3
|
Allows for comments to be added to multiple and different models.
|
5
4
|
|
6
|
-
==
|
5
|
+
== Installation :
|
7
6
|
|
8
|
-
|
7
|
+
Add the following line to your Gemfile
|
9
8
|
|
10
|
-
|
11
|
-
** gem install acts_as_commentable
|
12
|
-
** add the following line to your environment.rb: config.gem 'acts_as_commentable'
|
13
|
-
** If using bundler then just add "gem 'acts_as_commentable'" to your Gemfile and "bundle install"
|
9
|
+
=== Rails 4
|
14
10
|
|
11
|
+
gem 'acts_as_commentable'
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
=== Rails 3
|
14
|
+
|
15
|
+
gem 'acts_as_commentable', '3.0.1'
|
16
|
+
|
17
|
+
=== Rails 2
|
18
|
+
|
19
|
+
gem 'acts_as_commentable', git: 'git@github.com:jackdempsey/acts_as_commentable.git' , branch: '2.x'
|
19
20
|
|
20
21
|
|
21
|
-
|
22
|
+
== Generator
|
23
|
+
|
24
|
+
|
25
|
+
=== Rails 3+
|
22
26
|
|
23
|
-
|
27
|
+
rails g comment
|
28
|
+
|
29
|
+
=== Rails 2
|
30
|
+
|
31
|
+
script/generate comment
|
24
32
|
|
25
33
|
Then migrate your database:
|
26
34
|
|
27
|
-
rake db:migrate
|
35
|
+
rake db:migrate
|
28
36
|
|
29
37
|
== Usage
|
30
38
|
|
31
|
-
|
39
|
+
Make your ActiveRecord model act as commentable:
|
40
|
+
|
41
|
+
class Post < ActiveRecord::Base
|
42
|
+
acts_as_commentable
|
43
|
+
end
|
32
44
|
|
33
|
-
|
34
|
-
acts_as_commentable
|
35
|
-
end
|
45
|
+
Add a comment to a model instance:
|
36
46
|
|
37
|
-
|
47
|
+
commentable = Post.create
|
48
|
+
commentable.comments.create(:title => "First comment.", :comment => "This is the first comment.")
|
49
|
+
|
50
|
+
Fetch comments for a commentable model:
|
38
51
|
|
39
|
-
|
40
|
-
commentable.comments.
|
52
|
+
commentable = Post.find(1)
|
53
|
+
comments = commentable.comments.recent.limit(10).all
|
41
54
|
|
42
|
-
|
55
|
+
Add multiple type of comments to a model:
|
43
56
|
|
44
|
-
|
45
|
-
|
57
|
+
class Todo < ActiveRecord::Base
|
58
|
+
acts_as_commentable :public, :private
|
59
|
+
end
|
60
|
+
|
61
|
+
Fetch comments for a this model:
|
46
62
|
|
63
|
+
public_comments = Todo.find(1).public_comments
|
64
|
+
private_comments = Todo.find(1).private_comments
|
47
65
|
|
48
66
|
== Credits
|
49
67
|
|
@@ -51,7 +69,7 @@ Xelipe - This plugin is heavily influenced by Acts As Taggable.
|
|
51
69
|
|
52
70
|
== Contributors
|
53
71
|
|
54
|
-
Jack Dempsey, Chris Eppstein, Jim Ray, Matthew Van Horn, Ole Riesenberg, ZhangJinzhu, maddox, monocle
|
72
|
+
Jack Dempsey, Chris Eppstein, Jim Ray, Matthew Van Horn, Ole Riesenberg, ZhangJinzhu, maddox, monocle, mrzor, Michael Bensoussan
|
55
73
|
|
56
74
|
== More
|
57
75
|
|
data/lib/comment_methods.rb
CHANGED
@@ -6,24 +6,28 @@ module ActsAsCommentable
|
|
6
6
|
# recent: Returns comments by how recently they were created (created_at DESC).
|
7
7
|
# limit(N): Return no more than N comments.
|
8
8
|
module Comment
|
9
|
-
|
9
|
+
|
10
10
|
def self.included(comment_model)
|
11
11
|
comment_model.extend Finders
|
12
|
-
comment_model.scope :in_order, comment_model.order('created_at ASC')
|
13
|
-
comment_model.scope :recent,
|
12
|
+
comment_model.scope :in_order, -> { comment_model.order('created_at ASC') }
|
13
|
+
comment_model.scope :recent, -> { comment_model.order('created_at DESC') }
|
14
|
+
end
|
15
|
+
|
16
|
+
def is_comment_type?(type)
|
17
|
+
type.to_s == role.singularize.to_s
|
14
18
|
end
|
15
|
-
|
19
|
+
|
16
20
|
module Finders
|
17
21
|
# Helper class method to lookup all comments assigned
|
18
22
|
# to all commentable types for a given user.
|
19
|
-
def find_comments_by_user(user)
|
20
|
-
where(["user_id = ?", user.id]).order("created_at DESC")
|
23
|
+
def find_comments_by_user(user, role = "comments")
|
24
|
+
where(["user_id = ? and role = ?", user.id, role]).order("created_at DESC")
|
21
25
|
end
|
22
26
|
|
23
27
|
# Helper class method to look up all comments for
|
24
28
|
# commentable class name and commentable id.
|
25
|
-
def find_comments_for_commentable(commentable_str, commentable_id)
|
26
|
-
where(["commentable_type = ? and commentable_id = ?", commentable_str, commentable_id]).order("created_at DESC")
|
29
|
+
def find_comments_for_commentable(commentable_str, commentable_id, role = "comments")
|
30
|
+
where(["commentable_type = ? and commentable_id = ? and role = ?", commentable_str, commentable_id, role]).order("created_at DESC")
|
27
31
|
end
|
28
32
|
|
29
33
|
# Helper class method to look up a commentable object
|
@@ -31,7 +35,7 @@ module ActsAsCommentable
|
|
31
35
|
def find_commentable(commentable_str, commentable_id)
|
32
36
|
model = commentable_str.constantize
|
33
37
|
model.respond_to?(:find_comments_for) ? model.find(commentable_id) : nil
|
34
|
-
|
38
|
+
end
|
35
39
|
end
|
36
40
|
end
|
37
41
|
end
|
data/lib/commentable_methods.rb
CHANGED
@@ -10,44 +10,52 @@ module Juixe
|
|
10
10
|
end
|
11
11
|
|
12
12
|
module ClassMethods
|
13
|
-
def acts_as_commentable(
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
13
|
+
def acts_as_commentable(*args)
|
14
|
+
comment_roles = args.to_a.flatten.compact.map(&:to_sym)
|
15
|
+
|
16
|
+
class_attribute :comment_types
|
17
|
+
self.comment_types = (comment_roles.blank? ? [:comments] : comment_roles)
|
18
|
+
|
19
|
+
options = ((args.blank? or args[0].blank?) ? {} : args[0])
|
20
|
+
|
21
|
+
if !comment_roles.blank?
|
22
|
+
comment_roles.each do |role|
|
23
|
+
has_many "#{role.to_s}_comments".to_sym,
|
24
|
+
{:class_name => "Comment",
|
25
|
+
:as => :commentable,
|
26
|
+
:dependent => :destroy,
|
27
|
+
:conditions => ["role = ?", role.to_s],
|
28
|
+
:before_add => Proc.new { |x, c| c.role = role.to_s }}
|
29
|
+
end
|
30
|
+
else
|
31
|
+
has_many :comments, {:as => :commentable, :dependent => :destroy}
|
32
|
+
end
|
33
|
+
|
34
|
+
comment_types.each do |role|
|
35
|
+
method_name = (role == :comments ? "comments" : "#{role.to_s}_comments").to_s
|
36
|
+
class_eval %{
|
37
|
+
def self.find_#{method_name}_for(obj)
|
38
|
+
commentable = self.base_class.name
|
39
|
+
Comment.find_comments_for_commentable(commentable, obj.id, "#{role.to_s}")
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.find_#{method_name}_by_user(user)
|
43
|
+
commentable = self.base_class.name
|
44
|
+
Comment.where(["user_id = ? and commentable_type = ? and role = ?", user.id, commentable, "#{role.to_s}"]).order("created_at DESC")
|
45
|
+
end
|
46
|
+
|
47
|
+
def #{method_name}_ordered_by_submitted
|
48
|
+
Comment.find_comments_for_commentable(self.class.name, id, "#{role.to_s}")
|
49
|
+
end
|
50
|
+
|
51
|
+
def add_#{method_name.singularize}(comment)
|
52
|
+
comment.role = "#{role.to_s}"
|
53
|
+
#{method_name} << comment
|
54
|
+
end
|
55
|
+
}
|
56
|
+
end
|
48
57
|
end
|
49
58
|
end
|
50
|
-
|
51
59
|
end
|
52
60
|
end
|
53
61
|
end
|
@@ -4,7 +4,7 @@ class Comment < ActiveRecord::Base
|
|
4
4
|
|
5
5
|
belongs_to :commentable, :polymorphic => true
|
6
6
|
|
7
|
-
default_scope
|
7
|
+
default_scope -> { order('created_at ASC') }
|
8
8
|
|
9
9
|
# NOTE: install the acts_as_votable plugin if you
|
10
10
|
# want user to vote on the quality of comments.
|
metadata
CHANGED
@@ -1,33 +1,24 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_commentable
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 3
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
version: 3.0.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 4.0.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Cosmin Radoi, Jack Dempsey, Xelipe, Chris Eppstein
|
13
9
|
autorequire: acts_as_commentable
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2010-10-28 00:00:00 -04:00
|
18
|
-
default_executable:
|
12
|
+
date: 2010-03-13 00:00:00.000000000 Z
|
19
13
|
dependencies: []
|
20
|
-
|
21
14
|
description: Plugin/gem that provides comment functionality
|
22
15
|
email: unknown@juixe.com
|
23
16
|
executables: []
|
24
|
-
|
25
17
|
extensions: []
|
26
|
-
|
27
|
-
extra_rdoc_files:
|
18
|
+
extra_rdoc_files:
|
28
19
|
- README.rdoc
|
29
20
|
- MIT-LICENSE
|
30
|
-
files:
|
21
|
+
files:
|
31
22
|
- MIT-LICENSE
|
32
23
|
- README.rdoc
|
33
24
|
- lib/acts_as_commentable.rb
|
@@ -40,37 +31,28 @@ files:
|
|
40
31
|
- tasks/acts_as_commentable_tasks.rake
|
41
32
|
- init.rb
|
42
33
|
- install.rb
|
43
|
-
has_rdoc: true
|
44
34
|
homepage: http://www.juixe.com/techknow/index.php/2006/06/18/acts-as-commentable-plugin/
|
45
35
|
licenses: []
|
46
|
-
|
47
36
|
post_install_message:
|
48
37
|
rdoc_options: []
|
49
|
-
|
50
|
-
require_paths:
|
38
|
+
require_paths:
|
51
39
|
- lib
|
52
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
41
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
58
|
-
|
59
|
-
version: "0"
|
60
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
47
|
none: false
|
62
|
-
requirements:
|
63
|
-
- -
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
|
66
|
-
- 0
|
67
|
-
version: "0"
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
68
52
|
requirements: []
|
69
|
-
|
70
53
|
rubyforge_project:
|
71
|
-
rubygems_version: 1.
|
54
|
+
rubygems_version: 1.8.24
|
72
55
|
signing_key:
|
73
56
|
specification_version: 3
|
74
57
|
summary: Plugin/gem that provides comment functionality
|
75
58
|
test_files: []
|
76
|
-
|