peanut_gallery 0.0.0 → 0.1.0
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 +4 -4
- data/README.md +124 -8
- data/app/controllers/peanut_gallery/comments_controller.rb +45 -0
- data/app/helpers/peanut_gallery/comments_helper.rb +27 -0
- data/app/models/peanut_gallery/comment.rb +15 -0
- data/app/views/comments/_comment.html.erb +6 -0
- data/lib/generators/peanut_gallery/install_generator.rb +29 -0
- data/lib/peanut_gallery.rb +5 -1
- data/lib/peanut_gallery/engine.rb +4 -0
- data/lib/peanut_gallery/has_comments.rb +7 -0
- data/lib/peanut_gallery/version.rb +1 -1
- data/peanut_gallery.gemspec +3 -0
- metadata +36 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 949795aa2df5a636b51139bb19efb2152842c876
|
4
|
+
data.tar.gz: eb9d7a8b4dd9dbbd285b34b97c57f829dd0f558d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e05af60a7d21977e460cb47334370a353422c42d532d22307cc3fc2c2234493e84bab88dc6bb17f9a575c26f5f53608ded505b44deefe306c052b7f28c6198d
|
7
|
+
data.tar.gz: 9ef2e06176cb5c5b177f395a37b26838c22f94fe32e71f9f95f43dcbac3c3f54aebdfee0ebb90930c314ce1f2ca0bd68f981a48b438933ce005ee8f9bb130ace
|
data/README.md
CHANGED
@@ -1,8 +1,13 @@
|
|
1
|
-
|
1
|
+
PeanutGallery
|
2
|
+
==========
|
2
3
|
|
3
|
-
|
4
|
+
PeanutGallery adds a simple commenting feature to your Ruby on Rails
|
5
|
+
application.
|
4
6
|
|
5
|
-
|
7
|
+
Installation
|
8
|
+
----------
|
9
|
+
|
10
|
+
### Add Gem To Project
|
6
11
|
|
7
12
|
Add this line to your application's Gemfile:
|
8
13
|
|
@@ -12,17 +17,128 @@ gem 'peanut_gallery'
|
|
12
17
|
|
13
18
|
And then execute:
|
14
19
|
|
15
|
-
|
20
|
+
```text
|
21
|
+
$ bundle
|
22
|
+
```
|
16
23
|
|
17
24
|
Or install it yourself as:
|
18
25
|
|
19
|
-
|
26
|
+
```text
|
27
|
+
$ gem install peanut_gallery
|
28
|
+
```
|
29
|
+
|
30
|
+
### Add the Comment Model
|
31
|
+
|
32
|
+
Next, you'll want to add a `Comment` model to your application. You can do this
|
33
|
+
by running the install generator:
|
34
|
+
|
35
|
+
```text
|
36
|
+
$ bundle exec rails g peanut_gallery:install
|
37
|
+
```
|
38
|
+
|
39
|
+
This will add a migration, so you'll want to migrate your database.
|
40
|
+
|
41
|
+
```text
|
42
|
+
$ bundle exec rake db:migrate
|
43
|
+
```
|
44
|
+
|
45
|
+
> The install generator adds a `Comment` model to your application. You'll
|
46
|
+
> notice the model file has no content, but still works. That's because it is
|
47
|
+
> inheriting from the `PeanutGallery::Comment` model. This is so we can hide
|
48
|
+
> the abstracted (repeated) logic. But, you're welcome to override any default
|
49
|
+
> logic in your project's `Comment` model.
|
50
|
+
>
|
51
|
+
> *Note: PeanutGallery never accesses the base model by default. It will always
|
52
|
+
> look for the `Comment` model in your project.*
|
53
|
+
|
54
|
+
Usage
|
55
|
+
----------
|
56
|
+
|
57
|
+
There are three items to be concerned with to get PeanutGallery working
|
58
|
+
properly:
|
59
|
+
|
60
|
+
1. Routes
|
61
|
+
2. Associations
|
62
|
+
3. Forms
|
63
|
+
|
64
|
+
### Routes
|
65
|
+
|
66
|
+
Running the install generator should add the following to your
|
67
|
+
`config/routes.rb` file:
|
68
|
+
|
69
|
+
```ruby
|
70
|
+
namespace :peanut_gallery do
|
71
|
+
resources :comments, :only => [:create, :update, :destroy]
|
72
|
+
end
|
73
|
+
```
|
74
|
+
|
75
|
+
If something went wrong and you don't see this, go ahead and add it manually.
|
76
|
+
|
77
|
+
### Associations
|
78
|
+
|
79
|
+
For any model that you want to have comments, all you have to do is all
|
80
|
+
`has_comments` to the model. For example, if a `Post` model has comments, your
|
81
|
+
model might look like this:
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
class Post < ActiveRecord::Base
|
85
|
+
has_comments
|
86
|
+
end
|
87
|
+
```
|
88
|
+
|
89
|
+
This means you can call `comments` on any single object within this model.
|
90
|
+
|
91
|
+
### Forms
|
92
|
+
|
93
|
+
There is a helper made available to you for rendering a form:
|
94
|
+
|
95
|
+
```erb
|
96
|
+
<%= new_comment_form(object, author) %>
|
97
|
+
```
|
98
|
+
|
99
|
+
Here the `object` is the item to which you want to attach the comment. The
|
100
|
+
`author` is the object of the user who is adding the comment.
|
101
|
+
|
102
|
+
> *Note: PeanutGallery assumes (but does not require) you're using a `User`
|
103
|
+
> model, and that the logged in user is `current_user`. Therefore, you can
|
104
|
+
> leave off the `author` parameter if you have your current user wrapped up in
|
105
|
+
> a `current_user` method.
|
106
|
+
|
107
|
+
Helpers
|
108
|
+
----------
|
109
|
+
|
110
|
+
### Deleting Comments
|
111
|
+
|
112
|
+
In addition to the forms helper, there is also a helper to delete a comment.
|
113
|
+
|
114
|
+
```erb
|
115
|
+
<%= delete_comment_link(comment_object) %>
|
116
|
+
```
|
117
|
+
|
118
|
+
Of course, you can write this manually (or add your own helper) if you'd like
|
119
|
+
to.
|
120
|
+
|
121
|
+
Customization
|
122
|
+
----------
|
123
|
+
|
124
|
+
### Overriding A User Model
|
125
|
+
|
126
|
+
PeanutGallery assumes the use of a user model. If you want to override that, you'll need to add the association into your `Comment` model:
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
class Comment < ActiveRecord::Base
|
130
|
+
belongs_to :author, :class_name => 'YourUserClassName'
|
131
|
+
end
|
132
|
+
```
|
20
133
|
|
21
|
-
|
134
|
+
### Controller Actions
|
22
135
|
|
23
|
-
|
136
|
+
The controller doing all the work for PeanutGallery is the
|
137
|
+
`PeanutGallery::CommentsController`. If you want to override it, you can create
|
138
|
+
a controller at `app/controllers/peanut_gallery/comments_controller.rb`.
|
24
139
|
|
25
|
-
|
140
|
+
Contributing
|
141
|
+
----------
|
26
142
|
|
27
143
|
1. Fork it ( https://github.com/[my-github-username]/peanut_gallery/fork )
|
28
144
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class PeanutGallery::CommentsController < ApplicationController
|
2
|
+
|
3
|
+
def create
|
4
|
+
@comment = Comment.new(comment_params)
|
5
|
+
if @comment.save
|
6
|
+
redirect_to params[:peanut_gallery_comment][:redirect_route],
|
7
|
+
:notice => 'Comment created!'
|
8
|
+
else
|
9
|
+
redirect_to params[:peanut_gallery_comment][:redirect_route],
|
10
|
+
:notice => 'Comment could not be saved.'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def update
|
15
|
+
@comment = Comment.find_by_id(params[:id])
|
16
|
+
if @comment.nil?
|
17
|
+
raise "Could not find comment."
|
18
|
+
else
|
19
|
+
if @comment.save
|
20
|
+
redirect_to request.referrer, :notice => 'Comment saved!'
|
21
|
+
else
|
22
|
+
redirect_to request.referrer, :notice => 'Comment could not be saved.'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def destroy
|
28
|
+
@comment = Comment.find_by_id(params[:id])
|
29
|
+
if @comment.nil?
|
30
|
+
raise "Could not find comment."
|
31
|
+
else
|
32
|
+
@comment.destroy
|
33
|
+
redirect_to request.referrer, :notice => 'Comment deleted!'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def comment_params
|
40
|
+
params
|
41
|
+
.require(:peanut_gallery_comment)
|
42
|
+
.permit(:markdown, :item_id, :item_type, :author_id)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module PeanutGallery
|
2
|
+
module CommentsHelper
|
3
|
+
|
4
|
+
def new_comment_form(obj, author = current_user)
|
5
|
+
@comment = Comment.new if @comment.nil?
|
6
|
+
simple_form_for @comment do |f|
|
7
|
+
o = f.input :markdown, :label => false,
|
8
|
+
:placeholder => 'Add a comment ...'
|
9
|
+
o += f.input :item_id, :as => :hidden,
|
10
|
+
:input_html => { :value => obj.id }
|
11
|
+
o += f.input :item_type, :as => :hidden,
|
12
|
+
:input_html => { :value => obj.class.to_s }
|
13
|
+
o += f.input :author_id, :as => :hidden,
|
14
|
+
:input_html => { :value => author.id }
|
15
|
+
o += f.input :redirect_route, :as => :hidden,
|
16
|
+
:input_html => { :value => request.path }
|
17
|
+
o += f.submit "Add Comment"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def delete_comment_link(comment)
|
22
|
+
link_to 'Delete Comment', peanut_gallery_comment_path(comment),
|
23
|
+
:method => :delete, :data => { :confirm => 'Are you sure?' }
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module PeanutGallery
|
2
|
+
class Comment < ActiveRecord::Base
|
3
|
+
|
4
|
+
converts_markdown :markdown, :html
|
5
|
+
|
6
|
+
belongs_to :item, :polymorphic => true
|
7
|
+
belongs_to :author, :class_name => 'User'
|
8
|
+
|
9
|
+
default_scope { includes(:item, :author) }
|
10
|
+
|
11
|
+
scope :newest_first, -> { order('created_at desc') }
|
12
|
+
scope :oldest_first, -> { order('created_at asc') }
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rails/generators'
|
3
|
+
|
4
|
+
module PeanutGallery
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
desc "Add comment model migration to your project"
|
7
|
+
|
8
|
+
source_root File.expand_path('../templates', __FILE__)
|
9
|
+
|
10
|
+
def add_comment_model
|
11
|
+
cols = "item_id:integer item_type:string author_id:integer "
|
12
|
+
cols += "markdown:text html:text"
|
13
|
+
generate "model comment #{cols}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def change_model_inheritance
|
17
|
+
gsub_file 'app/models/comment.rb', /ActiveRecord\:\:Base/,
|
18
|
+
'PeanutGallery::Comment'
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_routes
|
22
|
+
routes = "\n namespace :peanut_gallery do\n"
|
23
|
+
routes += " resources :comments, :only => [:create, :update, :destroy]\n"
|
24
|
+
routes += " end\n"
|
25
|
+
inject_into_file 'config/routes.rb', routes,
|
26
|
+
:after => /Rails\.application\.routes\.draw\ do\n/
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/peanut_gallery.rb
CHANGED
data/peanut_gallery.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: peanut_gallery
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean C Davis
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mark_it_zero
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.3.1
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.3.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simple_form
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
description: ''
|
42
70
|
email:
|
43
71
|
- scdavis41@gmail.com
|
@@ -50,7 +78,14 @@ files:
|
|
50
78
|
- LICENSE.txt
|
51
79
|
- README.md
|
52
80
|
- Rakefile
|
81
|
+
- app/controllers/peanut_gallery/comments_controller.rb
|
82
|
+
- app/helpers/peanut_gallery/comments_helper.rb
|
83
|
+
- app/models/peanut_gallery/comment.rb
|
84
|
+
- app/views/comments/_comment.html.erb
|
85
|
+
- lib/generators/peanut_gallery/install_generator.rb
|
53
86
|
- lib/peanut_gallery.rb
|
87
|
+
- lib/peanut_gallery/engine.rb
|
88
|
+
- lib/peanut_gallery/has_comments.rb
|
54
89
|
- lib/peanut_gallery/version.rb
|
55
90
|
- peanut_gallery.gemspec
|
56
91
|
homepage: ''
|