the_comments 0.9.9 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +32 -18
- data/app/controllers/concerns/the_comments_controller.rb +1 -1
- data/app/models/concerns/the_comments_base.rb +2 -2
- data/app/models/concerns/the_comments_commentable.rb +4 -0
- data/app/models/concerns/the_comments_states.rb +1 -0
- data/db/migrate/20130101010101_create_comments.rb +1 -1
- data/lib/generators/the_comments/templates/comments_controller.rb +1 -0
- data/lib/generators/the_comments/templates/the_comments.rb +6 -6
- data/lib/the_comments/version.rb +1 -1
- data/the_comments.gemspec +2 -2
- metadata +8 -8
data/README.md
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
# TheComments 1.0.0
|
2
2
|
|
3
|
-
TheComments - just comment system for my Ruby on Rails 4 projects
|
4
|
-
|
5
|
-
P.S: and for me it's best prototype of comment system for Rails 4
|
3
|
+
TheComments - just comment system for my Ruby on Rails 4 projects. [(rubygems)](http://rubygems.org/gems/the_comments)
|
6
4
|
|
7
5
|
## Keywords
|
8
6
|
|
9
|
-
Comments for Rails 4, Comments with threading, Nested Comments, Polymorphic comments, Acts as commentable, Comment functionality, Comments, Threading, Rails 4, Comments with moderation, I hate captcha
|
7
|
+
Comments for Rails 4, Comments with threading, Nested Comments, Polymorphic comments, Acts as commentable, Comment functionality, Comments, Threading, Rails 4, Comments with moderation, I hate captcha!
|
10
8
|
|
11
9
|
## Screenshots
|
12
10
|
|
@@ -21,11 +19,11 @@ Comments for Rails 4, Comments with threading, Nested Comments, Polymorphic comm
|
|
21
19
|
<td width="20%">Recent comments & Denormalization</td>
|
22
20
|
</tr>
|
23
21
|
<tr>
|
24
|
-
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/
|
25
|
-
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/
|
26
|
-
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/
|
27
|
-
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/
|
28
|
-
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/
|
22
|
+
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/the-teacher/the_comments/master/docs/the_comments_view_2.gif" alt="the_comments"></td>
|
23
|
+
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/the-teacher/the_comments/master/docs/the_comments_view_1.gif" alt="the_comments"></td>
|
24
|
+
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/the-teacher/the_comments/master/docs/the_comments_view_4.gif" alt="the_comments"></td>
|
25
|
+
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/the-teacher/the_comments/master/docs/the_comments_view_3.gif" alt="the_comments"></td>
|
26
|
+
<td width="20%"><img width="100%" height="100%" src="https://raw.github.com/the-teacher/the_comments/master/docs/the_comments_view_5.gif" alt="the_comments"></td>
|
29
27
|
</tr>
|
30
28
|
</table>
|
31
29
|
|
@@ -51,6 +49,8 @@ Comments for Rails 4, Comments with threading, Nested Comments, Polymorphic comm
|
|
51
49
|
* [Commentable methods](#commentable-methods)
|
52
50
|
* [Online Support](#online-support)
|
53
51
|
* [About author](#about-author)
|
52
|
+
* [What about specs?](#what-about-specs)
|
53
|
+
|
54
54
|
|
55
55
|
## Installation
|
56
56
|
|
@@ -176,20 +176,22 @@ end
|
|
176
176
|
|
177
177
|
### Any Commentable Model (Page, Blog, Article, User(!) ...)
|
178
178
|
|
179
|
+
Read more about **commentable_title**, **commentable_url** and **commentable_state** methods here: [Denormalization and Recent comments](#denormalization)
|
180
|
+
|
179
181
|
```ruby
|
180
182
|
class Blog < ActiveRecord::Base
|
181
183
|
include TheCommentsCommentable
|
182
184
|
|
183
185
|
def commentable_title
|
184
|
-
# by default:
|
186
|
+
# by default: try(:title) || TheComments.config.default_title
|
185
187
|
# for example: "My first blog post"
|
186
188
|
blog_post_name
|
187
189
|
end
|
188
190
|
|
189
191
|
def commentable_url
|
190
192
|
# by default: ['', self.class.to_s.tableize, self.to_param].join('/')
|
191
|
-
# for example: "blogs/1-my-first-blog-post"
|
192
|
-
[self.class.to_s.tableize, slug_id].join('/')
|
193
|
+
# for example: "/blogs/1-my-first-blog-post"
|
194
|
+
['', self.class.to_s.tableize, slug_id].join('/')
|
193
195
|
end
|
194
196
|
|
195
197
|
def commentable_state
|
@@ -202,6 +204,7 @@ end
|
|
202
204
|
|
203
205
|
### Comment Model
|
204
206
|
|
207
|
+
|
205
208
|
```ruby
|
206
209
|
class Comment < ActiveRecord::Base
|
207
210
|
include TheCommentsBase
|
@@ -264,7 +267,7 @@ end
|
|
264
267
|
* Spam traps instead Captcha. *I hate Captcha*
|
265
268
|
* Blacklists for IP and UserAgent
|
266
269
|
* Denormalization for fast and Request-free Recent comments building
|
267
|
-
* Ready for external content filters (<b>sanitize</b>, <b>RedCloth</b>, <b>Markdown</b
|
270
|
+
* Ready for external content filters (<b>sanitize</b>, <b>RedCloth</b>, <b>Markdown</b>, etc)
|
268
271
|
* Highlighting and Jumping to comment via anchor
|
269
272
|
* Ready for Rails4 (and Rails::Engine)
|
270
273
|
* Ready for JQuery 1.9+
|
@@ -279,7 +282,7 @@ Just look at [Ruby-Toolbox](https://www.ruby-toolbox.com/categories/rails_commen
|
|
279
282
|
* [opinio](https://github.com/Draiken/opinio) - looks better, but there is no threading. I want to have more!
|
280
283
|
* [has_threaded_comments](https://github.com/aarongough/has_threaded_comments) - Nice work! Nice gem! Models, controllers, views, view helper for tree rendering! **But**, last activity 2 years ago, I need few features, I think - I can make it better.
|
281
284
|
|
282
|
-
![TheComments](https://raw.github.com/
|
285
|
+
![TheComments](https://raw.github.com/the-teacher/the_comments/master/docs/the_comments.jpg)
|
283
286
|
|
284
287
|
## Comments, Posted comments, ComComs
|
285
288
|
|
@@ -344,11 +347,11 @@ Set of All <b>COM</b>ments of All <b>COM</b>mentable objects of this User
|
|
344
347
|
|
345
348
|
For building of Recent comments list (for polymorphic relationship) we need to have many additional requests to database. It's classic problem of polymorphic comments.
|
346
349
|
|
347
|
-
I use denormalization of commentable objects
|
350
|
+
I use denormalization of commentable objects to solve this problem.
|
348
351
|
|
349
352
|
My practice shows - We need 3 denormalized fields into comment for (request-free) building of recent comments list:
|
350
353
|
|
351
|
-
<img src="https://raw.github.com/open-cook/
|
354
|
+
<img src="https://raw.github.com/open-cook/the-teacher/master/docs/the_comments_view_5.gif" alt="the_comments">
|
352
355
|
|
353
356
|
* **Comment#commentable_title** - for example: "My first post about Ruby On Rails"
|
354
357
|
* **Comment#commentable_url** - for example: "/posts/1-my-first-post-about-ruby-on-rails"
|
@@ -358,7 +361,7 @@ That is why any **Commentable Model should have few methods** to provide denorma
|
|
358
361
|
|
359
362
|
## Recent comments building
|
360
363
|
|
361
|
-
Denormalization makes
|
364
|
+
Denormalization makes building of Recent comments (for polymorphic relationship) very easy!
|
362
365
|
|
363
366
|
Controller:
|
364
367
|
|
@@ -489,9 +492,20 @@ I need your opinion, ideas, user experience - that is why you can ask me about t
|
|
489
492
|
|
490
493
|
Yes, It's true - I was a school teacher in the past.
|
491
494
|
That's why my login is the-teacher.
|
492
|
-
Now I'm ruby
|
495
|
+
Now I'm ruby/frontend developer and [food-blogger](http://open-cook.ru).
|
493
496
|
I learn, I teach, I make a code. And sorry for my English.
|
494
497
|
|
498
|
+
## What about specs?
|
499
|
+
|
500
|
+
This gem - just first prototype of my ideas about comment system.
|
501
|
+
Unfortunatly, I have no time to write many tests for this gem.
|
502
|
+
Release 1.0.0 works for my pet projects - it's enough for me.
|
503
|
+
If you have a problem with gem and you can to create coverage tests for this problem - I will be happy to get your pull request.
|
504
|
+
|
505
|
+
### Where I can find example of application with the_comments?
|
506
|
+
|
507
|
+
This gem is part of new version of my food-blog about modern russian home cuisine. There is code of my tasty CMS [open-cook](https://github.com/open-cook/open-cook)
|
508
|
+
|
495
509
|
## Contributing
|
496
510
|
|
497
511
|
1. Fork it
|
@@ -70,7 +70,7 @@ module TheCommentsController
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def new
|
73
|
-
@comments = current_user.
|
73
|
+
@comments = current_user.comcoms.with_state(:draft).order('created_at DESC').page(params[:page])
|
74
74
|
render template: 'the_comments/manage'
|
75
75
|
end
|
76
76
|
|
@@ -63,7 +63,7 @@ module TheCommentsBase
|
|
63
63
|
|
64
64
|
def update_cache_counters
|
65
65
|
user.try :recalculate_my_comments_counter!
|
66
|
-
commentable.try :increment!,
|
67
|
-
holder.try :increment!,
|
66
|
+
commentable.try :increment!, "#{state}_comments_count"
|
67
|
+
holder.try :increment!, "#{state}_comcoms_count"
|
68
68
|
end
|
69
69
|
end
|
@@ -9,7 +9,10 @@ module TheCommentsCommentable
|
|
9
9
|
after_save :denormalize_for_comments
|
10
10
|
end
|
11
11
|
|
12
|
+
# Default Denormalization methods
|
13
|
+
# Overwrite it with your Application
|
12
14
|
def commentable_title
|
15
|
+
# My first blog post
|
13
16
|
try(:title) || TheComments.config.default_title
|
14
17
|
end
|
15
18
|
|
@@ -23,6 +26,7 @@ module TheCommentsCommentable
|
|
23
26
|
try(:state)
|
24
27
|
end
|
25
28
|
|
29
|
+
# Helper methods
|
26
30
|
def comments_sum
|
27
31
|
published_comments_count + draft_comments_count
|
28
32
|
end
|
@@ -42,6 +42,7 @@ module TheCommentsStates
|
|
42
42
|
after_transition [:draft, :published] => :deleted do |comment|
|
43
43
|
ids = comment.self_and_descendants.map(&:id)
|
44
44
|
Comment.where(id: ids).update_all(state: :deleted)
|
45
|
+
|
45
46
|
@owner.try :recalculate_my_comments_counter!
|
46
47
|
@holder.try :recalculate_comcoms_counters!
|
47
48
|
@commentable.try :recalculate_comments_counters!
|
@@ -76,7 +76,7 @@ class CreateComments < ActiveRecord::Migration
|
|
76
76
|
t.integer :spam_comcoms_count, default: 0
|
77
77
|
end
|
78
78
|
|
79
|
-
# Uncomment this. Add fields Commentable Models
|
79
|
+
# Uncomment this. Add fields to Commentable Models
|
80
80
|
#
|
81
81
|
# [:posts, :blogs, :articles, :pages].each do |table_name|
|
82
82
|
# change_table table_name do |t|
|
@@ -15,6 +15,7 @@ class CommentsController < ApplicationController
|
|
15
15
|
# Application side methods:
|
16
16
|
# Overwrite following default methods if it's need
|
17
17
|
# Following methods based on *current_user* helper method
|
18
|
+
# Look here: https://github.com/the-teacher/the_comments/blob/master/app/controllers/concerns/the_comments_controller.rb#L62
|
18
19
|
#
|
19
20
|
# [:my, :incoming, :edit, :trash]
|
20
21
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# TheComments.config.param_name => value
|
2
2
|
|
3
3
|
TheComments.configure do |config|
|
4
|
-
config.max_reply_depth = 3
|
5
|
-
config.tolerance_time = 5
|
6
|
-
config.default_state = :draft
|
7
|
-
config.default_owner_state = :published
|
8
|
-
config.empty_inputs = [:commentBody]
|
9
|
-
config.default_title = 'Undefined title'
|
4
|
+
config.max_reply_depth = 3 # comments tree depth
|
5
|
+
config.tolerance_time = 5 # sec - after this delay user can post a comment
|
6
|
+
config.default_state = :draft # default state for comment
|
7
|
+
config.default_owner_state = :published # default state for comment for Moderator
|
8
|
+
config.empty_inputs = [:commentBody] # array of spam trap fields
|
9
|
+
config.default_title = 'Undefined title' # default commentable_title for denormalization
|
10
10
|
end
|
data/lib/the_comments/version.rb
CHANGED
data/the_comments.gemspec
CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.version = TheComments::VERSION
|
9
9
|
gem.authors = ["Ilya N. Zykin"]
|
10
10
|
gem.email = ["zykin-ilya@ya.ru"]
|
11
|
-
gem.description = %q{
|
12
|
-
gem.summary = %q{
|
11
|
+
gem.description = %q{ Comments with threading for Rails 4 }
|
12
|
+
gem.summary = %q{ the_comments by the-teacher }
|
13
13
|
gem.homepage = "https://github.com/open-cook/the_comments"
|
14
14
|
|
15
15
|
gem.files = `git ls-files`.split($/)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: the_comments
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: state_machine
|
16
|
-
requirement: &
|
16
|
+
requirement: &78157620 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *78157620
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: the_sortable_tree
|
27
|
-
requirement: &
|
27
|
+
requirement: &78157410 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,8 +32,8 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
description: ! '
|
35
|
+
version_requirements: *78157410
|
36
|
+
description: ! ' Comments with threading for Rails 4 '
|
37
37
|
email:
|
38
38
|
- zykin-ilya@ya.ru
|
39
39
|
executables: []
|
@@ -110,5 +110,5 @@ rubyforge_project:
|
|
110
110
|
rubygems_version: 1.8.15
|
111
111
|
signing_key:
|
112
112
|
specification_version: 3
|
113
|
-
summary:
|
113
|
+
summary: the_comments by the-teacher
|
114
114
|
test_files: []
|