updates_controller.rb |
|
---|---|
class UpdatesController < ApplicationController
before_filter :process_params
before_filter :require_user, :only => [:timeline, :replies]
def index
@title = "updates"
@list_class = "all"
respond_to do |format|
format.json {
@updates = Update
set_pagination
render :json => @updates.map{ |u| UpdateJsonDecorator.decorate(u) }
}
format.html { render_index(Update) }
end
end
def timeline
@list_class = "friends"
render_index(current_user.timeline(params))
end
def replies
@list_class = "mentions"
render_index(current_user.at_replies(params))
end
def show
@update = Update.first(:id => params[:id])
if @update
render :layout => "update"
else
render :file => "#{Rails.root}/public/404", :status => 404
end
end
def create |
|
XXX: This should really be put into a model. Fat controller here! |
do_tweet = params[:tweet] == "1"
u = Update.new(:text => params[:text],
:referral_id => params[:referral_id],
:author => current_user.author,
:twitter => do_tweet) |
add entry to user’s feed |
current_user.feed.updates << u
unless u.valid?
flash[:error] = u.errors.values.join("\n")
else
current_user.feed.save
current_user.save |
tell hubs there is a new entry |
current_user.feed.ping_hubs
flash[:notice] = "Update created."
end
if request.referrer
redirect_to request.referrer
else
redirect_to root_path
end
end
def destroy
update = Update.first :id => params[:id] |
security. |
if update.author == current_user.author
update.destroy
flash[:notice] = "Update Deleted!"
redirect_to root_path
else
flash[:error] = "I'm afraid I can't let you do that, #{current_user.username}."
redirect_to :back
end
end
protected |
Manage page state |
def set_pagination
set_params_page
@updates = @updates.paginate(:page => params[:page], :per_page => params[:per_page], :order => :created_at.desc)
set_pagination_buttons(@updates)
end |
Render correct haml depending on request type |
def render_index(updates)
@updates = updates
set_pagination
render :index, :layout => show_layout?
end
def process_params
@update_id, @update_text = "", "" |
Set update form state correctly |
id = params.fetch("reply") { params["share"] }
if id
u = Update.first(:id => id)
@update_id = id
@update_text = "@#{u.author.username} " if params["reply"]
@update_text = "RS @#{u.author.username}: #{u.text}" if params["share"]
elsif params["status"]
@update_text = params["status"]
end
end
end |