diff options
author | re4k <re4k@re4k.info> | 2013-04-17 02:00:26 +0900 |
---|---|---|
committer | re4k <re4k@re4k.info> | 2013-04-17 02:00:26 +0900 |
commit | 88026553952be01d4b5e46d59c66444d93ad1410 (patch) | |
tree | 83dac9c3ad95969de9d7e5dd2ee307241dc64484 /app/controllers/users_controller.rb | |
parent | 22ca2944772896c1d7b219a159891ed11fb4ef1b (diff) | |
download | aclog-88026553952be01d4b5e46d59c66444d93ad1410.tar.gz |
refactor, add limit parameter
Diffstat (limited to 'app/controllers/users_controller.rb')
-rw-r--r-- | app/controllers/users_controller.rb | 180 |
1 files changed, 90 insertions, 90 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index aeda688..dbd1206 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,10 +1,13 @@ class UsersController < ApplicationController - before_filter :get_user, :except => [:show, :favoriters] - before_filter :get_user_b + before_filter :force_page, :only => [:best, :recent] + before_filter :require_user, :except => [:show, :favoriters] + before_filter :include_user_b, :only => [:favorited_by, :retweeted_by, :given_favorites_to, :given_retweets_to] + after_filter :check_protected def best @title = "@#{@user.screen_name}'s Best Tweets" - render_page do + + render_timeline do case order when :favorite @user.tweets.reacted.order_by_favorites @@ -18,7 +21,8 @@ class UsersController < ApplicationController def recent @title = "@#{@user.screen_name}'s Recent Best Tweets" - render_page do + + render_timeline do case order when :favorite @user.tweets.recent.reacted.order_by_favorites @@ -31,11 +35,10 @@ class UsersController < ApplicationController end def timeline - raise Aclog::Exceptions::UserProtected if @user.protected - @title = "@#{@user.screen_name}'s Newest Tweets" + render_timeline do - if all + if get_bool(params[:all]) @user.tweets.order_by_id else @user.tweets.reacted.order_by_id @@ -45,6 +48,7 @@ class UsersController < ApplicationController def discovered @title = "@#{@user.screen_name}'s Recent Discoveries" + render_timeline do case params[:tweets] when /^fav/ @@ -58,59 +62,42 @@ class UsersController < ApplicationController end def info - raise Aclog::Exceptions::UserNotRegistered unless @user.account + raise Aclog::Exceptions::UserNotRegistered unless @user.registered? @title = "@#{@user.screen_name} (#{@user.name})'s Profile" - respond_to do |format| - format.html - format.json do - @include_user_stats = true - end - end + @include_user_stats = true end def favorited_by if @user_b - @title = "@#{@user.screen_name}'s Tweets" - render_timeline(@user.tweets.favorited_by(@user_b).order_by_id) + render_user_to_user else - @title = "Who Favorited @#{@user.screen_name}" - @event_type = "favs" - render_users_by(:favorite) + render_users_ranking end end def retweeted_by if @user_b - @title = "@#{@user.screen_name}'s Tweets" - render_timeline(@user.tweets.retweeted_by(@user_b).order_by_id) + render_user_to_user else - @title = "Who Retweeted @#{@user.screen_name}" - @event_type = "retweets" - render_users_by(:retweet) + render_users_ranking end end def given_favorites_to if @user_b - @title = "@#{@user_b.screen_name}'s Tweets" - render_timeline(@user_b.tweets.favorited_by(@user).order_by_id) + render_user_to_user else - @title = "@#{@user.screen_name}'s Favorites" - @event_type = "favs" - render_users_to(:favorite) + render_users_ranking end end def given_retweets_to if @user_b - @title = "@#{@user_b.screen_name}'s Tweets" - render_timeline(@user_b.tweets.retweeted_by(@user).order_by_id) + render_user_to_user else - @title = "@#{@user.screen_name}'s Retweets" - @event_type = "retweets" - render_users_to(:retweet) + render_users_ranking end end @@ -130,15 +117,7 @@ class UsersController < ApplicationController @title = "\"#{helpers.strip_tags(helpers.format_tweet_text(@item.text))[0...30]}\" from @#{@user.screen_name}" @title_b = "@#{@user.screen_name}'s Tweet" - respond_to do |format| - format.html do - @full = full - end - - format.json do - render "shared/_tweet", :locals => {:item => @item} - end - end + @full = get_bool(params[:full]) end # only json @@ -152,43 +131,63 @@ class UsersController < ApplicationController end private - def render_users_by(event) - case event - when :favorite - pr = -> tweet{tweet.favorites} - when :retweet - pr = -> tweet{tweet.retweets} - end - - @usermap = @user.tweets - .order_by_id - .limit(100) - .inject(Hash.new(0)){|hash, tweet| pr.call(tweet).each{|event| hash[event.user_id] += 1}; hash} - .sort_by{|id, count| -count} + def render_users_ranking + by = -> model do + model.joins( + "INNER JOIN (" + + "SELECT id FROM tweets WHERE tweets.user_id = #{@user.id} ORDER BY id DESC LIMIT 100" + + ") target ON tweet_id = target.id") + end - render "shared/users" - end + to = -> model do + Tweet.joins( + "INNER JOIN (" + + "SELECT tweet_id FROM #{model.table_name} WHERE #{model.table_name}.user_id = #{@user.id} ORDER BY id DESC LIMIT 500" + + ") action ON tweets.id = action.tweet_id") + end - def render_users_to(event) - case event - when :favorite - es = @user.favorites - when :retweet - es = @user.retweets + case params[:action].to_sym + when :favorited_by + @title = "Who Favorited @#{@user.screen_name}" + users_object = by.call(Favorite) + when :retweeted_by + @title = "Who Retweeted @#{@user.screen_name}" + users_object = by.call(Retweet) + when :given_favorites_to + @title = "@#{@user.screen_name}'s Favorites" + users_object = to.call(Favorite) + when :given_retweets_to + @title = "@#{@user.screen_name}'s Retweets" + users_object = to.call(Retweet) end - @usermap = es - .order_by_id - .limit(500) - .map{|e| Tweet.cached(e.tweet_id)} - .compact - .inject(Hash.new(0)){|hash, tweet| hash[tweet.user_id] += 1; hash} - .sort_by{|user_id, count| -count} + @usermap = users_object + .inject(Hash.new(0)){|hash, obj| hash[obj.user_id] += 1; hash} + .sort_by{|id, count| -count} render "shared/users" end - def get_user + def render_user_to_user + render_timeline do + case params[:action].to_sym + when :favorited_by + @title = "@#{@user.screen_name}'s Tweets" + @user.tweets.favorited_by(@user_b).order_by_id + when :retweeted_by + @title = "@#{@user.screen_name}'s Tweets" + @user.tweets.retweeted_by(@user_b).order_by_id + when :given_favorites_to + @title = "@#{@user_b.screen_name}'s Tweets" + @user_b.tweets.favorited_by(@user).order_by_id + when :given_retweets_to + @title = "@#{@user_b.screen_name}'s Tweets" + @user_b.tweets.retweeted_by(@user).order_by_id + end + end + end + + def require_user if params[:screen_name] == "me" if session[:user_id] params[:user_id] = session[:user_id] @@ -198,34 +197,35 @@ class UsersController < ApplicationController end if params[:user_id] - #@user = User.cached(params[:user_id].to_i) - @user = User.cached(params[:user_id].to_i) + user = User.cached(params[:user_id].to_i) end - if !@user && params[:screen_name] - #@user = User.where(:screen_name => params[:screen_name]).first - @user = User.cached(params[:screen_name]) + if !user && params[:screen_name] + user = User.cached(params[:screen_name]) end - raise Aclog::Exceptions::UserNotFound unless @user - raise Aclog::Exceptions::UserNotRegistered if @user.protected? && !@user.registered? + raise Aclog::Exceptions::UserNotFound unless user + + @user = user end - def get_user_b - if params[:screen_name_b] == "me" - if session[:user_id] - params[:user_id_b] = session[:user_id] - else - raise Aclog::Exceptions::LoginRequired - end + def include_user_b + if params[:user_id_b] + user_b = User.cached(params[:user_id_b].to_i) end - if params[:user_id_b] - @user_b = User.cached(params[:user_id_b].to_i) + if !user_b && params[:screen_name_b] + user_b = User.where(:screen_name => params[:screen_name_b]).first end - if !@user_b && params[:screen_name_b] - @user_b = User.where(:screen_name => params[:screen_name_b]).first + @user_b = user_b + end + + def check_protected + if @user && @user.protected? && !@user.registered? + unless session[:account] && session[:account].user_id == @user.id + raise Aclog::Exceptions::UserProtected if @user.protected + end end end end |