commentui 0.1.01
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +91 -0
- data/Rakefile +22 -0
- data/app/assets/config/commentui_manifest.js +2 -0
- data/app/assets/javascripts/commentui/application.js +13 -0
- data/app/assets/stylesheets/commentui/application.css +15 -0
- data/app/controllers/commentui/application_controller.rb +26 -0
- data/app/controllers/commentui/comments_controller.rb +63 -0
- data/app/models/commentui/application_record.rb +5 -0
- data/app/models/commentui/comment.rb +26 -0
- data/app/models/commentui/thread.rb +10 -0
- data/config/initializers/commentui.rb +21 -0
- data/config/routes.rb +8 -0
- data/db/migrate/20191012044238_create_commentui_threads.rb +14 -0
- data/db/migrate/20191012050923_create_commentui_comments.rb +27 -0
- data/lib/commentui.rb +35 -0
- data/lib/commentui/acts_as_commentuiable.rb +22 -0
- data/lib/commentui/acts_as_commentuier.rb +26 -0
- data/lib/commentui/engine.rb +10 -0
- data/lib/commentui/version.rb +3 -0
- data/lib/initializers/pagy.rb +170 -0
- data/lib/tasks/commentui_tasks.rake +16 -0
- metadata +220 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1bca51f6161bc71cf5cf350f50c64ad10eb49415f4ba69216904f66508ca3c55
|
4
|
+
data.tar.gz: '02900136895d81f1b3a4c3e501466b57785568dd727663f87214b09b5887fc80'
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 44c26ef6404f40348fada9c1f6c42ffa7ae37043776103ede7574359575856b9984ab1efe9d4170f1743fa2acf51a57503efc7c72912613fd5f562373a0be57c
|
7
|
+
data.tar.gz: 77432261dc67cf8a35441914166fd43ab6bcaed86b7518b39beec31c69137f81f870cb9a991baf333d9e8112b45350530eadc6bb10f4700c4d1f73b9d65de732
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2019 Huuphuoc19
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# Commentui
|
2
|
+
A simple comment API gem
|
3
|
+
|
4
|
+
## Installation
|
5
|
+
### 1. Gem install
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
```ruby
|
9
|
+
gem 'commentui', "~> 0.1"
|
10
|
+
```
|
11
|
+
|
12
|
+
And then execute:
|
13
|
+
```bash
|
14
|
+
$ bundle install
|
15
|
+
```
|
16
|
+
Or install it yourself as:
|
17
|
+
```bash
|
18
|
+
$ gem install commentui
|
19
|
+
```
|
20
|
+
### 2. Migrations
|
21
|
+
Run the following [command](https://edgeguides.rubyonrails.org/engines.html#engine-setup) to copy Commentui's migrations to your application:
|
22
|
+
```bash
|
23
|
+
$ bundle exec rake commentui:install:migrations
|
24
|
+
```
|
25
|
+
|
26
|
+
|
27
|
+
Then run migrate database command:
|
28
|
+
```bash
|
29
|
+
$ rake db:migrate
|
30
|
+
```
|
31
|
+
|
32
|
+
To remove engine migration, run:
|
33
|
+
```bash
|
34
|
+
$ rake db:migrate SCOPE=commentui VERSION=0
|
35
|
+
```
|
36
|
+
|
37
|
+
### 3. Initializers
|
38
|
+
Run the following command to copy Commentui's initializers to your application:
|
39
|
+
```bash
|
40
|
+
$ bundle exec rake commentui:install:initializers
|
41
|
+
```
|
42
|
+
|
43
|
+
### 4. Route config
|
44
|
+
Add this line to your Rails application's routes.rb file:
|
45
|
+
```ruby
|
46
|
+
mount Commentui::Engine => '/commentui'
|
47
|
+
```
|
48
|
+
|
49
|
+
## Usage
|
50
|
+
### 1. Models
|
51
|
+
Add this line to your model(s) should be able to post comments (usually user model):
|
52
|
+
```ruby
|
53
|
+
acts_as_commentuier
|
54
|
+
```
|
55
|
+
The model'll look like:
|
56
|
+
```ruby
|
57
|
+
class User < ApplicationRecord
|
58
|
+
acts_as_commentuier
|
59
|
+
end
|
60
|
+
```
|
61
|
+
|
62
|
+
Add this line to any models you want to be able to comment on (post,...)
|
63
|
+
```ruby
|
64
|
+
acts_as_commentuiable
|
65
|
+
```
|
66
|
+
The model'll look like:
|
67
|
+
```ruby
|
68
|
+
class Post < ApplicationRecord
|
69
|
+
acts_as_commentuiable
|
70
|
+
end
|
71
|
+
```
|
72
|
+
|
73
|
+
### 2. Controllers
|
74
|
+
Supported actions
|
75
|
+
|
76
|
+
|Helper|HTTP Verb|Path|Controller#Action|
|
77
|
+
|--- |--- |--- |--- |
|
78
|
+
|thread_comments_path|GET|/threads/:thread_id/comments(.:format)|commentui/comments#index|
|
79
|
+
||POST|/threads/:thread_id/comments(.:format)|commentui/comments#create|
|
80
|
+
|thread_comment_path|GET|/threads/:thread_id/comments/:id(.:format)|commentui/comments#show|
|
81
|
+
||PATCH|/threads/:thread_id/comments/:id(.:format)|commentui/comments#update|
|
82
|
+
||PUT|/threads/:thread_id/comments/:id(.:format)|commentui/comments#update|
|
83
|
+
||DELETE|/threads/:thread_id/comments/:id(.:format)|commentui/comments#destroy|
|
84
|
+
|thread_path|GET|/threads/:id(.:format)|commentui/threads#show|
|
85
|
+
|
86
|
+
|
87
|
+
## Contributing
|
88
|
+
Contribution directions go here.
|
89
|
+
|
90
|
+
## License
|
91
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Commentui'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.md')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
load 'rails/tasks/statistics.rake'
|
20
|
+
|
21
|
+
require 'bundler/gem_tasks'
|
22
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
11
|
+
* It is generally better to create a new file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Commentui::ApplicationController < Commentui.base_controller
|
2
|
+
before_action :check_commentui_user
|
3
|
+
|
4
|
+
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
|
5
|
+
|
6
|
+
def render_json_errors(errors, status=:unprocessable_entity)
|
7
|
+
errors = [errors] unless errors.instance_of?(Array)
|
8
|
+
render json: {
|
9
|
+
errors: errors
|
10
|
+
}, status: status
|
11
|
+
end
|
12
|
+
|
13
|
+
def record_not_found
|
14
|
+
render_json_errors("Record not found", :not_found)
|
15
|
+
end
|
16
|
+
|
17
|
+
def check_commentui_user
|
18
|
+
return if commentui_user.present?
|
19
|
+
|
20
|
+
render_json_errors("Permission denied")
|
21
|
+
end
|
22
|
+
|
23
|
+
def commentui_user
|
24
|
+
@commentui_user ||= Commentui.current_user_lambda.call(self)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_dependency "commentui/application_controller"
|
2
|
+
|
3
|
+
module Commentui
|
4
|
+
class CommentsController < ApplicationController
|
5
|
+
include Pagy::Backend
|
6
|
+
|
7
|
+
before_action :set_thread
|
8
|
+
before_action :set_comment, only: [:update, :destroy]
|
9
|
+
before_action :check_user, only: [:update, :destroy]
|
10
|
+
after_action { pagy_headers_merge(@pagy) if @pagy }
|
11
|
+
|
12
|
+
def index
|
13
|
+
@comments = comments_scope.includes(:creator, :editor)
|
14
|
+
@pagy, @comments = pagy(@comments, items: params[:items])
|
15
|
+
render json: @comments
|
16
|
+
end
|
17
|
+
|
18
|
+
def create
|
19
|
+
@comment = comments_scope.new(comment_params)
|
20
|
+
@comment.creator = commentui_user
|
21
|
+
return render json: @comment if @comment.save
|
22
|
+
|
23
|
+
render_json_errors(@comment.errors.full_messages)
|
24
|
+
end
|
25
|
+
|
26
|
+
def update
|
27
|
+
@comment.assign_attributes(comment_params)
|
28
|
+
@comment.editor = commentui_user
|
29
|
+
return render json: @comment if @comment.save
|
30
|
+
|
31
|
+
render_json_errors(@comment.errors.full_messages)
|
32
|
+
end
|
33
|
+
|
34
|
+
def destroy
|
35
|
+
render json: @comment.destroy
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def set_thread
|
41
|
+
@thread ||= Commentui::Thread.find(params[:thread_id])
|
42
|
+
end
|
43
|
+
|
44
|
+
def comments_scope
|
45
|
+
@thread.comments.order(created_at: :asc)
|
46
|
+
end
|
47
|
+
|
48
|
+
def set_comment
|
49
|
+
@comment ||= comments_scope.find(params[:id])
|
50
|
+
end
|
51
|
+
|
52
|
+
def comment_params
|
53
|
+
params.fetch(:comment, {})
|
54
|
+
.permit(:content)
|
55
|
+
end
|
56
|
+
|
57
|
+
def check_user
|
58
|
+
return if @comment.can_modify?(commentui_user)
|
59
|
+
|
60
|
+
render_json_errors("Permission denied")
|
61
|
+
end
|
62
|
+
end #
|
63
|
+
end ##
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_dependency "commentui/application_record"
|
2
|
+
|
3
|
+
module Commentui
|
4
|
+
class Comment < ApplicationRecord
|
5
|
+
belongs_to :thread
|
6
|
+
belongs_to :creator, polymorphic: true
|
7
|
+
belongs_to :editor, optional: true, polymorphic: true
|
8
|
+
|
9
|
+
validates :content, presence: true
|
10
|
+
|
11
|
+
def can_modify?(edited_user)
|
12
|
+
edited_user == self.creator
|
13
|
+
end
|
14
|
+
|
15
|
+
def as_json(_opts={})
|
16
|
+
{
|
17
|
+
id: self.id,
|
18
|
+
content: self.content,
|
19
|
+
updated_at: self.updated_at,
|
20
|
+
created_at: self.created_at,
|
21
|
+
creator: creator,
|
22
|
+
editor: editor,
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end ##
|
26
|
+
end #
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require_dependency "commentui/application_record"
|
2
|
+
|
3
|
+
module Commentui
|
4
|
+
class Thread < ApplicationRecord
|
5
|
+
belongs_to :commentable, polymorphic: true
|
6
|
+
belongs_to :closer, optional: true, polymorphic: true
|
7
|
+
|
8
|
+
has_many :comments, dependent: :destroy
|
9
|
+
end #
|
10
|
+
end ##
|
@@ -0,0 +1,21 @@
|
|
1
|
+
Commentui.configure do |config|
|
2
|
+
# ===> base_controller will be inherit by commmentui's application controller
|
3
|
+
# where your current_user is defined
|
4
|
+
# Type: ActionController::Base relatives class
|
5
|
+
# Defautl: ActionController::Base
|
6
|
+
# config.base_controller = ActionController::Base
|
7
|
+
|
8
|
+
# ===> current_user method of your system
|
9
|
+
# Type: lambda
|
10
|
+
# Params: current controller
|
11
|
+
# Default: ->(context) { context.current_user }
|
12
|
+
# config.current_user_lambda = ->(context) { context.current_user }
|
13
|
+
|
14
|
+
# ===> allow_modify_comment should gem provides modify comments function
|
15
|
+
# Defautl: true
|
16
|
+
# config.allow_modify_comment = true
|
17
|
+
|
18
|
+
# ===> allow_modify_destroy should gem provides destroy comments function
|
19
|
+
# Defautl: true
|
20
|
+
# config.allow_modify_destroy = true
|
21
|
+
end
|
data/config/routes.rb
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
Commentui::Engine.routes.draw do
|
2
|
+
resources :threads, only: [:show] do
|
3
|
+
comment_resources = [:index, :show, :create]
|
4
|
+
comment_resources << :update if Commentui.allow_modify_comment
|
5
|
+
comment_resources << :destroy if Commentui.allow_modify_destroy
|
6
|
+
resources :comments, only: comment_resources
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class CreateCommentuiThreads < ActiveRecord::Migration[5.1]
|
2
|
+
def change
|
3
|
+
create_table :commentui_threads do |t|
|
4
|
+
t.references :commentable,
|
5
|
+
polymorphic: true,
|
6
|
+
index: { unique: true }
|
7
|
+
t.references :closer, polymorphic: true
|
8
|
+
|
9
|
+
t.datetime :closed_at
|
10
|
+
|
11
|
+
t.timestamps null: false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class CreateCommentuiComments < ActiveRecord::Migration[5.1]
|
2
|
+
def change
|
3
|
+
create_table :commentui_comments do |t|
|
4
|
+
t.references :thread,
|
5
|
+
null: false,
|
6
|
+
index: false,
|
7
|
+
foreign_key: {
|
8
|
+
to_table: :commentui_threads,
|
9
|
+
on_update: :cascade,
|
10
|
+
on_delete: :cascade,
|
11
|
+
}
|
12
|
+
|
13
|
+
t.references :creator, polymorphic: true, null: false, index: false
|
14
|
+
t.references :editor, polymorphic: true
|
15
|
+
|
16
|
+
t.text :content, null: false
|
17
|
+
t.datetime :deleted_at
|
18
|
+
|
19
|
+
t.timestamps null: false
|
20
|
+
end
|
21
|
+
|
22
|
+
add_index :commentui_comments,
|
23
|
+
[:creator_id, :creator_type, :thread_id],
|
24
|
+
name: 'index_commentui_comments_on_c_id_and_c_type_and_t_id'
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
data/lib/commentui.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'pagy'
|
2
|
+
require "initializers/pagy"
|
3
|
+
|
4
|
+
module Commentui
|
5
|
+
# Your code goes here...
|
6
|
+
require "commentui/engine"
|
7
|
+
require "commentui/version"
|
8
|
+
require "commentui/acts_as_commentuier"
|
9
|
+
require "commentui/acts_as_commentuiable"
|
10
|
+
|
11
|
+
ActiveSupport.on_load(:active_record) do
|
12
|
+
include ActsAsCommentuier
|
13
|
+
include ActsAsCommentuiable
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.configure
|
17
|
+
yield self
|
18
|
+
end
|
19
|
+
|
20
|
+
# The current user (devise current_user helper)
|
21
|
+
mattr_accessor :base_controller
|
22
|
+
@@base_controller = ActionController::Base
|
23
|
+
|
24
|
+
# The current user (devise current_user helper)
|
25
|
+
mattr_accessor :current_user_lambda
|
26
|
+
@@current_user_lambda = ->(context) { context.current_user }
|
27
|
+
|
28
|
+
# The flag allow modify comment or not
|
29
|
+
mattr_accessor :allow_modify_comment
|
30
|
+
@@allow_modify_comment = true
|
31
|
+
|
32
|
+
# The flag allow destroy comment or not
|
33
|
+
mattr_accessor :allow_modify_destroy
|
34
|
+
@@allow_modify_destroy = true
|
35
|
+
end #
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module Commentui
|
4
|
+
module ActsAsCommentuiable
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
class_methods do
|
8
|
+
def acts_as_commentuiable
|
9
|
+
class_exec do
|
10
|
+
has_one :commentui_thread,
|
11
|
+
dependent: :nullify,
|
12
|
+
as: :commentable,
|
13
|
+
class_name: "Commentui::Thread"
|
14
|
+
|
15
|
+
def commentui_thread
|
16
|
+
@commentui_thread ||= (super || create_commentui_thread)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end ###
|
21
|
+
end ##
|
22
|
+
end #
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module Commentui
|
4
|
+
module ActsAsCommentuier
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
class_methods do
|
8
|
+
def acts_as_commentuier
|
9
|
+
class_exec do
|
10
|
+
has_many :commentui_comments,
|
11
|
+
dependent: :destroy,
|
12
|
+
as: :creator,
|
13
|
+
class_name: "Commentui::Comment"
|
14
|
+
has_many :commentui_edited_comments,
|
15
|
+
dependent: :nullify,
|
16
|
+
as: :editor,
|
17
|
+
class_name: "Commentui::Comment"
|
18
|
+
has_many :commentui_closed_threads,
|
19
|
+
dependent: :nullify,
|
20
|
+
as: :closer,
|
21
|
+
class_name: "Commentui::Thread"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end ###
|
25
|
+
end ##
|
26
|
+
end #
|
@@ -0,0 +1,170 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
# Pagy initializer file (3.6.0)
|
5
|
+
# Customize only what you really need and notice that Pagy works also without any of the following lines.
|
6
|
+
# Should you just cherry pick part of this file, please maintain the require-order of the extras
|
7
|
+
|
8
|
+
|
9
|
+
# Extras
|
10
|
+
# See https://ddnexus.github.io/pagy/extras
|
11
|
+
|
12
|
+
|
13
|
+
# Backend Extras
|
14
|
+
|
15
|
+
# Array extra: Paginate arrays efficiently, avoiding expensive array-wrapping and without overriding
|
16
|
+
# See https://ddnexus.github.io/pagy/extras/array
|
17
|
+
# require 'pagy/extras/array'
|
18
|
+
|
19
|
+
# Countless extra: Paginate without any count, saving one query per rendering
|
20
|
+
# See https://ddnexus.github.io/pagy/extras/countless
|
21
|
+
# require 'pagy/extras/countless'
|
22
|
+
# Pagy::VARS[:cycle] = false # default
|
23
|
+
|
24
|
+
# Elasticsearch Rails extra: Paginate `ElasticsearchRails::Results` objects
|
25
|
+
# See https://ddnexus.github.io/pagy/extras/elasticsearch_rails
|
26
|
+
# require 'pagy/extras/elasticsearch_rails'
|
27
|
+
|
28
|
+
# Searchkick extra: Paginate `Searchkick::Results` objects
|
29
|
+
# See https://ddnexus.github.io/pagy/extras/searchkick
|
30
|
+
# require 'pagy/extras/searchkick'
|
31
|
+
|
32
|
+
|
33
|
+
# Frontend Extras
|
34
|
+
|
35
|
+
# Bootstrap extra: Add nav, nav_js and combo_nav_js helpers and templates for Bootstrap pagination
|
36
|
+
# See https://ddnexus.github.io/pagy/extras/bootstrap
|
37
|
+
# require 'pagy/extras/bootstrap'
|
38
|
+
|
39
|
+
# Bulma extra: Add nav, nav_js and combo_nav_js helpers and templates for Bulma pagination
|
40
|
+
# See https://ddnexus.github.io/pagy/extras/bulma
|
41
|
+
# require 'pagy/extras/bulma'
|
42
|
+
|
43
|
+
# Foundation extra: Add nav, nav_js and combo_nav_js helpers and templates for Foundation pagination
|
44
|
+
# See https://ddnexus.github.io/pagy/extras/foundation
|
45
|
+
# require 'pagy/extras/foundation'
|
46
|
+
|
47
|
+
# Materialize extra: Add nav, nav_js and combo_nav_js helpers for Materialize pagination
|
48
|
+
# See https://ddnexus.github.io/pagy/extras/materialize
|
49
|
+
# require 'pagy/extras/materialize'
|
50
|
+
|
51
|
+
# Navs extra: Add nav_js and combo_nav_js javascript helpers
|
52
|
+
# Notice: the other frontend extras add their own framework-styled versions,
|
53
|
+
# so require this extra only if you need the unstyled version
|
54
|
+
# See https://ddnexus.github.io/pagy/extras/navs
|
55
|
+
# require 'pagy/extras/navs'
|
56
|
+
|
57
|
+
# Semantic extra: Add nav, nav_js and combo_nav_js helpers for Semantic UI pagination
|
58
|
+
# See https://ddnexus.github.io/pagy/extras/semantic
|
59
|
+
# require 'pagy/extras/semantic'
|
60
|
+
|
61
|
+
# UIkit extra: Add nav helper and templates for UIkit pagination
|
62
|
+
# See https://ddnexus.github.io/pagy/extras/uikit
|
63
|
+
# require 'pagy/extras/uikit'
|
64
|
+
|
65
|
+
# Multi size var used by the *_nav_js helpers
|
66
|
+
# See https://ddnexus.github.io/pagy/extras/navs#steps
|
67
|
+
# Pagy::VARS[:steps] = { 0 => [2,3,3,2], 540 => [3,5,5,3], 720 => [5,7,7,5] } # example
|
68
|
+
|
69
|
+
|
70
|
+
# Feature Extras
|
71
|
+
|
72
|
+
# Headers extra: http response headers (and other helpers) useful for API pagination
|
73
|
+
# See http://ddnexus.github.io/pagy/extras/headers
|
74
|
+
require 'pagy/extras/headers'
|
75
|
+
# Pagy::VARS[:headers] = { page: 'Current-Page', items: 'Page-Items', count: 'Total-Count', pages: 'Total-Pages' } # default
|
76
|
+
|
77
|
+
# Support extra: Extra support for features like: incremental, infinite, auto-scroll pagination
|
78
|
+
# See https://ddnexus.github.io/pagy/extras/support
|
79
|
+
# require 'pagy/extras/support'
|
80
|
+
|
81
|
+
# Items extra: Allow the client to request a custom number of items per page with an optional selector UI
|
82
|
+
# See https://ddnexus.github.io/pagy/extras/items
|
83
|
+
# require 'pagy/extras/items'
|
84
|
+
# Pagy::VARS[:items_param] = :items # default
|
85
|
+
# Pagy::VARS[:max_items] = 100 # default
|
86
|
+
|
87
|
+
# Overflow extra: Allow for easy handling of overflowing pages
|
88
|
+
# See https://ddnexus.github.io/pagy/extras/overflow
|
89
|
+
require 'pagy/extras/overflow'
|
90
|
+
Pagy::VARS[:overflow] = :empty_page # default (other options: :last_page and :exception)
|
91
|
+
|
92
|
+
# Metadata extra: Provides the pagination metadata to Javascript frameworks like Vue.js, react.js, etc.
|
93
|
+
# See https://ddnexus.github.io/pagy/extras/metadata
|
94
|
+
# you must require the shared internal extra (BEFORE the metadata extra) ONLY if you need also the :sequels
|
95
|
+
# require 'pagy/extras/shared'
|
96
|
+
# require 'pagy/extras/metadata'
|
97
|
+
# For performance reason, you should explicitly set ONLY the metadata you use in the frontend
|
98
|
+
# Pagy::VARS[:metadata] = [:scaffold_url, :count, :page, :prev, :next, :last] # example
|
99
|
+
|
100
|
+
# Trim extra: Remove the page=1 param from links
|
101
|
+
# See https://ddnexus.github.io/pagy/extras/trim
|
102
|
+
# require 'pagy/extras/trim'
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
# Pagy Variables
|
107
|
+
# See https://ddnexus.github.io/pagy/api/pagy#variables
|
108
|
+
# All the Pagy::VARS are set for all the Pagy instances but can be overridden
|
109
|
+
# per instance by just passing them to Pagy.new or the #pagy controller method
|
110
|
+
|
111
|
+
|
112
|
+
# Instance variables
|
113
|
+
# See https://ddnexus.github.io/pagy/api/pagy#instance-variables
|
114
|
+
Pagy::VARS[:items] = 25 # default
|
115
|
+
|
116
|
+
|
117
|
+
# Other Variables
|
118
|
+
# See https://ddnexus.github.io/pagy/api/pagy#other-variables
|
119
|
+
# Pagy::VARS[:size] = [1,4,4,1] # default
|
120
|
+
# Pagy::VARS[:page_param] = :page # default
|
121
|
+
# Pagy::VARS[:params] = {} # default
|
122
|
+
# Pagy::VARS[:anchor] = '#anchor' # example
|
123
|
+
# Pagy::VARS[:link_extra] = 'data-remote="true"' # example
|
124
|
+
|
125
|
+
|
126
|
+
# Rails
|
127
|
+
|
128
|
+
# Rails: extras assets path required by the helpers that use javascript
|
129
|
+
# (pagy*_nav_js, pagy*_combo_nav_js, and pagy_items_selector_js)
|
130
|
+
# See https://ddnexus.github.io/pagy/extras#javascript
|
131
|
+
# Rails.application.config.assets.paths << Pagy.root.join('javascripts')
|
132
|
+
|
133
|
+
|
134
|
+
# I18n
|
135
|
+
|
136
|
+
# Pagy internal I18n: ~18x faster using ~10x less memory than the i18n gem
|
137
|
+
# See https://ddnexus.github.io/pagy/api/frontend#i18n
|
138
|
+
# Notice: No need to configure anything in this section if your app uses only "en"
|
139
|
+
# or if you use the i18n extra below
|
140
|
+
#
|
141
|
+
# Examples:
|
142
|
+
# load the "de" built-in locale:
|
143
|
+
# Pagy::I18n.load(locale: 'de')
|
144
|
+
#
|
145
|
+
# load the "de" locale defined in the custom file at :filepath:
|
146
|
+
# Pagy::I18n.load(locale: 'de', filepath: 'path/to/pagy-de.yml')
|
147
|
+
#
|
148
|
+
# load the "de", "en" and "es" built-in locales:
|
149
|
+
# (the first passed :locale will be used also as the default_locale)
|
150
|
+
# Pagy::I18n.load({locale: 'de'},
|
151
|
+
# {locale: 'en'},
|
152
|
+
# {locale: 'es'})
|
153
|
+
#
|
154
|
+
# load the "en" built-in locale, a custom "es" locale,
|
155
|
+
# and a totally custom locale complete with a custom :pluralize proc:
|
156
|
+
# (the first passed :locale will be used also as the default_locale)
|
157
|
+
# Pagy::I18n.load({locale: 'en'},
|
158
|
+
# {locale: 'es', filepath: 'path/to/pagy-es.yml'},
|
159
|
+
# {locale: 'xyz', # not built-in
|
160
|
+
# filepath: 'path/to/pagy-xyz.yml',
|
161
|
+
# pluralize: lambda{|count| ... } )
|
162
|
+
|
163
|
+
|
164
|
+
# I18n extra: uses the standard i18n gem which is ~18x slower using ~10x more memory
|
165
|
+
# than the default pagy internal i18n (see above)
|
166
|
+
# See https://ddnexus.github.io/pagy/extras/i18n
|
167
|
+
# require 'pagy/extras/i18n'
|
168
|
+
|
169
|
+
# Default i18n key
|
170
|
+
# Pagy::VARS[:i18n_key] = 'pagy.item_name' # default
|
@@ -0,0 +1,16 @@
|
|
1
|
+
namespace :commentui do
|
2
|
+
namespace :install do
|
3
|
+
desc "Copy initializers from commentui to the host application"
|
4
|
+
# rake commentui:install:initializers
|
5
|
+
task :initializers do
|
6
|
+
Dir.glob(File.expand_path('../../config/initializers/*.rb', __dir__)) do |file|
|
7
|
+
if File.exists?(File.expand_path(File.basename(file), 'config/initializers'))
|
8
|
+
print "NOTE: Initializer #{File.basename(file)} from commentui has been skipped. Initializer with the same name already exists.\n"
|
9
|
+
else
|
10
|
+
cp file, 'config/initializers', verbose: false
|
11
|
+
print "Copied initializer #{File.basename(file)} from commentui\n"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end ###
|
15
|
+
end ##
|
16
|
+
end #
|
metadata
ADDED
@@ -0,0 +1,220 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: commentui
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.01
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Phuoc Phan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-10-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.1.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 5.1.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pagy
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.6.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.6.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec-rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.9'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.9'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: database_cleaner
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.7'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.7'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.17.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.17.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pg
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.18.4
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.18.4
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry-rails
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.3.9
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.3.9
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: puma
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 4.2.1
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 4.2.1
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: dotenv-rails
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 2.7.5
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 2.7.5
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: factory_bot_rails
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 5.1.1
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 5.1.1
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: faker
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '2.6'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '2.6'
|
167
|
+
description: Allow user to post comment to your models by APIs
|
168
|
+
email:
|
169
|
+
- phanphuocdt@gmail.com
|
170
|
+
executables: []
|
171
|
+
extensions: []
|
172
|
+
extra_rdoc_files: []
|
173
|
+
files:
|
174
|
+
- MIT-LICENSE
|
175
|
+
- README.md
|
176
|
+
- Rakefile
|
177
|
+
- app/assets/config/commentui_manifest.js
|
178
|
+
- app/assets/javascripts/commentui/application.js
|
179
|
+
- app/assets/stylesheets/commentui/application.css
|
180
|
+
- app/controllers/commentui/application_controller.rb
|
181
|
+
- app/controllers/commentui/comments_controller.rb
|
182
|
+
- app/models/commentui/application_record.rb
|
183
|
+
- app/models/commentui/comment.rb
|
184
|
+
- app/models/commentui/thread.rb
|
185
|
+
- config/initializers/commentui.rb
|
186
|
+
- config/routes.rb
|
187
|
+
- db/migrate/20191012044238_create_commentui_threads.rb
|
188
|
+
- db/migrate/20191012050923_create_commentui_comments.rb
|
189
|
+
- lib/commentui.rb
|
190
|
+
- lib/commentui/acts_as_commentuiable.rb
|
191
|
+
- lib/commentui/acts_as_commentuier.rb
|
192
|
+
- lib/commentui/engine.rb
|
193
|
+
- lib/commentui/version.rb
|
194
|
+
- lib/initializers/pagy.rb
|
195
|
+
- lib/tasks/commentui_tasks.rake
|
196
|
+
homepage: https://github.com/sportavn/commentui/
|
197
|
+
licenses:
|
198
|
+
- MIT
|
199
|
+
metadata: {}
|
200
|
+
post_install_message:
|
201
|
+
rdoc_options: []
|
202
|
+
require_paths:
|
203
|
+
- lib
|
204
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '0'
|
209
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
|
+
requirements:
|
211
|
+
- - ">="
|
212
|
+
- !ruby/object:Gem::Version
|
213
|
+
version: '0'
|
214
|
+
requirements: []
|
215
|
+
rubyforge_project:
|
216
|
+
rubygems_version: 2.7.6.2
|
217
|
+
signing_key:
|
218
|
+
specification_version: 4
|
219
|
+
summary: A simple comment API gem
|
220
|
+
test_files: []
|