diff options
Diffstat (limited to 'app/controllers/users_controller.rb')
-rw-r--r-- | app/controllers/users_controller.rb | 123 |
1 files changed, 61 insertions, 62 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 670c1c6..1ebb5a6 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -1,84 +1,83 @@ class UsersController < ApplicationController + def show + tweet_id = Integer(params[:id]) + + @item = Tweet.find(tweet_id) + @user = @item.user + helpers = ApplicationController.helpers + @title = "\"#{helpers.strip_tags(helpers.format_tweet_text(@item.text))[0...30]}\" from @#{@item.user.screen_name}" + + respond_to do |format| + format.html do + prepare_info + end + + format.json do + @trim_user = params[:trim_user] == "true" + end + end + end + def best - page = get_page_number(params) - screen_name = params[:screen_name] - user = User.where(:screen_name => screen_name).first - if user - @items = user.tweets - .where("favorites_count > 0 OR retweets_count > 0") - .order("COALESCE(favorites_count, 0) + COALESCE(retweets_count, 0) DESC") - .page(page) - .per(Settings.page_per) - else - @items = [] + user = render_timeline(params) do |tweets, user| + tweets.of(user).reacted.order_by_reactions end - @title = "@#{screen_name}'s Best Tweets" + @title = "@#{user.screen_name}'s Best Tweets" end def recent - page = get_page_number(params) - screen_name = params[:screen_name] - user = User.where(:screen_name => screen_name).first - if user - @items = user.tweets - .where("favorites_count > 0 OR retweets_count > 0") - .order("id DESC") - .page(page) - .per(Settings.page_per) - else - @items = [] + user = render_timeline(params) do |tweets, user| + tweets.of(user).recent.reacted.order_by_reactions end - @title = "@#{screen_name}'s Newest Favorited Tweets" + @title = "@#{user.screen_name}'s Recent Best Tweets" end def timeline - page = get_page_number(params) - screen_name = params[:screen_name] - user = User.where(:screen_name => screen_name).first - if user - @items = user.tweets - .order("id DESC") - .page(page) - .per(Settings.page_per) - else - @items = [] + user = render_timeline(params) do |tweets, user| + if params[:tweets] == "all" + tweets.of(user).order_by_id + else + tweets.of(user).reacted.order_by_id + end + end + @title = "@#{user.screen_name}'s Newest Tweets" + + if user.protected + raise Exception # FIXME end - @title = "@#{screen_name}'s Newest Tweets" end def my + user = render_timeline(params) do |tweets, user| + tweets.discovered(user).order_by_id + end + @title = "@#{user.screen_name}'s Recent Discoveries" + end + + private + def render_timeline(params, &g) page = get_page_number(params) screen_name = params[:screen_name] - user = User.where(:screen_name => screen_name).first - if user - @items = Tweet - .where("id IN (SELECT tweet_id FROM (" + - "SELECT tweet_id FROM favorites WHERE user_id = #{user.id} " + - "UNION " + - "SELECT tweet_id FROM retweets WHERE user_id = #{user.id}" + - ") AS rf)") - .order("id DESC") - .page(page) - .per(Settings.page_per) - else - @items = [] + @user = User.where(:screen_name => screen_name).first + unless @user + raise ActiveRecord::RecordNotFound.new(screen_name) end - @title = "@#{screen_name}'s Recent Discoveries" - prepare_cache - end - def info - screen_name = params[:screen_name] - user = User.where(:screen_name => screen_name).first - if user - @tweets_count = user.tweets.count - @favorites_count = user.favorites.count - @retweets_count = user.retweets.count - @favorited_count = user.tweets.inject(0){|s, m| s + m.favorites_count} - @retweeted_count = user.tweets.inject(0){|s, m| s + m.retweets_count} - else - @info = nil + @items = g.call(Tweet, @user) + .page(page) + .per(Settings.page_per) + + respond_to do |format| + format.html do + prepare_info + end + + format.json do + @trim_user = params[:trim_user] == "true" + end end + + return @user end end |