implemented forum post controller

This commit is contained in:
albert
2011-01-13 18:16:39 -05:00
parent 523cc9fe02
commit 541163685d
13 changed files with 121 additions and 42 deletions

View File

@@ -1,16 +1,20 @@
class ArtistsController < ApplicationController
respond_to :html, :xml, :json
before_filter :member_only, :except => [:index, :show]
def new
@artist = Artist.new_with_defaults(params)
respond_with(@artist)
end
def edit
@artist = Artist.find(params[:id])
respond_with(@artist)
end
def index
@artists = Artist.build_relation(params).paginate(:per_page => 25, :page => params[:page])
respond_with(@artists)
end
def show
@@ -18,38 +22,26 @@ class ArtistsController < ApplicationController
if @artist
@posts = Danbooru.config.select_posts_visible_to_user(CurrentUser.user, Post.find_by_tags(@artist.name, :limit => 6))
else
redirect_to new_artist_path(params[:name])
end
respond_with(@artist)
end
def create
@artist = Artist.create(params[:artist])
if @artist.errors.empty?
redirect_to artist_path(@artist), :notice => "Artist created"
else
flash[:notice] = "There were errors"
render :action => "new"
end
respond_with(@artist)
end
def update
@artist = Artist.find(params[:id])
@artist.update_attributes(params[:artist])
if @artist.errors.empty?
redirect_to artist_path(@artist), :notice => "Artist updated"
else
flash[:notice] = "There were errors"
render :action => "edit"
end
respond_with(@artist)
end
def revert
@artist = Artist.find(params[:id])
@version = ArtistVersion.find(params[:version_id])
@artist.revert_to!(@version)
redirect_to artist_path(@artist), :notice => "Artist updated"
respond_with(@artist)
end
end

View File

@@ -3,7 +3,11 @@ class CommentsController < ApplicationController
before_filter :member_only, :only => [:update, :create]
def index
@posts = Post.commented_before(params[:before_date] || Time.now).limit(8)
if params[:group_by] == "post"
index_by_post
else
index_by_comment
end
end
def update
@@ -21,8 +25,22 @@ class CommentsController < ApplicationController
format.html do
redirect_to post_path(@comment.post), :notice => "Comment posted"
end
format.js
end
end
private
def index_by_post
@posts = Post.find_by_tags(params[:tags]).commented_before(params[:before_date] || Time.now).limit(8)
respond_with(@posts) do |format|
format.html {render :action => "index_by_post"}
end
end
def index_by_comment
@search = Comment.search(params[:search])
@comments = @search.paginate(:page => params[:page])
respond_with(@comments) do |format|
format.html {render :action => "index_by_comment"}
end
end
end

View File

@@ -15,7 +15,8 @@ class ForumPostsController < ApplicationController
end
def index
@forum_posts = ForumPost.search(params[:search])
@search = ForumPost.search(params[:search])
@forum_posts = @search.paginate(:page => params[:page], :order => "id DESC")
respond_with(@forum_posts)
end
@@ -25,7 +26,7 @@ class ForumPostsController < ApplicationController
end
def create
@forum_post = ForumPost.new(params[:forum_post])
@forum_post = ForumPost.create(params[:forum_post])
respond_with(@forum_post)
end

View File

@@ -7,7 +7,7 @@ class ForumPost < ActiveRecord::Base
after_save :update_topic_updated_at
validates_presence_of :body, :creator_id
scope :body_matches, lambda {|body| where(["text_index @@ plainto_tsquery(?)", body])}
search_methods :body_matches
search_method :body_matches
def editable_by?(user)
creator_id == user.id || user.is_moderator?

View File

@@ -186,7 +186,8 @@ class User < ActiveRecord::Base
return false unless is_privileged?
newest_topic = ForumPost.first(:order => "updated_at desc", :select => "updated_at")
return false if newest_topic.nil?
return newest_topic.updated_at > user.last_forum_read_at
return true if last_forum_read_at.nil?
return newest_topic.updated_at > last_forum_read_at
end
end

