MS IZ added the move friend method

This commit is contained in:
maxwell 2010-08-25 16:58:07 -07:00
parent c9e64ae209
commit 22f63a4c44
7 changed files with 107 additions and 3 deletions

View file

@ -49,4 +49,9 @@ class GroupsController < ApplicationController
end
end
def move_person
current_user.move_friend( :friend_id => params[:person_id], :from => params[:old_group_id], :to => params[:new_group_id])
render :nothing => true
end
end

View file

@ -19,5 +19,10 @@ class Group
def to_s
name
end
def posts_by_person_id( id )
id = ensure_bson id
posts.detect{|x| x.person.id == id }
end
end

View file

@ -40,6 +40,28 @@ class User
Group.create(opts)
end
def move_friend( opts = {})
return true if opts[:to] == opts[:from]
friend = Person.first(:_id => opts[:friend_id])
if self.friend_ids.include?(friend.id)
from_group = self.group_by_id(opts[:from])
to_group = self.group_by_id(opts[:to])
if from_group && to_group
posts_to_move = from_group.posts.find_all_by_person_id(friend.id)
puts posts_to_move.inspect
to_group.people << friend
to_group.posts << posts_to_move
puts to_group.inspect
from_group.person_ids.delete(ensure_bson(friend.id))
posts_to_move.each{ |x| from_group.post_ids.delete(x.id)}
puts from_group.inspect
from_group.save
to_group.save
return true
end
end
false
end
######## Posting ########
def post(class_name, options = {})
options[:person] = self.person

View file

@ -6,17 +6,15 @@
%h1.big_text
.back
= link_to "⇧ #{@group.name}", @group
= "Editing Groups"
%ul
- for group in @groups
%li.group
= group.name
%ul
-for person in group.people
%li..person
%li.person
= person.real_name

View file

@ -17,6 +17,11 @@
%i= "friends since: #{how_long_ago(@person)}"
%li
="groups: #{@person_groups}"
= "edit"
= form_for Request.new do |f|
= f.select(:group_id, @groups_array)
= f.hidden_field :destination_url, :value => person.email
= f.submit "add friend"
%li
url:
= @person.url

View file

@ -0,0 +1,14 @@
$(function() {
$("li .person").draggable({
helper: 'clone',
cursor: 'move'
});
$("li .group").droppable({
drop: function(event, ui) {
//alert('dropped!');
$("<li class='person'></li>").text(ui.draggable.text()).appendTo(this);
}
});
});

View file

@ -110,4 +110,59 @@ describe Group do
end
end
describe "group editing" do
before do
@group = @user.group(:name => 'losers')
@group2 = @user2.group(:name => 'failures')
friend_users(@user, @group, @user2, @group2)
@group.reload
@group3 = @user.group(:name => 'cats')
@user.reload
end
it 'should be able to move a friend from one of users existing groups to another' do
@user.move_friend(:friend_id => @user2.person.id, :from => @group.id, :to => @group3.id)
@group.reload
@group3.reload
@group.person_ids.include?(@user2.person.id).should be false
@group3.people.include?(@user2.person).should be true
end
it "should not move a person who is not a friend" do
@user.move_friend(:friend_id => @friend.id, :from => @group.id, :to => @group3.id)
@group.reload
@group3.reload
@group.people.include?(@friend).should be false
@group3.people.include?(@friend).should be false
end
it "should not move a person to a group that's not his" do
@user.move_friend(:friend_id => @user2.person.id, :from => @group.id, :to => @group2.id)
@group.reload
@group2.reload
@group.people.include?(@user2.person).should be true
@group2.people.include?(@user2.person).should be false
end
it 'should move all the by that user to the new group' do
message = @user2.post(:status_message, :message => "Hey Dude", :to => @group2.id)
@user.receive message.to_diaspora_xml
@group.reload
@group.posts.count.should be 1
@group3.posts.count.should be 0
@user.reload
@user.move_friend(:friend_id => @user2.person.id, :from => @group.id, :to => @group3.id)
@group.reload
@group3.reload
@group3.posts.count.should be 1
@group.posts.count.should be 0
end
end
end