fuck_comments 2.3.4
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 +7 -0
- data/.gitignore +30 -0
- data/.ruby-gemset.example +1 -0
- data/.ruby-version.example +1 -0
- data/.rvmrc.example +1 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +338 -0
- data/Rakefile +1 -0
- data/app/assets/javascripts/the_comments.js.coffee +108 -0
- data/app/assets/javascripts/the_comments_manage.js.coffee +27 -0
- data/app/assets/stylesheets/the_comments.css.scss +248 -0
- data/app/controllers/_templates_/comments_controller.rb +44 -0
- data/app/controllers/concerns/the_comments/controller.rb +197 -0
- data/app/controllers/concerns/the_comments/view_token.rb +20 -0
- data/app/helpers/render_comments_tree_helper.rb +111 -0
- data/app/models/_templates_/comment.rb +38 -0
- data/app/models/concerns/the_comments/comment.rb +116 -0
- data/app/models/concerns/the_comments/comment_states.rb +80 -0
- data/app/models/concerns/the_comments/commentable.rb +69 -0
- data/app/models/concerns/the_comments/user.rb +56 -0
- data/app/views/the_comments/_tree.html.erb +3 -0
- data/app/views/the_comments/haml/_additional_info.html.haml +13 -0
- data/app/views/the_comments/haml/_comment.html.haml +1 -0
- data/app/views/the_comments/haml/_comment_body.html.haml +25 -0
- data/app/views/the_comments/haml/_comment_edit.html.haml +26 -0
- data/app/views/the_comments/haml/_form.html.haml +8 -0
- data/app/views/the_comments/haml/_guest_form.html.haml +22 -0
- data/app/views/the_comments/haml/_logined_form.html.haml +18 -0
- data/app/views/the_comments/haml/_manage_controls.html.haml +30 -0
- data/app/views/the_comments/haml/_sidebar.html.haml +9 -0
- data/app/views/the_comments/haml/_sidebar_admin.html.haml +12 -0
- data/app/views/the_comments/haml/_sidebar_backlink.html.haml +3 -0
- data/app/views/the_comments/haml/_sidebar_user.html.haml +29 -0
- data/app/views/the_comments/haml/_tree.html.haml +16 -0
- data/app/views/the_comments/haml/manage.html.haml +26 -0
- data/app/views/the_comments/slim/_additional_info.html.slim +13 -0
- data/app/views/the_comments/slim/_comment.html.slim +1 -0
- data/app/views/the_comments/slim/_comment_body.html.slim +24 -0
- data/app/views/the_comments/slim/_comment_edit.html.slim +26 -0
- data/app/views/the_comments/slim/_form.html.slim +8 -0
- data/app/views/the_comments/slim/_guest_form.html.slim +22 -0
- data/app/views/the_comments/slim/_logined_form.html.slim +18 -0
- data/app/views/the_comments/slim/_manage_controls.html.slim +30 -0
- data/app/views/the_comments/slim/_sidebar.html.slim +9 -0
- data/app/views/the_comments/slim/_sidebar_admin.html.slim +12 -0
- data/app/views/the_comments/slim/_sidebar_backlink.html.slim +3 -0
- data/app/views/the_comments/slim/_sidebar_user.html.slim +29 -0
- data/app/views/the_comments/slim/_tree.html.slim +16 -0
- data/app/views/the_comments/slim/index.html.slim +18 -0
- data/app/views/the_comments/slim/manage.html.slim +26 -0
- data/app/views/the_comments/slim/my_comments.html.slim +28 -0
- data/config/initializers/the_comments.rb +15 -0
- data/config/locales/en.yml +68 -0
- data/config/locales/ru.yml +71 -0
- data/config/routes.rb +38 -0
- data/db/migrate/20130101010101_the_comments_change_user.rb +18 -0
- data/db/migrate/20130101010102_the_comments_create_comments.rb +50 -0
- data/db/migrate/20130101010103_the_comments_change_commentable.rb +13 -0
- data/docs/admin_ui_installation.md +145 -0
- data/docs/advanced_installation.md +185 -0
- data/docs/comment_api.md +58 -0
- data/docs/commentable_api.md +59 -0
- data/docs/config_file.md +27 -0
- data/docs/content_preprocessors.md +73 -0
- data/docs/customazation_of_views.md +30 -0
- data/docs/denormalization_and_recent_comments.md +40 -0
- data/docs/documentation.md +29 -0
- data/docs/generators.md +74 -0
- data/docs/pagination.md +123 -0
- data/docs/routes.md +77 -0
- data/docs/screencast.jpg +0 -0
- data/docs/the_comments.jpg +0 -0
- data/docs/the_comments_view_1.gif +0 -0
- data/docs/the_comments_view_2.gif +0 -0
- data/docs/the_comments_view_3.gif +0 -0
- data/docs/the_comments_view_4.gif +0 -0
- data/docs/the_comments_view_5.gif +0 -0
- data/docs/user_api.md +75 -0
- data/docs/what_is_comcoms.md +63 -0
- data/docs/whats_wrong_with_other_gems.md +28 -0
- data/docs/where_is_example_application.md +37 -0
- data/gem_version.rb +3 -0
- data/lib/generators/the_comments/USAGE +44 -0
- data/lib/generators/the_comments/the_comments_generator.rb +56 -0
- data/lib/generators/the_comments/views_generator.rb +79 -0
- data/lib/the_comments/config.rb +39 -0
- data/lib/the_comments/version.rb +1 -0
- data/lib/the_comments.rb +27 -0
- data/spec/dummy_app/.gitignore +18 -0
- data/spec/dummy_app/.rspec +1 -0
- data/spec/dummy_app/Gemfile +43 -0
- data/spec/dummy_app/README.md +33 -0
- data/spec/dummy_app/Rakefile +6 -0
- data/spec/dummy_app/app/assets/images/.keep +0 -0
- data/spec/dummy_app/app/assets/javascripts/admin_panel.js +5 -0
- data/spec/dummy_app/app/assets/javascripts/application.js +16 -0
- data/spec/dummy_app/app/assets/stylesheets/admin_panel.css +3 -0
- data/spec/dummy_app/app/assets/stylesheets/app.css.scss +4 -0
- data/spec/dummy_app/app/assets/stylesheets/application.css +16 -0
- data/spec/dummy_app/app/controllers/application_controller.rb +7 -0
- data/spec/dummy_app/app/controllers/comments_controller.rb +28 -0
- data/spec/dummy_app/app/controllers/concerns/.keep +0 -0
- data/spec/dummy_app/app/controllers/posts_controller.rb +13 -0
- data/spec/dummy_app/app/controllers/users_controller.rb +7 -0
- data/spec/dummy_app/app/helpers/application_helper.rb +2 -0
- data/spec/dummy_app/app/mailers/.keep +0 -0
- data/spec/dummy_app/app/models/.keep +0 -0
- data/spec/dummy_app/app/models/comment.rb +32 -0
- data/spec/dummy_app/app/models/concerns/.keep +0 -0
- data/spec/dummy_app/app/models/post.rb +17 -0
- data/spec/dummy_app/app/models/user.rb +21 -0
- data/spec/dummy_app/app/views/layouts/admin.html.haml +25 -0
- data/spec/dummy_app/app/views/layouts/application.html.haml +20 -0
- data/spec/dummy_app/app/views/posts/index.html.haml +22 -0
- data/spec/dummy_app/app/views/posts/show.html.haml +7 -0
- data/spec/dummy_app/bin/bundle +3 -0
- data/spec/dummy_app/bin/rails +4 -0
- data/spec/dummy_app/bin/rake +4 -0
- data/spec/dummy_app/config/application.rb +23 -0
- data/spec/dummy_app/config/boot.rb +4 -0
- data/spec/dummy_app/config/database.yml +11 -0
- data/spec/dummy_app/config/environment.rb +5 -0
- data/spec/dummy_app/config/environments/development.rb +29 -0
- data/spec/dummy_app/config/environments/production.rb +80 -0
- data/spec/dummy_app/config/environments/test.rb +36 -0
- data/spec/dummy_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy_app/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy_app/config/initializers/inflections.rb +16 -0
- data/spec/dummy_app/config/initializers/mime_types.rb +5 -0
- data/spec/dummy_app/config/initializers/secret_token.rb +12 -0
- data/spec/dummy_app/config/initializers/session_store.rb +3 -0
- data/spec/dummy_app/config/initializers/sorcery.rb +437 -0
- data/spec/dummy_app/config/initializers/the_comments.rb +15 -0
- data/spec/dummy_app/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy_app/config/locales/en.yml +23 -0
- data/spec/dummy_app/config/routes.rb +19 -0
- data/spec/dummy_app/config.ru +4 -0
- data/spec/dummy_app/db/migrate/20130712061503_sorcery_core.rb +16 -0
- data/spec/dummy_app/db/migrate/20130712065951_create_posts.rb +11 -0
- data/spec/dummy_app/db/migrate/20131027185332_change_user.the_comments_engine.rb +19 -0
- data/spec/dummy_app/db/migrate/20131027185333_create_comments.the_comments_engine.rb +51 -0
- data/spec/dummy_app/db/migrate/20131027185334_change_commentable.the_comments_engine.rb +14 -0
- data/spec/dummy_app/db/schema.rb +74 -0
- data/spec/dummy_app/db/seeds.rb +42 -0
- data/spec/dummy_app/lib/assets/.keep +0 -0
- data/spec/dummy_app/lib/tasks/.keep +0 -0
- data/spec/dummy_app/lib/tasks/app_bootstrap.rake +15 -0
- data/spec/dummy_app/log/.keep +0 -0
- data/spec/dummy_app/public/404.html +58 -0
- data/spec/dummy_app/public/422.html +58 -0
- data/spec/dummy_app/public/500.html +57 -0
- data/spec/dummy_app/public/favicon.ico +0 -0
- data/spec/dummy_app/public/robots.txt +5 -0
- data/spec/dummy_app/spec/factories/post.rb +6 -0
- data/spec/dummy_app/spec/factories/user.rb +6 -0
- data/spec/dummy_app/spec/models/user_counters_spec.rb +339 -0
- data/spec/dummy_app/spec/spec_helper.rb +29 -0
- data/spec/dummy_app/test/controllers/.keep +0 -0
- data/spec/dummy_app/test/fixtures/.keep +0 -0
- data/spec/dummy_app/test/helpers/.keep +0 -0
- data/spec/dummy_app/test/integration/.keep +0 -0
- data/spec/dummy_app/test/mailers/.keep +0 -0
- data/spec/dummy_app/test/models/.keep +0 -0
- data/spec/dummy_app/test/test_helper.rb +15 -0
- data/spec/dummy_app/vendor/assets/javascripts/.keep +0 -0
- data/spec/dummy_app/vendor/assets/stylesheets/.keep +0 -0
- data/the_comments.gemspec +23 -0
- data/views_converter.rb +16 -0
- metadata +332 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#### INSTALLATION
|
|
2
|
+
* :white_check_mark: [ADVANCED INSTALLATION](advanced_installation.md)
|
|
3
|
+
* :white_check_mark: [ADMIN UI INSTALLATION](admin_ui_installation.md)
|
|
4
|
+
* :white_check_mark: [Routing](routes.md)
|
|
5
|
+
* :white_check_mark: [Generators](generators.md)
|
|
6
|
+
|
|
7
|
+
#### API
|
|
8
|
+
* :white_check_mark: [User API](user_api.md)
|
|
9
|
+
* :white_check_mark: [Comment API](comment_api.md)
|
|
10
|
+
* :white_check_mark: [Commentable API](commentable_api.md)
|
|
11
|
+
|
|
12
|
+
#### Understanding
|
|
13
|
+
* :white_check_mark: [What is ComComs?](what_is_comcoms.md)
|
|
14
|
+
* :white_check_mark: [Denormalization and Recent comments](denormalization_and_recent_comments.md)
|
|
15
|
+
* :white_check_mark: [What's wrong with other gems?](whats_wrong_with_other_gems.md)
|
|
16
|
+
* :white_check_mark: [Why TheComments is better than others gems?](whats_wrong_with_other_gems.md#why-thecomments-is-better-than-others-gems)
|
|
17
|
+
|
|
18
|
+
#### Customazation
|
|
19
|
+
* :white_check_mark: [Views](customazation_of_views.md)
|
|
20
|
+
* :white_check_mark: [Text Preprocessors - Sanitize, Markdown etc.](content_preprocessors.md)
|
|
21
|
+
|
|
22
|
+
#### Configuration
|
|
23
|
+
* :white_check_mark: [the_comments.rb config file](config_file.md)
|
|
24
|
+
|
|
25
|
+
#### Q&A
|
|
26
|
+
* :white_check_mark: [I want not to use kaminari for Admin UI](pagination.md)
|
|
27
|
+
* :white_check_mark: [Where is example application?](where_is_example_application.md)
|
|
28
|
+
* :white_check_mark: [How can I run tests?](where_is_example_application.md#run-tests)
|
|
29
|
+
|
data/docs/generators.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
← [documentation](documentation.md)
|
|
2
|
+
|
|
3
|
+
## Generators
|
|
4
|
+
|
|
5
|
+
```ruby
|
|
6
|
+
rails g the_comments NAME
|
|
7
|
+
rails g the_comments:views NAME
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
#### Migrations
|
|
11
|
+
|
|
12
|
+
```ruby
|
|
13
|
+
rake the_comments_engine:install:migrations
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### Full list
|
|
17
|
+
|
|
18
|
+
```ruby
|
|
19
|
+
rails g the_comments --help
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
#### Main
|
|
23
|
+
|
|
24
|
+
```ruby
|
|
25
|
+
rails g the_comments install
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
This will create:
|
|
29
|
+
|
|
30
|
+
* config/initializers/the_comments.rb
|
|
31
|
+
* app/controllers/comments_controller.rb
|
|
32
|
+
* app/models/comment.rb
|
|
33
|
+
|
|
34
|
+
#### Controllers
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
rails g the_comments controllers
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This will create:
|
|
41
|
+
|
|
42
|
+
* app/controllers/comments_controller.rb
|
|
43
|
+
|
|
44
|
+
#### Models
|
|
45
|
+
|
|
46
|
+
```ruby
|
|
47
|
+
rails g the_comments models
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This will create:
|
|
51
|
+
|
|
52
|
+
* app/models/comment.rb
|
|
53
|
+
|
|
54
|
+
#### Config
|
|
55
|
+
|
|
56
|
+
```ruby
|
|
57
|
+
rails g the_comments config
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
#### Locals
|
|
61
|
+
|
|
62
|
+
```ruby
|
|
63
|
+
rails g the_comments locales
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
#### Views
|
|
67
|
+
|
|
68
|
+
```ruby
|
|
69
|
+
rails g the_comments:views js
|
|
70
|
+
rails g the_comments:views css
|
|
71
|
+
rails g the_comments:views assets
|
|
72
|
+
rails g the_comments:views helper
|
|
73
|
+
rails g the_comments:views views
|
|
74
|
+
```
|
data/docs/pagination.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
← [documentation](documentation.md)
|
|
2
|
+
|
|
3
|
+
## I want not to use kaminari for Admin UI
|
|
4
|
+
|
|
5
|
+
By default we use Kaminari pagination for Admin UI.
|
|
6
|
+
|
|
7
|
+
But you can change this. For example, your **comments_controller.rb** looks like this:
|
|
8
|
+
|
|
9
|
+
**app/controllers/comments_controller.rb**
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
class CommentsController < ApplicationController
|
|
13
|
+
# layout 'admin'
|
|
14
|
+
|
|
15
|
+
# Define your restrict methods and use them like this:
|
|
16
|
+
#
|
|
17
|
+
# before_action :user_required, except: %w[index create]
|
|
18
|
+
# before_action :owner_required, except: %w[index create]
|
|
19
|
+
# before_action :admin_required, only: %w[total_draft total_published total_deleted total_spam]
|
|
20
|
+
|
|
21
|
+
include TheComments::Controller
|
|
22
|
+
|
|
23
|
+
# >>> include TheComments::Controller <<<
|
|
24
|
+
# (!) Almost all methods based on *current_user* method
|
|
25
|
+
#
|
|
26
|
+
# 1. Controller's public methods list:
|
|
27
|
+
# You can redifine it for your purposes
|
|
28
|
+
# public
|
|
29
|
+
# %w[ manage index create edit update ]
|
|
30
|
+
# %w[ my_comments my_draft my_published ]
|
|
31
|
+
# %w[ draft published deleted spam ]
|
|
32
|
+
# %w[ to_draft to_published to_deleted to_spam ]
|
|
33
|
+
# %w[ total_draft total_published total_deleted total_spam ]
|
|
34
|
+
#
|
|
35
|
+
#
|
|
36
|
+
# 2. Controller's private methods list:
|
|
37
|
+
# You can redifine it for your purposes
|
|
38
|
+
#
|
|
39
|
+
# private
|
|
40
|
+
# %w[ comment_template comment_partial ]
|
|
41
|
+
# %w[ denormalized_fields request_data_for_comment define_commentable ]
|
|
42
|
+
# %w[ comment_params patch_comment_params ]
|
|
43
|
+
# %w[ ajax_requests_required cookies_required ]
|
|
44
|
+
# %w[ empty_trap_required tolerance_time_required ]
|
|
45
|
+
|
|
46
|
+
# KAMINARI pagination:
|
|
47
|
+
# following methods based on gem "kaminari"
|
|
48
|
+
# You should redefine them if you use something else
|
|
49
|
+
#
|
|
50
|
+
# public
|
|
51
|
+
# %w[ manage index edit ]
|
|
52
|
+
# %w[ draft published deleted spam ]
|
|
53
|
+
# %w[ my_comments my_draft my_published ]
|
|
54
|
+
# %w[ total_draft total_published total_deleted total_spam ]
|
|
55
|
+
end
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
There is we can see comments about kaminari. So, we can try to change it.
|
|
59
|
+
|
|
60
|
+
There is example how it can be in your real app:
|
|
61
|
+
|
|
62
|
+
```ruby
|
|
63
|
+
class CommentsController < ApplicationController
|
|
64
|
+
layout 'admin'
|
|
65
|
+
|
|
66
|
+
before_action :user_required, except: %w[index create]
|
|
67
|
+
before_action :owner_required, except: %w[index create]
|
|
68
|
+
before_action :admin_required, only: %w[total_draft total_published total_deleted total_spam]
|
|
69
|
+
|
|
70
|
+
include TheComments::Controller
|
|
71
|
+
|
|
72
|
+
public
|
|
73
|
+
|
|
74
|
+
def index
|
|
75
|
+
@comments = ::Comment.with_state(:published).recent.super_paginator(params)
|
|
76
|
+
render comment_template(:index)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def manage
|
|
80
|
+
@comments = current_user.comcoms.active.recent.super_paginator(params)
|
|
81
|
+
render comment_template(:manage)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def my_comments
|
|
85
|
+
@comments = current_user.my_comments.active.recent.super_paginator(params)
|
|
86
|
+
render comment_template(:my_comments)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def edit
|
|
90
|
+
@comments = current_user.comcoms.where(id: params[:id]).super_paginator(params)
|
|
91
|
+
render comment_template(:manage)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
%w[draft published deleted].each do |state|
|
|
95
|
+
define_method "#{state}" do
|
|
96
|
+
@comments = current_user.comcoms.with_state(state).recent.super_paginator(params)
|
|
97
|
+
render comment_template(:manage)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
define_method "total_#{state}" do
|
|
101
|
+
@comments = ::Comment.with_state(state).recent.super_paginator(params)
|
|
102
|
+
render comment_template(:manage)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
unless state == 'deleted'
|
|
106
|
+
define_method "my_#{state}" do
|
|
107
|
+
@comments = current_user.my_comments.with_state(state).recent.super_paginator(params)
|
|
108
|
+
render comment_template(:my_comments)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def spam
|
|
114
|
+
@comments = current_user.comcoms.where(spam: true).recent.super_paginator(params)
|
|
115
|
+
render comment_template(:manage)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def total_spam
|
|
119
|
+
@comments = ::Comment.where(spam: true).recent.super_paginator(params)
|
|
120
|
+
render comment_template(:manage)
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
```
|
data/docs/routes.md
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
← [documentation](documentation.md)
|
|
2
|
+
|
|
3
|
+
## TheComments Routes
|
|
4
|
+
|
|
5
|
+
**config/routes.rb**
|
|
6
|
+
|
|
7
|
+
```ruby
|
|
8
|
+
MyApp::Application.routes.draw do
|
|
9
|
+
root 'posts#index'
|
|
10
|
+
resources :posts
|
|
11
|
+
|
|
12
|
+
# ...
|
|
13
|
+
|
|
14
|
+
# TheComments routes
|
|
15
|
+
concern :user_comments, TheComments::UserRoutes.new
|
|
16
|
+
concern :admin_comments, TheComments::AdminRoutes.new
|
|
17
|
+
resources :comments, concerns: [:user_comments, :admin_comments]
|
|
18
|
+
end
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
And after that you can see routes:
|
|
22
|
+
|
|
23
|
+
```ruby
|
|
24
|
+
rake routes | grep comments
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```ruby
|
|
28
|
+
comments / TheComments::Engine
|
|
29
|
+
to_spam_comment POST /comments/:id/to_spam(.:format) comments#to_spam
|
|
30
|
+
to_draft_comment POST /comments/:id/to_draft(.:format) comments#to_draft
|
|
31
|
+
to_published_comment POST /comments/:id/to_published(.:format) comments#to_published
|
|
32
|
+
to_deleted_comment DELETE /comments/:id/to_deleted(.:format) comments#to_deleted
|
|
33
|
+
manage_comments GET /comments/manage(.:format) comments#manage
|
|
34
|
+
my_draft_comments GET /comments/my_draft(.:format) comments#my_draft
|
|
35
|
+
my_published_comments GET /comments/my_published(.:format) comments#my_published
|
|
36
|
+
my_comments_comments GET /comments/my_comments(.:format) comments#my_comments
|
|
37
|
+
total_draft_comments GET /comments/total_draft(.:format) comments#total_draft
|
|
38
|
+
total_published_comments GET /comments/total_published(.:format) comments#total_published
|
|
39
|
+
total_deleted_comments GET /comments/total_deleted(.:format) comments#total_deleted
|
|
40
|
+
total_spam_comments GET /comments/total_spam(.:format) comments#total_spam
|
|
41
|
+
draft_comments GET /comments/draft(.:format) comments#draft
|
|
42
|
+
published_comments GET /comments/published(.:format) comments#published
|
|
43
|
+
deleted_comments GET /comments/deleted(.:format) comments#deleted
|
|
44
|
+
spam_comments GET /comments/spam(.:format) comments#spam
|
|
45
|
+
comments GET /comments(.:format) comments#index
|
|
46
|
+
POST /comments(.:format) comments#create
|
|
47
|
+
new_comment GET /comments/new(.:format) comments#new
|
|
48
|
+
edit_comment GET /comments/:id/edit(.:format) comments#edit
|
|
49
|
+
comment GET /comments/:id(.:format) comments#show
|
|
50
|
+
PATCH /comments/:id(.:format) comments#update
|
|
51
|
+
PUT /comments/:id(.:format) comments#update
|
|
52
|
+
DELETE /comments/:id(.:format) comments#destroy
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
And now you can use url helpers with 2 ways:
|
|
56
|
+
|
|
57
|
+
### Way 1. Url Helpers
|
|
58
|
+
|
|
59
|
+
```ruby
|
|
60
|
+
= link_to 'link', comments_path
|
|
61
|
+
= link_to 'link', manage_comments_path
|
|
62
|
+
= link_to 'link', new_comment_path
|
|
63
|
+
|
|
64
|
+
= link_to 'link', comment_path(@comment)
|
|
65
|
+
= link_to 'link', to_spam_comment_path(@comment)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Way 2. Array notation
|
|
69
|
+
|
|
70
|
+
```ruby
|
|
71
|
+
= link_to 'link', [:index, :comments]
|
|
72
|
+
= link_to 'link', [:manage, :comments]
|
|
73
|
+
= link_to 'link', [:draft, :comments]
|
|
74
|
+
|
|
75
|
+
= link_to 'link', [@comment]
|
|
76
|
+
= link_to 'link', [:to_spam, @comment]
|
|
77
|
+
```
|
data/docs/screencast.jpg
ADDED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
data/docs/user_api.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
← [documentation](documentation.md)
|
|
2
|
+
|
|
3
|
+
### User API
|
|
4
|
+
|
|
5
|
+
**When User is not commentable model**
|
|
6
|
+
|
|
7
|
+
```ruby
|
|
8
|
+
class User < ActiveRecord::Base
|
|
9
|
+
include TheCommentsUser
|
|
10
|
+
|
|
11
|
+
has_many :posts # commentable model
|
|
12
|
+
has_many :products # commentable model
|
|
13
|
+
end
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
:warning: Please, read this: [What is ComComs?](what_is_comcoms.md)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
We can use following methods
|
|
20
|
+
|
|
21
|
+
```ruby
|
|
22
|
+
@user = User.first
|
|
23
|
+
|
|
24
|
+
@user.comcoms #=> all comments for posts and products, where user is owner
|
|
25
|
+
|
|
26
|
+
# cache counters
|
|
27
|
+
@user.draft_comcoms_count # => 1
|
|
28
|
+
@user.published_comcoms_count # => 5
|
|
29
|
+
@user.deleted_comcoms_count # => 3
|
|
30
|
+
@user.spam_comcoms_count # => 2
|
|
31
|
+
|
|
32
|
+
# equal values, but with request to database
|
|
33
|
+
@user.comcoms.with_state([:draft]).count # => 1
|
|
34
|
+
@user.comcoms.with_state([:published]).count # => 5
|
|
35
|
+
@user.comcoms.with_state([:deleted]).count # => 3
|
|
36
|
+
@user.comcoms.where(spam: true).count # => 2
|
|
37
|
+
|
|
38
|
+
# draft and published comments
|
|
39
|
+
# written by this user
|
|
40
|
+
@user.my_comments # => ActiveRecord::Relation
|
|
41
|
+
|
|
42
|
+
# cache counters for comments
|
|
43
|
+
# written by this user
|
|
44
|
+
# there is no cache counter for deleted state!
|
|
45
|
+
@user.my_draft_comments_count # => 3
|
|
46
|
+
@user.my_published_comments_count # => 7
|
|
47
|
+
|
|
48
|
+
# equal values, but with request to database
|
|
49
|
+
@user.my_draft_comments.count # => 3
|
|
50
|
+
@user.my_published_comments.count # => 7
|
|
51
|
+
@user.my_deleted_comments.count # => 1
|
|
52
|
+
|
|
53
|
+
# helper methods to get comments
|
|
54
|
+
# written by this user
|
|
55
|
+
@user.my_draft_comments # => ActiveRecord::Relation
|
|
56
|
+
@user.my_published_comments # => ActiveRecord::Relation
|
|
57
|
+
@user.my_deleted_comments # => ActiveRecord::Relation
|
|
58
|
+
|
|
59
|
+
# recalculate cache counters
|
|
60
|
+
@user.recalculate_my_comments_counter!
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**When User is commentable model**
|
|
64
|
+
|
|
65
|
+
```ruby
|
|
66
|
+
class User < ActiveRecord::Base
|
|
67
|
+
include TheCommentsUser
|
|
68
|
+
include TheCommentsCommentable
|
|
69
|
+
|
|
70
|
+
has_many :posts # commentable model
|
|
71
|
+
has_many :products # commentable model
|
|
72
|
+
end
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
you should to use following instruction [Commentable API](commentable_api.md)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
← [documentation](documentation.md)
|
|
2
|
+
|
|
3
|
+
### What is ComComs?
|
|
4
|
+
|
|
5
|
+
:warning: **comcoms** - is main method to get all comments related with user's commentable models.
|
|
6
|
+
|
|
7
|
+
:warning: **comments** - is main method to get comments related with any commentable model.
|
|
8
|
+
|
|
9
|
+
**ComComs** - **com**ments of **com**mentable models
|
|
10
|
+
|
|
11
|
+
ComComs are all incoming comments for all models, where this user is owner.
|
|
12
|
+
|
|
13
|
+
For example, some user **has_many :posts**, and **has_many :products** - all comments for all user's posts and all user's products called as **comcoms**.
|
|
14
|
+
|
|
15
|
+
#### Why we need ComComs?
|
|
16
|
+
|
|
17
|
+
User model can be commentable too. For example to build user's "public wall" (like tweets list for current user).
|
|
18
|
+
|
|
19
|
+
And we should to separate **comments** attached to user model (tweets) and comments attached to any another user's model.
|
|
20
|
+
|
|
21
|
+
That is why User model in-fact has following relationship declarations:
|
|
22
|
+
|
|
23
|
+
```ruby
|
|
24
|
+
class User < ActiveRecord::Base
|
|
25
|
+
has_many :comcoms, class_name: :Comment, foreign_key: :holder_id
|
|
26
|
+
|
|
27
|
+
# and if User model is commentable model
|
|
28
|
+
# has_many :comments, as: :commentable
|
|
29
|
+
|
|
30
|
+
has_many :posts
|
|
31
|
+
has_many :products
|
|
32
|
+
end
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
in real application it should be described like this:
|
|
36
|
+
|
|
37
|
+
```ruby
|
|
38
|
+
class User < ActiveRecord::Base
|
|
39
|
+
include TheCommentsUser
|
|
40
|
+
include TheCommentsCommentable
|
|
41
|
+
|
|
42
|
+
has_many :posts
|
|
43
|
+
has_many :products
|
|
44
|
+
end
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
But in most popular situation User model should not be commentable, and you should use only **comcoms** method to get all comments related with this user:
|
|
48
|
+
|
|
49
|
+
```ruby
|
|
50
|
+
class User < ActiveRecord::Base
|
|
51
|
+
include TheCommentsUser
|
|
52
|
+
|
|
53
|
+
has_many :posts
|
|
54
|
+
has_many :products
|
|
55
|
+
end
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
and later in your application
|
|
59
|
+
|
|
60
|
+
```ruby
|
|
61
|
+
@user = User.find params[:id]
|
|
62
|
+
@user.comcoms.count # => 42
|
|
63
|
+
```
|