aboutsummaryrefslogtreecommitdiffstats
path: root/app/controllers/users_controller.rb
diff options
context:
space:
mode:
authorre4k <re4k@re4k.info>2013-04-17 02:00:26 +0900
committerre4k <re4k@re4k.info>2013-04-17 02:00:26 +0900
commit88026553952be01d4b5e46d59c66444d93ad1410 (patch)
tree83dac9c3ad95969de9d7e5dd2ee307241dc64484 /app/controllers/users_controller.rb
parent22ca2944772896c1d7b219a159891ed11fb4ef1b (diff)
downloadaclog-88026553952be01d4b5e46d59c66444d93ad1410.tar.gz
refactor, add limit parameter
Diffstat (limited to 'app/controllers/users_controller.rb')
-rw-r--r--app/controllers/users_controller.rb180
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