the_comments 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +248 -0
- data/Rakefile +1 -0
- data/app/assets/javascripts/the_comments.js.coffee +104 -0
- data/app/assets/javascripts/the_comments_manage.js.coffee +59 -0
- data/app/assets/stylesheets/the_comments.css.scss +251 -0
- data/app/controllers/concerns/the_comments_controller.rb +227 -0
- data/app/controllers/concerns/the_comments_ip_controller.rb +17 -0
- data/app/controllers/concerns/the_comments_user_agent_controller.rb +17 -0
- data/app/helpers/render_comments_tree_helper.rb +113 -0
- data/app/models/concerns/the_comments_base.rb +64 -0
- data/app/models/concerns/the_comments_black_ip.rb +10 -0
- data/app/models/concerns/the_comments_black_user_agent.rb +10 -0
- data/app/models/concerns/the_comments_commentable.rb +50 -0
- data/app/models/concerns/the_comments_states.rb +64 -0
- data/app/models/concerns/the_comments_user.rb +25 -0
- data/app/views/ip_black_lists/index.html.haml +17 -0
- data/app/views/the_comments/_comment.html.haml +1 -0
- data/app/views/the_comments/_comment_body.html.haml +30 -0
- data/app/views/the_comments/_form.html.haml +25 -0
- data/app/views/the_comments/_manage_controls.html.haml +4 -0
- data/app/views/the_comments/_tree.html.haml +4 -0
- data/app/views/the_comments/index.html.haml +19 -0
- data/app/views/the_comments/manage.html.haml +29 -0
- data/app/views/user_agent_black_lists/index.html.haml +17 -0
- data/config/locales/en.yml +43 -0
- data/config/routes.rb +24 -0
- data/db/migrate/20130101010101_create_comments.rb +81 -0
- data/lib/generators/the_comments/USAGE +29 -0
- data/lib/generators/the_comments/templates/comments_controller.rb +25 -0
- data/lib/generators/the_comments/templates/ip_black_lists_controller.rb +10 -0
- data/lib/generators/the_comments/templates/the_comments.rb +7 -0
- data/lib/generators/the_comments/templates/user_agent_black_lists_controller.rb +10 -0
- data/lib/generators/the_comments/the_comments_generator.rb +32 -0
- data/lib/generators/the_comments/views_generator.rb +41 -0
- data/lib/the_comments/config.rb +21 -0
- data/lib/the_comments/version.rb +3 -0
- data/lib/the_comments.rb +10 -0
- data/the_comments.gemspec +23 -0
- data/the_comments.jpg +0 -0
- metadata +120 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
= paginate @comments
|
2
|
+
|
3
|
+
%ol.comments_list
|
4
|
+
- @comments.each do |comment|
|
5
|
+
%li
|
6
|
+
.item{ class: comment.state }
|
7
|
+
.body
|
8
|
+
.commentable
|
9
|
+
= comment.commentable_type
|
10
|
+
\:
|
11
|
+
= link_to comment.commentable_title, comment.commentable_url
|
12
|
+
.comment
|
13
|
+
.title
|
14
|
+
%b from:
|
15
|
+
= comment.title.blank? ? t('the_comments.guest_name') : comment.title
|
16
|
+
.content
|
17
|
+
= comment.content
|
18
|
+
|
19
|
+
= paginate @comments
|
@@ -0,0 +1,29 @@
|
|
1
|
+
= paginate @comments
|
2
|
+
|
3
|
+
%ol.comments_list
|
4
|
+
- @comments.each do |comment|
|
5
|
+
%li
|
6
|
+
.item{ class: comment.state }
|
7
|
+
.body
|
8
|
+
= render partial: 'the_comments/comment_body', locals: { comment: comment }
|
9
|
+
.form.comment{ style: 'display:none' }
|
10
|
+
= form_for comment, remote: true do |f|
|
11
|
+
.commentable
|
12
|
+
= comment.commentable_type
|
13
|
+
→
|
14
|
+
= link_to comment.commentable_title, comment.commentable_url
|
15
|
+
.title
|
16
|
+
%label from:
|
17
|
+
= f.text_field :title
|
18
|
+
.contacts
|
19
|
+
%label contacts:
|
20
|
+
= f.text_field :contacts
|
21
|
+
.content
|
22
|
+
= f.text_area :raw_content
|
23
|
+
.submit
|
24
|
+
= f.submit
|
25
|
+
.controls
|
26
|
+
= link_to :View, '#', class: :view
|
27
|
+
= render partial: 'the_comments/manage_controls', locals: { comment: comment }
|
28
|
+
|
29
|
+
= paginate @comments
|
@@ -0,0 +1,17 @@
|
|
1
|
+
- unless @ip_black_lists.blank?
|
2
|
+
%ol.black_list
|
3
|
+
- @ip_black_lists.each do |black|
|
4
|
+
%li{ class: black.state }
|
5
|
+
%p
|
6
|
+
%b user_agent:
|
7
|
+
= black.user_agent
|
8
|
+
%b count:
|
9
|
+
= black.count
|
10
|
+
%b state:
|
11
|
+
%span.state= black.state
|
12
|
+
%p
|
13
|
+
%b action:
|
14
|
+
= link_to :warning, user_agent_black_list_to_state_path(black, state: :warning), remote: true, method: :patch, class: :to_warning
|
15
|
+
= link_to :banned, user_agent_black_list_to_state_path(black, state: :banned), remote: true, method: :patch, class: :to_banned
|
16
|
+
- else
|
17
|
+
%p= t('the_comments.item_not_found')
|
@@ -0,0 +1,43 @@
|
|
1
|
+
en:
|
2
|
+
activerecord:
|
3
|
+
attributes:
|
4
|
+
comment:
|
5
|
+
raw_content: Content
|
6
|
+
errors:
|
7
|
+
models:
|
8
|
+
comment:
|
9
|
+
attributes:
|
10
|
+
raw_content:
|
11
|
+
blank: 'should not be empty'
|
12
|
+
# blank: '%{attribute} should not be empty'
|
13
|
+
|
14
|
+
the_comments:
|
15
|
+
trap: Trap
|
16
|
+
trap_message: should be empty
|
17
|
+
|
18
|
+
tolerance_time: Page view time
|
19
|
+
tolerance_time_message: "Please wait %{time} seconds before send a comment and try again"
|
20
|
+
|
21
|
+
cookies: Cookies
|
22
|
+
cookies_required: 'Please enable cookies and try to reload page'
|
23
|
+
|
24
|
+
ajax_requests_required: 'Sorry, JavaScript/Ajax Requests required'
|
25
|
+
|
26
|
+
black_ip: Black IP adress
|
27
|
+
black_ip_message: Sorry! Your IP banned
|
28
|
+
|
29
|
+
black_user_agent: Black User Agent
|
30
|
+
black_user_agent_message: Sorry! Your User Agent banned
|
31
|
+
|
32
|
+
guest_name: Guest
|
33
|
+
reply: Reply to this comment
|
34
|
+
edit: Edit
|
35
|
+
to_spam: Spam!
|
36
|
+
to_draft: Draft
|
37
|
+
to_published: Publicate
|
38
|
+
to_deleted: Delete
|
39
|
+
|
40
|
+
delete_confirm: Are you sure?
|
41
|
+
|
42
|
+
waiting_for_moderation: Waiting for moderation
|
43
|
+
item_not_found: Black list Item not found
|
data/config/routes.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
resources :ip_black_lists do
|
3
|
+
patch :to_state
|
4
|
+
end
|
5
|
+
|
6
|
+
resources :user_agent_black_lists do
|
7
|
+
patch :to_state
|
8
|
+
end
|
9
|
+
|
10
|
+
resources :comments do
|
11
|
+
collection do
|
12
|
+
get :my
|
13
|
+
get :incoming
|
14
|
+
get :trash
|
15
|
+
end
|
16
|
+
|
17
|
+
member do
|
18
|
+
post :to_spam
|
19
|
+
post :to_draft
|
20
|
+
post :to_published
|
21
|
+
delete :to_trash
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# null: false => de-facto db-level validation
|
2
|
+
class CreateComments < ActiveRecord::Migration
|
3
|
+
def change
|
4
|
+
create_table :comments do |t|
|
5
|
+
# relations
|
6
|
+
t.integer :user_id
|
7
|
+
t.integer :holder_id
|
8
|
+
|
9
|
+
# polymorphic, commentable object
|
10
|
+
t.integer :commentable_id
|
11
|
+
t.string :commentable_type
|
12
|
+
|
13
|
+
# denormalization
|
14
|
+
t.string :commentable_url
|
15
|
+
t.string :commentable_title
|
16
|
+
t.string :commentable_state
|
17
|
+
|
18
|
+
# comment
|
19
|
+
t.string :anchor
|
20
|
+
|
21
|
+
t.string :title
|
22
|
+
t.string :contacts
|
23
|
+
|
24
|
+
t.text :raw_content
|
25
|
+
t.text :content
|
26
|
+
|
27
|
+
# moderation token
|
28
|
+
t.string :view_token
|
29
|
+
|
30
|
+
# state machine => :draft | :published | :deleted
|
31
|
+
t.string :state, default: :draft
|
32
|
+
|
33
|
+
# base user data (BanHammer power)
|
34
|
+
t.string :ip, default: :undefined
|
35
|
+
t.string :referer, default: :undefined
|
36
|
+
t.string :user_agent, default: :undefined
|
37
|
+
t.integer :tolerance_time
|
38
|
+
|
39
|
+
# nested set
|
40
|
+
t.integer :parent_id
|
41
|
+
t.integer :lft
|
42
|
+
t.integer :rgt
|
43
|
+
t.integer :depth, default: 0
|
44
|
+
|
45
|
+
t.timestamps
|
46
|
+
end
|
47
|
+
|
48
|
+
# Black Lists
|
49
|
+
create_table :ip_black_lists do |t|
|
50
|
+
t.string :ip
|
51
|
+
t.integer :count, default: 0
|
52
|
+
t.string :state, default: :warning
|
53
|
+
end
|
54
|
+
|
55
|
+
create_table :user_agent_black_lists do |t|
|
56
|
+
t.string :user_agent
|
57
|
+
t.integer :count, default: 0
|
58
|
+
t.string :state, default: :warning
|
59
|
+
end
|
60
|
+
|
61
|
+
# Add fields to User and Commentable Object
|
62
|
+
change_table :users do |t|
|
63
|
+
# commentable's comments => comcoms (cache)
|
64
|
+
# Relation through Comment#holder_id field
|
65
|
+
t.integer :draft_comcoms_count, default: 0
|
66
|
+
t.integer :published_comcoms_count, default: 0
|
67
|
+
t.integer :deleted_comcoms_count, default: 0
|
68
|
+
end
|
69
|
+
|
70
|
+
# Uncomment this. Add fields to User model and Commentable models
|
71
|
+
#
|
72
|
+
# [:users, :posts].each do |table_name|
|
73
|
+
# change_table table_name do |t|
|
74
|
+
# t.integer :draft_comments_count, default: 0
|
75
|
+
# t.integer :published_comments_count, default: 0
|
76
|
+
# t.integer :deleted_comments_count, default: 0
|
77
|
+
# end
|
78
|
+
# end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Description:
|
2
|
+
TheComments generator will copy files for organize comment's tree in your web project
|
3
|
+
|
4
|
+
This text:
|
5
|
+
bundle exec rails g the_comments --help
|
6
|
+
|
7
|
+
Generators:
|
8
|
+
bundle exec rails g the_comments install
|
9
|
+
|
10
|
+
This will create:
|
11
|
+
config/initializers/the_comments.rb
|
12
|
+
app/controllers/comments_controller.rb
|
13
|
+
app/controllers/ip_black_lists_controller.rb
|
14
|
+
app/controllers/user_agent_black_lists_controller.rb
|
15
|
+
|
16
|
+
bundle exec rails g the_comments controllers
|
17
|
+
|
18
|
+
This will create:
|
19
|
+
app/controllers/comments_controller.rb
|
20
|
+
app/controllers/ip_black_lists_controller.rb
|
21
|
+
app/controllers/user_agent_black_lists_controller.rb
|
22
|
+
|
23
|
+
View Generators:
|
24
|
+
bundle exec rails g the_comments:views assets
|
25
|
+
bundle exec rails g the_comments:views helper
|
26
|
+
bundle exec rails g the_comments:views views
|
27
|
+
|
28
|
+
Migrations:
|
29
|
+
bundle exec rake the_comments_engine:install:migrations
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class CommentsController < ApplicationController
|
2
|
+
# Define your restrict methods and use them like this:
|
3
|
+
#
|
4
|
+
# before_action :user_required, except: [:index, :create]
|
5
|
+
#
|
6
|
+
# before_action :owner_required, only: [:my, :incoming, :edit, :trash]
|
7
|
+
# before_action :moderator_required, only: [:update, :to_published, :to_draft, :to_spam, :to_trash]
|
8
|
+
|
9
|
+
include TheCommentsController::Base
|
10
|
+
|
11
|
+
# Public methods:
|
12
|
+
#
|
13
|
+
# [:index, :create]
|
14
|
+
|
15
|
+
# Application side methods:
|
16
|
+
# Overwrite following default methods if it's need
|
17
|
+
# Following methods based on *current_user* helper method
|
18
|
+
#
|
19
|
+
# [:my, :incoming, :edit, :trash]
|
20
|
+
|
21
|
+
# You must protect following methods
|
22
|
+
# Only comments moderator (holder or admin) can invoke following actions
|
23
|
+
#
|
24
|
+
# [:update, :to_published, :to_draft, :to_spam, :to_trash]
|
25
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class IpBlackListsController < ApplicationController
|
2
|
+
# Define your restrict methods and use them like this:
|
3
|
+
#
|
4
|
+
# before_action :user_required
|
5
|
+
# before_action :admin_required
|
6
|
+
#
|
7
|
+
# Only Admin should have an access to following methods
|
8
|
+
# Methods: [:index, :to_state]
|
9
|
+
include TheCommentsIpController
|
10
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class UserAgentBlackListsController < ApplicationController
|
2
|
+
# Define your restrict methods and use them like this:
|
3
|
+
#
|
4
|
+
# before_action :user_required
|
5
|
+
# before_action :admin_required
|
6
|
+
#
|
7
|
+
# Only Admin should have an access to following methods
|
8
|
+
# Methods: [:index, :to_state]
|
9
|
+
include TheCommentsUserAgentController
|
10
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class TheCommentsGenerator < Rails::Generators::NamedBase
|
2
|
+
source_root File.expand_path('../templates', __FILE__)
|
3
|
+
# argument :xname, type: :string, default: :xname
|
4
|
+
|
5
|
+
def generate_controllers
|
6
|
+
if gen_name == 'install'
|
7
|
+
cp_setup
|
8
|
+
cp_controllers
|
9
|
+
elsif gen_name == 'controllers'
|
10
|
+
cp_controllers
|
11
|
+
else
|
12
|
+
puts 'TheComments Generator - wrong Name'
|
13
|
+
puts 'Try to use [install|controllers]'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def gen_name
|
20
|
+
name.to_s.downcase
|
21
|
+
end
|
22
|
+
|
23
|
+
def cp_setup
|
24
|
+
copy_file 'the_comments.rb', 'config/initializers/the_comments.rb'
|
25
|
+
end
|
26
|
+
|
27
|
+
def cp_controllers
|
28
|
+
copy_file 'comments_controller.rb', 'app/controllers/comments_controller.rb'
|
29
|
+
copy_file 'ip_black_lists_controller.rb', 'app/controllers/ip_black_lists_controller.rb'
|
30
|
+
copy_file 'user_agent_black_lists_controller.rb', 'app/controllers/user_agent_black_lists_controller.rb'
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module TheComments
|
2
|
+
module Generators
|
3
|
+
class ViewsGenerator < Rails::Generators::NamedBase
|
4
|
+
source_root File.expand_path('../../../../app/views', __FILE__)
|
5
|
+
|
6
|
+
def self.banner
|
7
|
+
<<-BANNER.chomp
|
8
|
+
|
9
|
+
bundle exec rails g the_comments:views assets
|
10
|
+
bundle exec rails g the_comments:views views
|
11
|
+
bundle exec rails g the_comments:views helper
|
12
|
+
|
13
|
+
BANNER
|
14
|
+
end
|
15
|
+
|
16
|
+
def copy_sortable_tree_files
|
17
|
+
copy_gem_files
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def param_name
|
23
|
+
name.downcase
|
24
|
+
end
|
25
|
+
|
26
|
+
def copy_gem_files
|
27
|
+
if param_name == 'assets'
|
28
|
+
copy_file "../assets/javascripts/the_comments", "app/assets/javascripts/the_comments"
|
29
|
+
copy_file "../assets/stylesheets/the_comments", "app/assets/stylesheets/the_comments"
|
30
|
+
elsif param_name == 'views'
|
31
|
+
directory "../views/the_comments", "app/views/the_comments"
|
32
|
+
elsif param_name == 'helper'
|
33
|
+
copy_file "../helpers/render_comments_tree_helper.rb", "app/helpers/render_comments_tree_helper.rb"
|
34
|
+
else
|
35
|
+
puts "Wrong params - use only [assets | views | helper] values"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module TheComments
|
2
|
+
def self.configure(&block)
|
3
|
+
yield @config ||= TheComments::Configuration.new
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.config
|
7
|
+
@config
|
8
|
+
end
|
9
|
+
|
10
|
+
# Configuration class
|
11
|
+
class Configuration
|
12
|
+
include ActiveSupport::Configurable
|
13
|
+
config_accessor :tolerance_time, :empty_inputs, :max_reply_depth
|
14
|
+
end
|
15
|
+
|
16
|
+
configure do |config|
|
17
|
+
config.max_reply_depth = 3
|
18
|
+
config.tolerance_time = 5
|
19
|
+
config.empty_inputs = [:message]
|
20
|
+
end
|
21
|
+
end
|
data/lib/the_comments.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'the_comments/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "the_comments"
|
8
|
+
gem.version = TheComments::VERSION
|
9
|
+
gem.authors = ["Ilya N. Zykin"]
|
10
|
+
gem.email = ["zykin-ilya@ya.ru"]
|
11
|
+
gem.description = %q{ Nested Comments }
|
12
|
+
gem.summary = %q{ Nested Comments form TheTeacher }
|
13
|
+
gem.homepage = "https://github.com/open-cook/the_comments"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency 'haml'
|
21
|
+
gem.add_dependency 'state_machine'
|
22
|
+
gem.add_dependency 'the_sortable_tree'
|
23
|
+
end
|
data/the_comments.jpg
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: the_comments
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ilya N. Zykin
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-03-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: haml
|
16
|
+
requirement: &80817540 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *80817540
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: state_machine
|
27
|
+
requirement: &80817330 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *80817330
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: the_sortable_tree
|
38
|
+
requirement: &80817120 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *80817120
|
47
|
+
description: ! ' Nested Comments '
|
48
|
+
email:
|
49
|
+
- zykin-ilya@ya.ru
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- .gitignore
|
55
|
+
- Gemfile
|
56
|
+
- LICENSE.txt
|
57
|
+
- README.md
|
58
|
+
- Rakefile
|
59
|
+
- app/assets/javascripts/the_comments.js.coffee
|
60
|
+
- app/assets/javascripts/the_comments_manage.js.coffee
|
61
|
+
- app/assets/stylesheets/the_comments.css.scss
|
62
|
+
- app/controllers/concerns/the_comments_controller.rb
|
63
|
+
- app/controllers/concerns/the_comments_ip_controller.rb
|
64
|
+
- app/controllers/concerns/the_comments_user_agent_controller.rb
|
65
|
+
- app/helpers/render_comments_tree_helper.rb
|
66
|
+
- app/models/concerns/the_comments_base.rb
|
67
|
+
- app/models/concerns/the_comments_black_ip.rb
|
68
|
+
- app/models/concerns/the_comments_black_user_agent.rb
|
69
|
+
- app/models/concerns/the_comments_commentable.rb
|
70
|
+
- app/models/concerns/the_comments_states.rb
|
71
|
+
- app/models/concerns/the_comments_user.rb
|
72
|
+
- app/views/ip_black_lists/index.html.haml
|
73
|
+
- app/views/the_comments/_comment.html.haml
|
74
|
+
- app/views/the_comments/_comment_body.html.haml
|
75
|
+
- app/views/the_comments/_form.html.haml
|
76
|
+
- app/views/the_comments/_manage_controls.html.haml
|
77
|
+
- app/views/the_comments/_tree.html.haml
|
78
|
+
- app/views/the_comments/index.html.haml
|
79
|
+
- app/views/the_comments/manage.html.haml
|
80
|
+
- app/views/user_agent_black_lists/index.html.haml
|
81
|
+
- config/locales/en.yml
|
82
|
+
- config/routes.rb
|
83
|
+
- db/migrate/20130101010101_create_comments.rb
|
84
|
+
- lib/generators/the_comments/USAGE
|
85
|
+
- lib/generators/the_comments/templates/comments_controller.rb
|
86
|
+
- lib/generators/the_comments/templates/ip_black_lists_controller.rb
|
87
|
+
- lib/generators/the_comments/templates/the_comments.rb
|
88
|
+
- lib/generators/the_comments/templates/user_agent_black_lists_controller.rb
|
89
|
+
- lib/generators/the_comments/the_comments_generator.rb
|
90
|
+
- lib/generators/the_comments/views_generator.rb
|
91
|
+
- lib/the_comments.rb
|
92
|
+
- lib/the_comments/config.rb
|
93
|
+
- lib/the_comments/version.rb
|
94
|
+
- the_comments.gemspec
|
95
|
+
- the_comments.jpg
|
96
|
+
homepage: https://github.com/open-cook/the_comments
|
97
|
+
licenses: []
|
98
|
+
post_install_message:
|
99
|
+
rdoc_options: []
|
100
|
+
require_paths:
|
101
|
+
- lib
|
102
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
requirements: []
|
115
|
+
rubyforge_project:
|
116
|
+
rubygems_version: 1.8.15
|
117
|
+
signing_key:
|
118
|
+
specification_version: 3
|
119
|
+
summary: Nested Comments form TheTeacher
|
120
|
+
test_files: []
|