FrankYan93/nanotwitter

View on GitHub
service/timeline.rb

Summary

Maintainability
A
45 mins
Test Coverage
get '/:username/tweets' do
    @user_name = params[:username]
    user = User.find_by username: @user_name

    if user.nil?
        "user dosen't exit!"
    else
        @user = user
        n = 100
        label = user[:id].to_s + '_tweet'

        # print $redis.lrange(label,0,-1),"\n"
        # if his tweet redis expire update!
        updatePersonalTweets(user[:id], n)

        @all_tweets = $redis.lrange(label, 0, -1) # Tweet.where(user_id: user[:id]).order(create_time: :desc).limit(n)
        @n = params[:n].to_i || 0
        erb :userTimeline
    end
end

def log_in_home
    if session[:user_id].nil?
        not_log_in_home
    else
        # print "userid in session:",session[:user_id],"\n"
        tmp = $redis.get('User' + session[:user_id].to_s)
        currentUser = JSON.parse tmp unless tmp.nil?
        if currentUser.nil?
            currentUser = User.find_by(id: session[:user_id])
            $redis.set('User' + session[:user_id].to_s, currentUser.to_json)
        end
        @user = currentUser
        updateUserRedis session[:user_id]
        @n = params[:n].to_i || 0
        erb :home
    end
end

def not_log_in_home
    if !session[:user_id].nil?
        log_in_home
    else
        @n = params[:n].to_i || 0
        # @all_tweets = Tweet.all.order(create_time: :desc).limit(100)
        erb :index
    end
end

def control_bar(user_name)
    @page_user_name = user_name
    @x = "location='/#{@page_user_name}/editProfile'"
    @y = "location='/#{@page_user_name}/followers?n=0'"
    @z = "location='/#{@page_user_name}/followings?n=0'"
    @user_tweets = "location='/#{@page_user_name}/tweets'"
    @user_likestweets = "location='/#{@page_user_name}/likes/tweets'"

    if @page_user_name == session[:username]
        erb :my_control_bar
    else
        erb :other_control_bar
    end
end

def time_line
    for i in (0 + @n * 20)..(19 + @n * 20)
        break if @all_tweets[i].nil?
        @tweet = @all_tweets[i]
        #      @Nickname = @all_recent_tweets[i][:nickname]
        #      puts @tweet.to_json
        erb :singleTweet
    end
end