the_comments 1.1.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rvmrc.example +1 -0
- data/.travis.yml +5 -0
- data/README.md +105 -425
- data/app/assets/javascripts/the_comments.js.coffee +12 -9
- data/app/assets/javascripts/the_comments_manage.js.coffee +19 -49
- data/app/assets/stylesheets/the_comments.css.scss +20 -29
- data/app/controllers/_templates_/comments_controller.rb +44 -0
- data/app/controllers/concerns/controller.rb +216 -0
- data/app/helpers/render_comments_tree_helper.rb +4 -7
- data/app/models/_templates_/comment.rb +38 -0
- data/app/models/concerns/comment.rb +103 -0
- data/app/models/concerns/comment_states.rb +80 -0
- data/app/models/concerns/commentable.rb +69 -0
- data/app/models/concerns/user.rb +52 -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/{_comment.html.haml → haml/_comment.html.haml} +0 -0
- data/app/views/the_comments/haml/_comment_body.html.haml +20 -0
- data/app/views/the_comments/haml/_comment_edit.html.haml +26 -0
- data/app/views/the_comments/{_form.html.haml → haml/_form.html.haml} +8 -6
- data/app/views/the_comments/haml/_manage_controls.html.haml +27 -0
- data/app/views/the_comments/haml/_sidebar.html.haml +28 -0
- data/app/views/the_comments/haml/_tree.html.haml +4 -0
- data/app/views/the_comments/haml/index.html.haml +18 -0
- data/app/views/the_comments/haml/manage.html.haml +25 -0
- data/app/views/the_comments/haml/my_comments.html.haml +28 -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 +20 -0
- data/app/views/the_comments/slim/_comment_edit.html.slim +26 -0
- data/app/views/the_comments/slim/_form.html.slim +27 -0
- data/app/views/the_comments/slim/_manage_controls.html.slim +27 -0
- data/app/views/the_comments/slim/_sidebar.html.slim +28 -0
- data/app/views/the_comments/slim/_tree.html.slim +4 -0
- data/app/views/the_comments/slim/index.html.slim +18 -0
- data/app/views/the_comments/slim/manage.html.slim +25 -0
- data/app/views/the_comments/slim/my_comments.html.slim +28 -0
- data/{lib/generators/the_comments/templates → config/initializers}/the_comments.rb +3 -0
- data/config/locales/en.yml +39 -14
- data/config/locales/ru.yml +67 -0
- data/config/routes.rb +17 -13
- data/db/migrate/20130101010101_change_user.rb +18 -0
- data/db/migrate/20130101010102_create_comments.rb +50 -0
- data/db/migrate/20130101010103_change_commentable.rb +13 -0
- data/docs/admin_ui_installation.md +145 -0
- data/docs/advanced_installation.md +182 -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 +28 -0
- data/docs/mountable_routes.md +80 -0
- data/docs/pagination.md +123 -0
- data/docs/screencast.jpg +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 +18 -0
- data/docs/where_is_example_application.md +37 -0
- data/gem_version.rb +3 -0
- data/lib/generators/the_comments/USAGE +31 -20
- data/lib/generators/the_comments/the_comments_generator.rb +35 -18
- data/lib/generators/the_comments/views_generator.rb +52 -16
- data/lib/the_comments/config.rb +14 -1
- data/lib/the_comments/version.rb +1 -3
- data/lib/the_comments.rb +10 -0
- data/spec/dummy_app/.gitignore +17 -0
- data/spec/dummy_app/.rspec +1 -0
- data/spec/dummy_app/.ruby-gemset +1 -0
- data/spec/dummy_app/.ruby-version +1 -0
- data/spec/dummy_app/Gemfile +43 -0
- data/spec/dummy_app/README.md +50 -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/{lib/generators/the_comments/templates → spec/dummy_app/app/controllers}/comments_controller.rb +3 -1
- 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 +13 -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 +15 -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/views_converter.rb +16 -0
- metadata +223 -45
- data/app/controllers/concerns/the_comments_controller.rb +0 -229
- data/app/controllers/concerns/the_comments_ip_controller.rb +0 -17
- data/app/controllers/concerns/the_comments_user_agent_controller.rb +0 -15
- data/app/models/concerns/the_comments_base.rb +0 -69
- data/app/models/concerns/the_comments_black_ip.rb +0 -9
- data/app/models/concerns/the_comments_black_user_agent.rb +0 -9
- data/app/models/concerns/the_comments_commentable.rb +0 -66
- data/app/models/concerns/the_comments_states.rb +0 -65
- data/app/models/concerns/the_comments_user.rb +0 -32
- data/app/views/ip_black_lists/index.html.haml +0 -17
- data/app/views/the_comments/_comment_body.html.haml +0 -30
- data/app/views/the_comments/_manage_controls.html.haml +0 -4
- data/app/views/the_comments/_tree.html.haml +0 -4
- data/app/views/the_comments/index.html.haml +0 -19
- data/app/views/the_comments/manage.html.haml +0 -29
- data/app/views/user_agent_black_lists/index.html.haml +0 -17
- data/db/migrate/20130101010101_create_comments.rb +0 -90
- data/lib/generators/the_comments/templates/ip_black_list.rb +0 -3
- data/lib/generators/the_comments/templates/ip_black_lists_controller.rb +0 -10
- data/lib/generators/the_comments/templates/the_comments_black_ip.rb +0 -9
- data/lib/generators/the_comments/templates/the_comments_black_user_agent.rb +0 -9
- data/lib/generators/the_comments/templates/user_agent_black_list.rb +0 -3
- data/lib/generators/the_comments/templates/user_agent_black_lists_controller.rb +0 -10
@@ -1,33 +1,44 @@
|
|
1
1
|
Description:
|
2
|
-
TheComments
|
2
|
+
TheComments: generators will copy files for organize comments tree in your web project
|
3
3
|
|
4
|
-
|
5
|
-
bundle exec rails g the_comments
|
4
|
+
Usage: [bundle exec] rails g the_comments NAME
|
5
|
+
Usage: [bundle exec] rails g the_comments:views NAME
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
# This text:
|
8
|
+
> rails g the_comments --help
|
9
|
+
|
10
|
+
# Main generators:
|
11
|
+
> rails g the_comments install
|
9
12
|
|
10
13
|
This will create:
|
11
14
|
config/initializers/the_comments.rb
|
12
|
-
|
13
|
-
app/models/ip_black_list.rb
|
14
|
-
app/models/user_agent_black_list.rb
|
15
|
-
|
16
15
|
app/controllers/comments_controller.rb
|
17
|
-
app/
|
18
|
-
app/controllers/user_agent_black_lists_controller.rb
|
16
|
+
app/models/comment.rb
|
19
17
|
|
20
|
-
|
18
|
+
# Controller generators:
|
19
|
+
> rails g the_comments controllers
|
21
20
|
|
22
21
|
This will create:
|
23
22
|
app/controllers/comments_controller.rb
|
24
|
-
|
25
|
-
|
23
|
+
|
24
|
+
# Model generators:
|
25
|
+
> rails g the_comments models
|
26
|
+
|
27
|
+
This will create:
|
28
|
+
app/models/comment.rb
|
29
|
+
|
30
|
+
# Config generators:
|
31
|
+
> rails g the_comments config
|
32
|
+
|
33
|
+
# Locals generators:
|
34
|
+
> rails g the_comments locales
|
26
35
|
|
27
|
-
View Generators:
|
28
|
-
|
29
|
-
|
30
|
-
|
36
|
+
# View Generators:
|
37
|
+
> rails g the_comments:views js
|
38
|
+
> rails g the_comments:views css
|
39
|
+
> rails g the_comments:views assets
|
40
|
+
> rails g the_comments:views helper
|
41
|
+
> rails g the_comments:views views
|
31
42
|
|
32
|
-
Migrations:
|
33
|
-
|
43
|
+
# Migrations:
|
44
|
+
> rake the_comments_engine:install:migrations
|
@@ -2,38 +2,55 @@ class TheCommentsGenerator < Rails::Generators::NamedBase
|
|
2
2
|
source_root File.expand_path('../templates', __FILE__)
|
3
3
|
# argument :xname, type: :string, default: :xname
|
4
4
|
|
5
|
+
# > rails g the_comments NAME
|
5
6
|
def generate_controllers
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
7
|
+
case gen_name
|
8
|
+
when 'locales'
|
9
|
+
cp_locales
|
10
|
+
when 'models'
|
11
|
+
cp_models
|
12
|
+
when 'controllers'
|
13
|
+
cp_controllers
|
14
|
+
when 'config'
|
15
|
+
cp_config
|
16
|
+
when 'install'
|
17
|
+
cp_config
|
18
|
+
cp_models
|
19
|
+
cp_controllers
|
20
|
+
else
|
21
|
+
puts 'TheComments Generator - wrong Name'
|
22
|
+
puts 'Try to use [ install | config | controllers | models ]'
|
16
23
|
end
|
17
24
|
end
|
18
25
|
|
19
26
|
private
|
20
27
|
|
28
|
+
def root_path; TheComments::Engine.root; end
|
29
|
+
|
21
30
|
def gen_name
|
22
31
|
name.to_s.downcase
|
23
32
|
end
|
24
33
|
|
25
|
-
def
|
26
|
-
copy_file
|
34
|
+
def cp_config
|
35
|
+
copy_file "#{root_path}/config/initializers/the_comments.rb",
|
36
|
+
"config/initializers/the_comments.rb"
|
27
37
|
end
|
28
38
|
|
29
39
|
def cp_models
|
30
|
-
copy_file
|
31
|
-
|
40
|
+
copy_file "#{root_path}/app/models/_templates_/comment.rb",
|
41
|
+
"app/models/comment.rb"
|
32
42
|
end
|
33
43
|
|
34
44
|
def cp_controllers
|
35
|
-
copy_file
|
36
|
-
|
37
|
-
|
45
|
+
copy_file "#{root_path}/app/controllers/_templates_/comments_controller.rb",
|
46
|
+
"app/controllers/comments_controller.rb"
|
47
|
+
end
|
48
|
+
|
49
|
+
def cp_locales
|
50
|
+
copy_file "#{root_path}/config/locales/en.yml",
|
51
|
+
"config/locales/en.the_comments.yml"
|
52
|
+
|
53
|
+
copy_file "#{root_path}/config/locales/ru.yml",
|
54
|
+
"config/locales/ru.the_comments.yml"
|
38
55
|
end
|
39
|
-
end
|
56
|
+
end
|
@@ -1,14 +1,21 @@
|
|
1
1
|
module TheComments
|
2
2
|
module Generators
|
3
3
|
class ViewsGenerator < Rails::Generators::NamedBase
|
4
|
-
source_root
|
4
|
+
source_root TheComments::Engine.root
|
5
5
|
|
6
6
|
def self.banner
|
7
7
|
<<-BANNER.chomp
|
8
8
|
|
9
|
-
bundle exec rails g the_comments:views
|
10
|
-
|
11
|
-
|
9
|
+
USAGE: [bundle exec] rails g the_comments:views NAME
|
10
|
+
|
11
|
+
> rails g the_comments:views js
|
12
|
+
> rails g the_comments:views css
|
13
|
+
> rails g the_comments:views assets
|
14
|
+
|
15
|
+
> rails g the_comments:views views
|
16
|
+
> rails g the_comments:views helper
|
17
|
+
|
18
|
+
> rails g the_comments:views all
|
12
19
|
|
13
20
|
BANNER
|
14
21
|
end
|
@@ -24,20 +31,49 @@ BANNER
|
|
24
31
|
end
|
25
32
|
|
26
33
|
def copy_gem_files
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
case param_name
|
35
|
+
when 'js'
|
36
|
+
js_copy
|
37
|
+
when 'css'
|
38
|
+
css_copy
|
39
|
+
when 'assets'
|
40
|
+
js_copy; css_copy
|
41
|
+
when 'views'
|
42
|
+
views_copy
|
43
|
+
when 'helper'
|
44
|
+
helper_copy
|
45
|
+
when 'all'
|
46
|
+
js_copy
|
47
|
+
css_copy
|
48
|
+
views_copy
|
49
|
+
helper_copy
|
50
|
+
else
|
51
|
+
puts 'TheComments View Generator - wrong Name'
|
52
|
+
puts "Wrong params - use only [ js | css | assets | views | helper | all ] values"
|
38
53
|
end
|
39
54
|
end
|
40
55
|
|
56
|
+
def js_copy
|
57
|
+
f1 = "app/assets/javascripts/the_comments.js.coffee"
|
58
|
+
f2 = "app/assets/javascripts/the_comments_manage.js.coffee"
|
59
|
+
copy_file f1, f1
|
60
|
+
copy_file f2, f2
|
61
|
+
end
|
62
|
+
|
63
|
+
def css_copy
|
64
|
+
f1 = "app/assets/stylesheets/the_comments.css.scss"
|
65
|
+
copy_file f1, f1
|
66
|
+
end
|
67
|
+
|
68
|
+
def views_copy
|
69
|
+
d1 = "app/views/the_comments"
|
70
|
+
directory d1, d1
|
71
|
+
end
|
72
|
+
|
73
|
+
def helper_copy
|
74
|
+
f1 = "app/helpers/render_comments_tree_helper.rb"
|
75
|
+
copy_file f1, f1
|
76
|
+
end
|
41
77
|
end
|
42
78
|
end
|
43
|
-
end
|
79
|
+
end
|
data/lib/the_comments/config.rb
CHANGED
@@ -10,7 +10,16 @@ module TheComments
|
|
10
10
|
# Configuration class
|
11
11
|
class Configuration
|
12
12
|
include ActiveSupport::Configurable
|
13
|
-
|
13
|
+
|
14
|
+
config_accessor :max_reply_depth,
|
15
|
+
:tolerance_time,
|
16
|
+
:default_state,
|
17
|
+
:default_owner_state,
|
18
|
+
:empty_inputs,
|
19
|
+
:default_title,
|
20
|
+
:template_engine,
|
21
|
+
:empty_trap_protection,
|
22
|
+
:tolerance_time_protection
|
14
23
|
end
|
15
24
|
|
16
25
|
configure do |config|
|
@@ -20,5 +29,9 @@ module TheComments
|
|
20
29
|
config.default_owner_state = :published
|
21
30
|
config.empty_inputs = [:message]
|
22
31
|
config.default_title = 'Undefined title'
|
32
|
+
config.template_engine = :haml
|
33
|
+
|
34
|
+
config.empty_trap_protection = true
|
35
|
+
config.tolerance_time_protection = true
|
23
36
|
end
|
24
37
|
end
|
data/lib/the_comments/version.rb
CHANGED
data/lib/the_comments.rb
CHANGED
@@ -7,3 +7,13 @@ require 'the_comments/version'
|
|
7
7
|
module TheComments
|
8
8
|
class Engine < Rails::Engine; end
|
9
9
|
end
|
10
|
+
|
11
|
+
# Loading of concerns
|
12
|
+
|
13
|
+
# controllers
|
14
|
+
require "../../app/controllers/concerns/controller"
|
15
|
+
|
16
|
+
# models
|
17
|
+
%w[ comment_states comment user commentable ].each do |concern|
|
18
|
+
require "../../app/models/concerns/#{concern}"
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# See http://help.github.com/ignore-files/ for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
6
|
+
|
7
|
+
# Ignore bundler config.
|
8
|
+
/.bundle
|
9
|
+
|
10
|
+
# Ignore the default SQLite database.
|
11
|
+
/db/*.db
|
12
|
+
/db/*.sqlite3
|
13
|
+
/db/*.sqlite3-journal
|
14
|
+
|
15
|
+
# Ignore all logfiles and tempfiles.
|
16
|
+
/log/*.log
|
17
|
+
/tmp
|
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
@@ -0,0 +1 @@
|
|
1
|
+
the_comments
|
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.0.0-p247
|
@@ -0,0 +1,43 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Base gems
|
4
|
+
gem 'rails', '4.0.1' #github: 'rails/rails', branch: 'master'
|
5
|
+
gem 'sqlite3'
|
6
|
+
|
7
|
+
gem 'jquery-rails'
|
8
|
+
gem 'jbuilder', '~> 1.2'
|
9
|
+
|
10
|
+
gem 'uglifier', '>= 1.3.0'
|
11
|
+
gem 'sass-rails', '~> 4.0.0'
|
12
|
+
gem 'coffee-rails', '~> 4.0.0'
|
13
|
+
|
14
|
+
gem 'thin', group: [:development]
|
15
|
+
gem 'therubyracer', platforms: :ruby
|
16
|
+
gem 'sdoc', require: false, group: [:doc]
|
17
|
+
|
18
|
+
# App gems
|
19
|
+
gem 'haml'
|
20
|
+
gem 'sorcery'
|
21
|
+
gem 'kaminari'
|
22
|
+
gem 'haml-rails'
|
23
|
+
|
24
|
+
# TheComments requires
|
25
|
+
gem 'the_comments',
|
26
|
+
path: '../../'
|
27
|
+
|
28
|
+
gem 'bootstrap-sass',
|
29
|
+
github: 'thomas-mcdonald/bootstrap-sass'
|
30
|
+
|
31
|
+
gem 'awesome_nested_set',
|
32
|
+
git: 'https://github.com/collectiveidea/awesome_nested_set.git',
|
33
|
+
branch: 'master'
|
34
|
+
|
35
|
+
# Test gems
|
36
|
+
group :development, :test do
|
37
|
+
gem 'faker'
|
38
|
+
gem 'factory_girl'
|
39
|
+
gem "factory_girl_rails"
|
40
|
+
gem 'rspec-rails', '~> 2.0'
|
41
|
+
|
42
|
+
# gem 'database_cleaner'
|
43
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
## TheComments Dummy App
|
2
|
+
|
3
|
+
### First step
|
4
|
+
|
5
|
+
```
|
6
|
+
git clone https://github.com/the-teacher/the_comments.git
|
7
|
+
|
8
|
+
cd the_comments/spec/dummy_app/
|
9
|
+
|
10
|
+
bundle
|
11
|
+
```
|
12
|
+
|
13
|
+
### App start
|
14
|
+
|
15
|
+
```
|
16
|
+
rake db:bootstrap_and_seed
|
17
|
+
|
18
|
+
rails s -p 3000 -b localhost
|
19
|
+
```
|
20
|
+
|
21
|
+
Browser
|
22
|
+
|
23
|
+
```
|
24
|
+
http://localhost:3000/
|
25
|
+
```
|
26
|
+
|
27
|
+
### Tests start
|
28
|
+
|
29
|
+
```
|
30
|
+
rake db:bootstrap RAILS_ENV=test
|
31
|
+
|
32
|
+
rspec --format documentation
|
33
|
+
```
|
34
|
+
|
35
|
+
### Only for me (don't read this)
|
36
|
+
|
37
|
+
base install commands
|
38
|
+
|
39
|
+
```
|
40
|
+
rails g sorcery:install
|
41
|
+
rails generate rspec:install
|
42
|
+
|
43
|
+
rails g the_comments install
|
44
|
+
rails g the_comments:views views
|
45
|
+
rails g model post user_id:integer title:string content:text
|
46
|
+
|
47
|
+
rake the_comments_engine:install:migrations (EDIT!)
|
48
|
+
|
49
|
+
rake db:bootstrap
|
50
|
+
```
|
File without changes
|
@@ -0,0 +1,16 @@
|
|
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 vendor/assets/javascripts of plugins, if any, 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.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require jquery
|
14
|
+
//= require jquery_ujs
|
15
|
+
|
16
|
+
//= require the_comments
|
@@ -0,0 +1,16 @@
|
|
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 vendor/assets/stylesheets of plugins, if any, 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 top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
|
12
|
+
*= require_self
|
13
|
+
*= require app
|
14
|
+
*= require the_comments
|
15
|
+
|
16
|
+
*/
|
data/{lib/generators/the_comments/templates → spec/dummy_app/app/controllers}/comments_controller.rb
RENAMED
@@ -6,7 +6,9 @@ class CommentsController < ApplicationController
|
|
6
6
|
# before_action :owner_required, only: [:my, :incoming, :edit, :trash]
|
7
7
|
# before_action :moderator_required, only: [:update, :to_published, :to_draft, :to_spam, :to_trash]
|
8
8
|
|
9
|
-
|
9
|
+
layout 'admin'
|
10
|
+
|
11
|
+
include TheComments::Controller
|
10
12
|
|
11
13
|
# Public methods:
|
12
14
|
#
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class PostsController < ApplicationController
|
2
|
+
def index
|
3
|
+
@posts = Post.all
|
4
|
+
@recent_comments = Comment.with_state(:published)
|
5
|
+
.where(commentable_state: [:published])
|
6
|
+
.recent.page(params[:page])
|
7
|
+
end
|
8
|
+
|
9
|
+
def show
|
10
|
+
@post = Post.find params[:id]
|
11
|
+
@comments = @post.comments.with_state([:draft, :published]).nested_set
|
12
|
+
end
|
13
|
+
end
|
File without changes
|
File without changes
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class Comment < ActiveRecord::Base
|
2
|
+
include TheComments::Comment
|
3
|
+
# ---------------------------------------------------
|
4
|
+
# Define comment's avatar url
|
5
|
+
# Usually we use Comment#user (owner of comment) to define avatar
|
6
|
+
# @blog.comments.includes(:user) <= use includes(:user) to decrease queries count
|
7
|
+
# comment#user.avatar_url
|
8
|
+
# ---------------------------------------------------
|
9
|
+
|
10
|
+
# ---------------------------------------------------
|
11
|
+
# Simple way to define avatar url
|
12
|
+
|
13
|
+
# def avatar_url
|
14
|
+
# hash = Digest::MD5.hexdigest self.id.to_s
|
15
|
+
# "http://www.gravatar.com/avatar/#{hash}?s=30&d=identicon"
|
16
|
+
# end
|
17
|
+
# ---------------------------------------------------
|
18
|
+
|
19
|
+
# ---------------------------------------------------
|
20
|
+
# Define your filters for content
|
21
|
+
# Expample for: gem 'RedCloth', gem 'sanitize'
|
22
|
+
# your personal SmilesProcessor
|
23
|
+
|
24
|
+
# def prepare_content
|
25
|
+
# text = self.raw_content
|
26
|
+
# text = RedCloth.new(text).to_html
|
27
|
+
# text = SmilesProcessor.new(text)
|
28
|
+
# text = Sanitize.clean(text, Sanitize::Config::RELAXED)
|
29
|
+
# self.content = text
|
30
|
+
# end
|
31
|
+
# ---------------------------------------------------
|
32
|
+
end
|
File without changes
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class Post < ActiveRecord::Base
|
2
|
+
include TheComments::Commentable
|
3
|
+
|
4
|
+
belongs_to :user
|
5
|
+
|
6
|
+
def commentable_title
|
7
|
+
title
|
8
|
+
end
|
9
|
+
|
10
|
+
def commentable_url
|
11
|
+
['', self.class.to_s.tableize, id].join('/')
|
12
|
+
end
|
13
|
+
|
14
|
+
def commentable_state
|
15
|
+
:published.to_s
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class User < ActiveRecord::Base
|
2
|
+
include TheComments::User
|
3
|
+
include TheComments::Commentable
|
4
|
+
|
5
|
+
authenticates_with_sorcery!
|
6
|
+
|
7
|
+
has_many :posts
|
8
|
+
|
9
|
+
# can be replaced to TheCommentsUser as default
|
10
|
+
def admin?
|
11
|
+
self == User.first
|
12
|
+
end
|
13
|
+
|
14
|
+
def comments_admin?
|
15
|
+
admin?
|
16
|
+
end
|
17
|
+
|
18
|
+
def comments_moderator? comment
|
19
|
+
id == comment.holder_id
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
!!! 5
|
2
|
+
%html(lang="ru")
|
3
|
+
%head
|
4
|
+
%meta(charset="utf-8")
|
5
|
+
%meta(http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1")
|
6
|
+
%meta(name="viewport" content="width=device-width, initial-scale=1.0")
|
7
|
+
%title= content_for?(:title) ? yield(:title) : "Admin Panel"
|
8
|
+
%link(href="favicon.ico" rel="shortcut icon")
|
9
|
+
|
10
|
+
= stylesheet_link_tag :admin_panel
|
11
|
+
= javascript_include_tag :admin_panel
|
12
|
+
= csrf_meta_tags
|
13
|
+
|
14
|
+
%body
|
15
|
+
.container
|
16
|
+
.row
|
17
|
+
.col-md-12
|
18
|
+
%h3= content_for?(:title) ? yield(:title) : "Admin Panel"
|
19
|
+
.row
|
20
|
+
.col-md-3
|
21
|
+
= yield :comments_sidebar
|
22
|
+
.col-md-9
|
23
|
+
= yield :comments_main
|
24
|
+
|
25
|
+
= stylesheet_link_tag "//netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.min.css"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
!!!
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%title TheComments Dummy App
|
5
|
+
= stylesheet_link_tag :application, media: :all
|
6
|
+
= javascript_include_tag :application
|
7
|
+
= csrf_meta_tags
|
8
|
+
|
9
|
+
%body
|
10
|
+
.body
|
11
|
+
%p
|
12
|
+
= link_to 'Home', root_path
|
13
|
+
\|
|
14
|
+
- if current_user
|
15
|
+
User: #{current_user.username}
|
16
|
+
\|
|
17
|
+
= link_to "Comments Manage (+#{current_user.draft_comcoms_count})", comments.manage_comments_path
|
18
|
+
- else
|
19
|
+
Guest
|
20
|
+
= yield
|
@@ -0,0 +1,22 @@
|
|
1
|
+
%h3 Posts:
|
2
|
+
%ul
|
3
|
+
- @posts.each do |post|
|
4
|
+
%li
|
5
|
+
= link_to post_url(post) do
|
6
|
+
= "#{post.title} (#{post.comments_sum})"
|
7
|
+
|
8
|
+
%h3 Autologin Users:
|
9
|
+
%ul
|
10
|
+
- User.all.each do |user|
|
11
|
+
%li
|
12
|
+
= link_to autologin_url(user) do
|
13
|
+
- admin = user.comments_admin? ? '[Admin]' : nil
|
14
|
+
= "#{user.username} (#{user.draft_comcoms_count}) #{admin}"
|
15
|
+
|
16
|
+
%h3 Recent Comments:
|
17
|
+
%ul
|
18
|
+
- @recent_comments.each do |comment|
|
19
|
+
%p
|
20
|
+
%b= link_to comment.commentable_title, comment.commentable_url
|
21
|
+
%br
|
22
|
+
%i= comment.content
|