Ruby Course - Lesson 8 - Build A Simple Twitter Clone With Ruby
Ruby Course - Lesson 8 - Build A Simple Twitter Clone With Ruby
Code walkthrough
http://github.com/sausheong/chirpy
1 n
n
1 has 1
follows User Session
1
1
has
Chirp
class Friendship
include DataMapper::Resource
has n, :chirps
has 1, :session
def chirp_feed
feed = follows.collect {|follow| follow.chirps}.flatten + chirps
feed.sort { |chirp1, chirp2| chirp2.created_at <=> chirp1.created_at}
end
end
belongs_to :user
before :save do
if starts_with?('follow ')
process_follow
else
process
end
end
ats = self.text.scan(AT_REGEXP)
ats.each { |at| self.text.sub!(at, "<a href='/#{at[2,at.length]}'>#
{at}</a>") }
end
def process_follow
user = User.first :chirpy_id => self.text.split[1]
user.followers << self.user
user.save
throw :halt # don't save this chirp
end
get '/' do
redirect '/home' if session[:id]
redirect '/login'
end
get '/login' do
haml :login, :layout => false
end
(3a) Facebook calls redirect URI with: (3b) Facebook calls redirect URI with:
- code - error reason
(3a) Facebook calls redirect URI with: (3b) Facebook calls redirect URI with:
- code - error reason
(3a) Facebook calls redirect URI with: (3b) Facebook calls redirect URI with:
- code - error reason
(3a) Facebook calls redirect URI with: (3b) Facebook calls redirect URI with:
- code - error reason
1
helper.rb
def facebook_oauth_authorize
redirect "https://graph.facebook.com/oauth/authorize?client_id=" +
FACEBOOK_OAUTH_CLIENT_ID +
"&redirect_uri=" +
"http://#{env['HTTP_HOST']}/#{FACEBOOK_OAUTH_REDIRECT}"
end
3a
3a
chirpy.rb
get '/logout' do
@user = User.get session[:user]
@user.session.destroy
session.clear
redirect '/'
end
get '/home' do
require_login
@myself = @user = User.get(session[:user])
@chirps = @user.chirp_feed
haml :home
end
get '/user/:id' do
require_login
@myself = User.get session[:user]
@user = User.first :chirpy_id => params[:id]
@chirps = @user.chirps
haml :home
end
post '/update' do
require_login
@user = User.get session[:user]
@user.chirps.create :text => params[:chirp], :created_at =>
Time.now
redirect "/home"
end
get '/unfollow/:id' do
require_login
@myself = User.get session[:user]
@user = User.first :chirpy_id => params[:id]
unless @myself == @user
if @myself.follows.include? @user
follows = @myself.follows_relations.first :source => @user
follows.destroy
end
end
redirect '/'
end
Implement as helper
.span-16.append-1
=snippet :'snippets/update_box'
=snippet :'snippets/follow' if @myself
%h2 Home
=snippet :'snippets/chirps'
.span-7.last
=snippet :'snippets/info_box'
.span-15.last
%em.quiet
=time_ago_in_words(chirp.created_at)
%hr.space
%hr.space
.span-5.last
%h3 Follows
[email protected] do |follow|
%a{:href => "/user/#{follow.chirpy_id}"}
%img.smallpic{:src => "#{follow.photo_url}", :width => '24px', :alt => "#{follow.name}"}
%hr.space
%h3 Followers
[email protected] do |follower|
%a{:href => "/user/#{follower.chirpy_id}"}
%img.smallpic{:src => "#{follower.photo_url}", :width => '24px', :alt => "#{follower.name}"}