View File

@@ -0,0 +1,7 @@
<div class="comments">
<div class="index">
<% @comments.each do |comment| %>
<%= render :partial => "comments/partials/index/list", :locals => {:post => comment.post, :comments => [comment], :show_header => false} %>
<% end %>
</div>
</div>

View File

@@ -0,0 +1,7 @@
<div>
<%= simple_form_for @search do |f| %>
<%= f.input :body_matches %>
<%= f.input :creator_name_equals %>
<%= f.button :submit %>
<% end %>
</div>

View File

@@ -0,0 +1,6 @@
<h1>Edit Post</h1>
<%= simple_form_for(@forum_post) do |f| %>
<%= f.input :body %>
<%= f.button :submit %>
<% end %>

View File

@@ -0,0 +1,26 @@
<%= render "search" %>
<table>
<thead>
<tr>
<th>Topic</th>
<th>Excerpt</th>
<th>Creator</th>
<th>Date</th>
</tr>
</thead>
<tbody>
<% @forum_posts.each do |forum_post| %>
<tr>
<td><%= forum_post.topic.title %></td>
<td><%= truncate forum_post.body, :length => 50 %></td>
<td><%= forum_post.creator.name %></td>
<td><%= forum_post.created_at %></td>
</tr>
<% end %>
</tbody>
</table>
<div id="paginator">
<%= will_paginate @forum_posts %>
</div>

View File

@@ -0,0 +1,7 @@
<h1>New Post</h1>
<%= simple_form_for(@forum_post) do |f| %>
<%= f.input :topic_id, :as => :hidden %>
<%= f.input :body %>
<%= f.button :submit %>
<% end %>

View File

@@ -14,23 +14,37 @@ class CommentsControllerTest < ActionController::TestCase
CurrentUser.ip_addr = nil
end
should "get the index page" do
get :index
assert_response :success
end
should "update a comment" do
post :update, {:id => @comment.id, :comment => {:body => "abc"}}, {:user_id => @comment.creator_id}
assert_redirected_to comment_path(@comment)
end
should "create a comment" do
p = Factory.create(:post)
assert_difference("Comment.count", 1) do
post :create, {:comment => Factory.attributes_for(:comment, :post_id => p.id)}, {:user_id => @user.id}
context "index action" do
should "render by post" do
get :index, {:group_by => "post"}
assert_response :success
end
should "render by comment" do
get :index, {:group_by => "comment"}
assert_response :success
end
end
context "update action" do
should "update the comment" do
post :update, {:id => @comment.id, :comment => {:body => "abc"}}, {:user_id => @comment.creator_id}
assert_redirected_to comment_path(@comment)
end
end
context "create action"do
setup do
@post = Factory.create(:post)
end
should "create a comment" do
assert_difference("Comment.count", 1) do
post :create, {:comment => Factory.attributes_for(:comment, :post_id => @post.id)}, {:user_id => @user.id}
end
comment = Comment.last
assert_redirected_to post_path(comment.post)
end
comment = Comment.last
assert_redirected_to post_path(comment.post)
end
end
end

View File

@@ -58,7 +58,7 @@ class ForumPostsControllerTest < ActionController::TestCase
context "new action" do
should "render" do
get :new, {}, {:user_id => @user.id}
get :new, {}, {:user_id => @user.id, :topic_id => @forum_topic.id}, {:user_id => @user.id}
assert_response :success
end
end
@@ -66,7 +66,7 @@ class ForumPostsControllerTest < ActionController::TestCase
context "create action" do
should "create a new forum post" do
assert_difference("ForumPost.count", 1) do
post :create, {:forum_post => {:body => "xaxaxa"}}, {:user_id => @user.id}
post :create, {:forum_post => {:body => "xaxaxa", :topic_id => @forum_topic.id}}, {:user_id => @user.id}
end
forum_post = ForumPost.last