From 9fa26f020e12c226f10d3dbc0d2d6f37cb53f893 Mon Sep 17 00:00:00 2001 From: maxwell Date: Wed, 23 Jun 2010 14:32:51 -0700 Subject: [PATCH 1/2] DG MS; clicking on a person's name redirects to that person's post stream --- app/controllers/friends_controller.rb | 1 + app/helpers/application_helper.rb | 18 +++++++- app/models/post.rb | 1 - app/views/blogs/_blog.html.haml | 4 +- app/views/bookmarks/_bookmark.html.haml | 2 +- app/views/friends/show.html.haml | 22 +++------- .../status_messages/_status_message.html.haml | 2 +- app/views/users/show.html.haml | 1 + spec/helpers/application_helper_spec.rb | 28 ++++++++++++ spec/models/post_spec.rb | 44 +++++++++++++------ 10 files changed, 89 insertions(+), 34 deletions(-) create mode 100644 app/views/users/show.html.haml create mode 100644 spec/helpers/application_helper_spec.rb diff --git a/app/controllers/friends_controller.rb b/app/controllers/friends_controller.rb index 55778861f..e6ce8f36b 100644 --- a/app/controllers/friends_controller.rb +++ b/app/controllers/friends_controller.rb @@ -7,6 +7,7 @@ class FriendsController < ApplicationController def show @friend = Friend.first(:conditions=> {:id => params[:id]}) + @friend_posts = @friend.posts end def destroy diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index e56227538..a6c3a1003 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -47,7 +47,7 @@ module ApplicationHelper end def mine?(post) - post.owner == User.first.email + post.person == User.first end def type_partial(post) @@ -58,4 +58,20 @@ module ApplicationHelper def how_long_ago(obj) time_ago_in_words(obj.created_at) + " ago." end + + def person_url(person) + case person.class.to_s + when "Friend" + friend_path(person) + when "User" + user_path(person) + else + "#" + end + end + + def link_to_person(person) + link_to person.real_name, person_url(person) + end + end diff --git a/app/models/post.rb b/app/models/post.rb index 9dc312309..e822c6cfe 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -41,7 +41,6 @@ class Post yield self end - protected def send_to_view diff --git a/app/views/blogs/_blog.html.haml b/app/views/blogs/_blog.html.haml index c4b4b9f9e..366f5ad85 100644 --- a/app/views/blogs/_blog.html.haml +++ b/app/views/blogs/_blog.html.haml @@ -1,6 +1,6 @@ %li.message{:class => ("mine" if mine?(post))} %span.from - = link_to post.owner, "#" + = link_to_person post.person %b wrote a new blog post %br %b= post.title @@ -8,4 +8,4 @@ = raw post.body %div.time= link_to "#{time_ago_in_words(post.updated_at)} ago", blog_path(post) - if mine?(post) - = link_to 'Destroy', blog_path(post), :confirm => 'Are you sure?', :method => :delete \ No newline at end of file + = link_to 'Destroy', blog_path(post), :confirm => 'Are you sure?', :method => :delete diff --git a/app/views/bookmarks/_bookmark.html.haml b/app/views/bookmarks/_bookmark.html.haml index ca90be1fe..03fd47c0f 100644 --- a/app/views/bookmarks/_bookmark.html.haml +++ b/app/views/bookmarks/_bookmark.html.haml @@ -1,6 +1,6 @@ %li.message{:class => ("mine" if mine?(post))} %span.from - = link_to post.owner, "#" + = link_to_person post.person %b shared a link %br = post.title diff --git a/app/views/friends/show.html.haml b/app/views/friends/show.html.haml index fedc3e2a3..d13562f8d 100644 --- a/app/views/friends/show.html.haml +++ b/app/views/friends/show.html.haml @@ -1,16 +1,8 @@ -- title "Friend" + %h1= "#{@friend.real_name}'s network stream" -%p - %strong Real Name: - = @friend.real_name -%p - %strong Email: - = @friend.email -%p - %strong Url: - = @friend.url - -%p - = link_to "Destroy", @friend, :confirm => 'Are you sure?', :method => :delete - | - = link_to "View All", friends_path + - if @posts + %ul#stream + - for post in @posts + = render type_partial(post), :post => post + - else + %h3 no posts to display! diff --git a/app/views/status_messages/_status_message.html.haml b/app/views/status_messages/_status_message.html.haml index 1484b2d9e..0c1e6786f 100644 --- a/app/views/status_messages/_status_message.html.haml +++ b/app/views/status_messages/_status_message.html.haml @@ -1,6 +1,6 @@ %li.message{:class => ("mine" if mine?(post))} %span.from - = link_to post.person.real_name, "#" + = link_to_person post.person = post.message %div.time = "#{time_ago_in_words(post.updated_at)} ago" diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml new file mode 100644 index 000000000..01cfb9999 --- /dev/null +++ b/app/views/users/show.html.haml @@ -0,0 +1 @@ +%h1 user page! diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb new file mode 100644 index 000000000..b4c82c919 --- /dev/null +++ b/spec/helpers/application_helper_spec.rb @@ -0,0 +1,28 @@ +require File.dirname(__FILE__) + '/../spec_helper' + +include ApplicationHelper + +describe ApplicationHelper do + before do + @user = Factory.create(:user, :email => "robert@grimm.com") + @friend = Factory.create(:friend) + end + + it "should specifiy if a post is not owned user" do + p = Factory.create(:post, :person => @friend) + mine?(p).should be false + end + + it "should specifiy if a post is owned current user" do + p = Factory.create(:post, :person => @user) + mine?(p).should be true + end + + it "should provide a correct show path for a given friend" do + person_url(@friend).should == "/friends/#{@friend.id}" + end + + it "should provide a correct show path for a given user" do + person_url(@user).should == "/users/#{@user.id}" + end +end diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index 61bd5efbc..9f52f044c 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -28,20 +28,38 @@ describe Post do end end - it "should list child types in reverse chronological order" do - Factory.create(:status_message, :message => "puppies", :created_at => Time.now+1) - Factory.create(:bookmark, :title => "Reddit", :link => "http://reddit.com", :created_at => Time.now+2) - Factory.create(:status_message, :message => "kittens", :created_at => Time.now+3) - Factory.create(:blog, :title => "Bears", :body => "Bear's body", :created_at => Time.now+4) - Factory.create(:bookmark, :title => "Google", :link => "http://google.com", :created_at => Time.now+5) - stream = Post.stream - stream.count.should == 5 - stream[0].class.should == Bookmark - stream[1].class.should == Blog - stream[2].class.should == StatusMessage - stream[3].class.should == Bookmark - stream[4].class.should == StatusMessage + describe "stream" do + before do + @owner = Factory.create(:user, :email => "robert@grimm.com") + @friend_one = Factory.create(:friend, :email => "some@dudes.com") + @friend_two = Factory.create(:friend, :email => "other@dudes.com") + + Factory.create(:status_message, :message => "puppies", :created_at => Time.now+1, :person => @owner) + Factory.create(:bookmark, :title => "Reddit", :link => "http://reddit.com", :created_at => Time.now+2, :person => @friend_one) + Factory.create(:status_message, :message => "kittens", :created_at => Time.now+3, :person => @friend_two) + Factory.create(:blog, :title => "Bears", :body => "Bear's body", :created_at => Time.now+4, :person => @owner) + Factory.create(:bookmark, :title => "Google", :link => "http://google.com", :created_at => Time.now+5, :person => @friend_two) + end + + it "should list child types in reverse chronological order" do + stream = Post.stream + stream.count.should == 5 + stream[0].class.should == Bookmark + stream[1].class.should == Blog + stream[2].class.should == StatusMessage + stream[3].class.should == Bookmark + stream[4].class.should == StatusMessage + end + + it "should get all posts for a specified user" do + friend_posts = @friend_one.posts + friend_posts.count.should == 1 + + friend_posts = @friend_two.posts + friend_posts.count.should == 2 + end end + end From fb7ed9e0e7e578bddf0faf073881b5c218eeca34 Mon Sep 17 00:00:00 2001 From: maxwell Date: Wed, 23 Jun 2010 15:25:46 -0700 Subject: [PATCH 2/2] DG MS pushing a small show page fix --- app/controllers/friends_controller.rb | 1 - app/views/friends/show.html.haml | 17 ++++++++++------- spec/controllers/friends_controller_spec.rb | 8 ++++++++ 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/controllers/friends_controller.rb b/app/controllers/friends_controller.rb index e6ce8f36b..55778861f 100644 --- a/app/controllers/friends_controller.rb +++ b/app/controllers/friends_controller.rb @@ -7,7 +7,6 @@ class FriendsController < ApplicationController def show @friend = Friend.first(:conditions=> {:id => params[:id]}) - @friend_posts = @friend.posts end def destroy diff --git a/app/views/friends/show.html.haml b/app/views/friends/show.html.haml index d13562f8d..8ca7c8c57 100644 --- a/app/views/friends/show.html.haml +++ b/app/views/friends/show.html.haml @@ -1,8 +1,11 @@ - %h1= "#{@friend.real_name}'s network stream" +%h1= "#{@friend.real_name}'s network stream" - - if @posts - %ul#stream - - for post in @posts - = render type_partial(post), :post => post - - else - %h3 no posts to display! + + + +- if @friend.posts + %ul#stream + - for post in @friend.posts + = render type_partial(post), :post => post +- else + %h3 no posts to display! diff --git a/spec/controllers/friends_controller_spec.rb b/spec/controllers/friends_controller_spec.rb index 4abbbede7..57d6e87df 100644 --- a/spec/controllers/friends_controller_spec.rb +++ b/spec/controllers/friends_controller_spec.rb @@ -5,6 +5,7 @@ describe FriendsController do before do #TODO(dan) Mocking Warden; this is a temp fix request.env['warden'] = mock_model(Warden, :authenticate? => @user, :authenticate! => @user) + Factory.create(:user) @friend = Factory.build(:friend) end @@ -48,5 +49,12 @@ describe FriendsController do it 'should have test that a delete removes a friend from the database' do end + + it 'should display a list of a friends posts on their page' do + friend = Factory.create(:friend) + @status_message = Factory.create(:status_message, :person => friend) + get :show, :id => friend.id + response.body.should include @status_message.message + end end