Merge branch 'master' of github.com:diaspora/diaspora

This commit is contained in:
zhitomirskiyi 2010-11-16 12:01:22 -08:00
commit 9b5a6cc27a
21 changed files with 797 additions and 710 deletions

2
.rspec
View file

@ -1 +1,3 @@
--color
--require rspec/instafail
--format RSpec::Instafail

View file

@ -10,10 +10,39 @@ class PeopleController < ApplicationController
def index
@aspect = :search
@people = Person.search(params[:q]).paginate :page => params[:page], :per_page => 25, :order => 'created_at DESC'
# dont do it@people.first.diaspora_handle == params[:q]
#only do it if it is an email address
if params[:q].try(:match, Devise.email_regexp)
find_remote_user(params[:q])
end
respond_with @people
end
def find_remote_user(account)
finger = EMWebfinger.new(account)
finger.on_person do |response|
begin
puts response.inspect
if response.class == Person
response.socket_to_uid(current_user.id, :aspects => @aspects)
else
require File.join(Rails.root,'lib/diaspora/websocket')
puts Diaspora::WebSocket
Diaspora::WebSocket.queue_to_user(current_user.id, {:class => 'person', :query => account, :response => response})
end
rescue
end
end
end
def show
@person = Person.find(params[:id].to_id)

View file

@ -3,17 +3,19 @@
# the COPYRIGHT file.
module SocketsHelper
include ApplicationHelper
include ApplicationHelper
def obj_id(object)
(object.is_a? Post) ? object.id : object.post_id
def obj_id(object)
object.respond_to?(:post_id) ? object.post_id : object.id
end
def action_hash(uid, object, opts={})
begin
user = User.find_by_id uid
if object.is_a? Post
v = render_to_string(:partial => 'shared/stream_element', :locals => {:post => object, :current_user => user}) unless object.is_a? Retraction
v = render_to_string(:partial => 'shared/stream_element', :locals => {:post => object, :current_user => user})
elsif object.is_a? Person
v = render_to_string(:partial => type_partial(object), :locals => {:person => object, :current_user => user}) unless object.is_a? Retraction
else
v = render_to_string(:partial => type_partial(object), :locals => {:post => object, :current_user => user}) unless object.is_a? Retraction
end
@ -32,7 +34,7 @@ module SocketsHelper
action_hash[:notification] = notification(object)
end
action_hash[:mine?] = object.person && (object.person.owner.id == uid)
action_hash[:mine?] = object.person && (object.person.owner.id == uid) if object.respond_to?(:person)
action_hash.to_json
end

View file

@ -8,6 +8,8 @@ class Person
include MongoMapper::Document
include ROXML
include Encryptor::Public
require File.join(Rails.root, 'lib/diaspora/websocket')
include Diaspora::Socketable
xml_accessor :_id
xml_accessor :diaspora_handle
@ -148,7 +150,6 @@ class Person
}
}
end
protected
def clean_url

View file

@ -239,6 +239,7 @@ class User
end
def push_to_person(salmon, post, person)
person.reload # Sadly, we need this for Ruby 1.9.
# person.owner will always return a ProxyObject.
# calling nil? performs a necessary evaluation.
unless person.owner.nil?

View file

@ -17,6 +17,8 @@
if(obj['notice']){
processNotification(obj['notice']);
}else if (obj['class'] == 'people'){
processPerson(obj['html']);
}else{
debug("got a " + obj['class'] + " for aspects " + obj['aspect_ids']);
@ -42,6 +44,10 @@
});
function processPerson(html){
$('.people#stream').prepend(html).slideDown('slow', function(){})
}
function processNotification(html){
$('#notification').html(html).fadeIn(200).delay(4000).fadeOut(200, function(){ $(this).html("");});
}
@ -97,7 +103,7 @@
function processPhotoInAlbum(photoHash){
if (location.href.indexOf(photoHash['album_id']) == -1){
return ;
}
}›
html = "<div class=\'image_thumb\' id=\'"+photoHash['id']+"\' style=\'padding-right:3px;\'> \
<a href=\"/photos/"+ photoHash['id'] +"\"> \
<img alt=\"New thumbnail\" src=\""+ photoHash['thumb_url'] +"\" /> \

View file

@ -18,7 +18,7 @@
- elsif current_user.pending_requests.find_by_person_id(person.id)
= link_to =t('.pending_request'), aspects_manage_path
- else
= render :partial => 'requests/new_request_to_person', :locals => {:aspects => @aspects, :person => person}
= render :partial => 'requests/new_request_to_person', :locals => {:aspects => aspects, :person => person}
.info
= person.diaspora_handle

View file

@ -7,8 +7,8 @@
=t('.results_for')
%u= params[:q]
%ul#stream
%ul#stream.people
- for person in @people
= render 'people/person', :person => person
= render 'people/person', :person => person, :aspects => @aspects
= will_paginate @people

View file

@ -25,4 +25,4 @@
%h3 t('.cancel_my_account')
%p
= t('.unhappy') #{link_to t('.cancel_my_account'), registration_path(resource_name), :confirm => t('are_you_sure'), :method => :delete}.
= link_to t('.back'), :back
= link_to t('back'), :back

View file

@ -1,6 +1,6 @@
%h4
= t('.invites')
= link_to t('.invite_someone'), "#invite_user_pane", :class => "invite_user_button", :title => "Invite someone"
= link_to t('.invite_someone'), "#invite_user_pane", :class => "invite_user_button", :title => t('.invite_someone')
= t('.invitations_left', :count => invites)
%br
.yo{ :style => "display:none;"}

View file

@ -2,7 +2,7 @@
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
#
# See config/locales/devise/devise.sv.yml for Swedish Diaspora terms.
# See config/locales/diaspora/sv.yml for Swedish Diaspora terms.
sv:
errors:
@ -26,11 +26,16 @@ sv:
username: 'Användarnamn'
password: 'Lösenord'
sign_in: 'Logga in'
have_a_problem: "Har du problem att komma in? Klicka här"
remember_me: "Kom ihåg mig"
signed_in: 'Inloggning ok.'
signed_out: 'Utloggning ok.'
passwords:
send_instructions: 'Du kommer att få ett ebrev med instruktioner för att återställa lösenordet inom några minuter.'
updated: 'Ditt lösenord har ändrats och du är inloggad.'
new:
forgot_password: "Glömt ditt lösenord?"
send_password_instructions: "Skicka mig information om hur jag återställer lösenordet"
confirmations:
send_instructions: 'Du kommer att få ett ebrev med instruktioner för att verifiera ditt konto inom några minuter.'
confirmed: 'Ditt konto har verifierats och du är inloggad.'
@ -46,14 +51,31 @@ sv:
invitation_token_invalid: 'Denna inbjudan är ej giltig!'
updated: 'Ditt lösenord är nu inställt och du är inloggad.'
mailer:
confirmation_instructions:
subject: 'Instruktioner för att verifiera ditt konto.'
reset_password_instructions:
subject: 'Instruktioner för att återställa ditt lösenord.'
unlock_instructions:
subject: 'Instruktioner för att låsa upp ditt konto.'
welcome: "Välkommen %{email}!"
hello: "Hej %{email}!"
confirmation_instructions:
subject: 'Instruktioner för att aktivera ditt konto'
you_can_confirm: "Klicka på länken nedan för att aktivera ditt konto:"
confirm: "Aktivera mitt konto"
reset_password_instructions:
subject: 'Instruktioner för att återställa lösenordet'
someone_requested: "Du har efterfrågat en länk för att återställa ditt lösenord. För att fullfölja det, klicka på länken neda."
change: "Återställ mitt lösenord"
wont_change: "Dit lösenord kommer inte ändras förrän du klickat på länken och ändrat det."
ignore: "Om det inte är du som vill byta lösenord så kan du ignorera det här mailet."
unlock_instructions:
subject: 'Instruktioner för upplåsning'
account_locked: "Ditt konto har låsts eftersom du eller någon annan har angett fel lösenord för många gånger."
click_to_unlock: "Klicka på länken nedan för att låsa upp ditt konto:"
unlock: "Lås upp mitt konto"
invitation:
subject: 'En vän vill att du ska gå med i Diaspora!'
has_invited_you: "%{name} har bjudit in dig till Diaspora"
have_invited_you: "%{names} har bjudit in dig till Diaspora"
accept_at: ", gå till %{url} för att acceptera din inbjudan."
accept: "Acceptera inbjudan"
ignore: "Om du inte vill gå med i Diaspora kan du ignorera detta mail."
no_account_till: "Ditt konto kommer inte skapas förrän du klickat på knappen ovan och skapat ett nytt konto."
shared:
links:
sign_in: 'Logga in'

View file

@ -223,7 +223,6 @@ en:
leave_blank: "(leave blank if you don't want to change it)"
password_to_confirm: "(we need your current password to confirm your changes)"
unhappy: "Unhappy?"
back: "Back"
update: "Update"
cancel_my_account: "Cancel my account"
closed: "Signups are closed on this Diaspora pod."
@ -264,6 +263,7 @@ en:
request_people: "If you'd like, you can request to place him/her in one of your aspects."
already_requested: "You have already sent a request to %{name}."
does_not_exist: "Person does not exist!"
not_connected: "You are not connected with this person"
edit:
info_available_to: "This info will be available to whomever you connect with on Diaspora."
your_profile: "Your profile"

View file

@ -20,7 +20,8 @@
# request: (vän-) förfrågan
# profile: profil
# seed: frö
#
# contact: kontakt
sv:
settings: "Inställningar"
@ -88,13 +89,13 @@ sv:
share_with_all: "Dela på alla sidor"
share_with: "Dela med %{aspect}"
all: "alla"
aspect_friends:
add_friends: "lägg till vänner"
aspect_contacts:
add_contacts: "lägg till kontakter"
everyone: "Alla"
add_to: "lägg till i %{aspect}"
invitations:
invites: "Inbjudningar"
invite_a_friend: "Bjud in en vän"
invite_someone: "Bjud in en kontakt"
invitations_left: "(%{count} kvar)"
reshare:
reshare: "Återdela"
@ -110,18 +111,18 @@ sv:
notification:
new: "Ny %{type} från %{from}"
aspects:
no_friends_message:
nobody: "Vi vet att du har vänner, bjud in dem till Diaspora!"
no_contacts_message:
nobody: "Vi vet att du har kontakter, bjud in dem till Diaspora!"
nobody_in_aspect: "Sidan '%{aspect_name}' är tom."
add_friend: "Lägg till en vän"
add_friend_to: "Lägg till en vän i %{aspect_name}"
invite: "Bjud in en vän till Diaspora!"
add_contact: "Lägg till en kontakt"
add_contact_to: "Lägg till en kontakt i %{aspect_name}"
invite: "Bjud in en kontakt till Diaspora!"
no_posts_message:
start_talking: "Ingen har sagt något än. Bli först!"
manage:
add_a_new_aspect: "Lägg till en ny sida"
add_a_new_friend: "Lägg till en ny vän"
requests: "Vänförfrågningar"
add_a_new_contact: "Lägg till en ny kontakt"
requests: "Kontaktförfrågningar"
no_requests: "Inga nya förfrågningar"
manage_aspects: "Hantera sidor"
drag_to_add: "Dra för att lägga till personer"
@ -136,10 +137,10 @@ sv:
success: "%{name} är nu borttagen."
update:
success: "Din sida %{name} är nu ändrad."
move_friend:
move_contact:
failure: "fungerade inte %{inspect}"
success: "Personen flyttades till den nya sidan"
error: "Kunde inte flytta vän: %{inspect}"
error: "Kunde inte flytta kontakt: %{inspect}"
add_to_aspect:
failure: "Misslyckades med att lägga in personen på den nya sidan."
success: "Personen tillagt på sidan."
@ -152,7 +153,7 @@ sv:
failure: "Misslyckades med att ta bort personen från vald sida"
users:
edit:
invite_friends: "Bjud in en vän"
invite_contacts: "Bjud in en kontakt"
export_data: "Exportera data"
close_account: "Stäng kontot"
change_language: "Ändra språk"
@ -178,7 +179,7 @@ sv:
add: "Lägg till"
step_3:
your_services: "Dina tjänster"
description: 'Anslut dina befintliga tjänster till ditt Diaspora-konto. Du kommer att kunna skicka meddelanden genom dessa om du väljer "gör publik." på sidan för alla vänner.'
description: 'Anslut dina befintliga tjänster till ditt Diaspora-konto. Du kommer att kunna skicka meddelanden genom dessa om du väljer "gör publik." på sidan för alla kontakter.'
step_4:
set_up: "Nu är guiden klar, %{name}!"
ready_to_share: "Du är nu redo att börja dela med "
@ -234,12 +235,19 @@ sv:
sign_up_for_diaspora: "Gå med i Diaspora"
create:
success: "Du har nu gått med i Diaspora!"
edit:
edit: "Ändra %{name}"
leave_blank: "(lämna tomt om du inte vill ändra det)"
password_to_confirm: "(det nuvarande lösenordet krävs för att bekräfta ändringarna)"
unhappy: "Missnöjd?"
update: "Uppdatera"
cancel_my_account: "Avsluta mitt konto"
invitations:
create:
sent: 'Din inbjudan är nu skickad.'
no_more: 'Du har inga fler inbjudningar.'
already_sent: 'Du har redan bjudit in denna person.'
already_friends: 'Du är redan vän med den här personen'
already_friends: 'Den här personen finns redan bland dina kontakter'
new:
invite_someone_to_join: "Bjud in en än till Diaspora!"
if_they_accept_info: "om de accepterar så kommer de att läggas till på den sida du valde"
@ -257,21 +265,19 @@ sv:
destroy: "Ta bort"
helper:
no_message_to_display: "Inget meddelande att visa."
index:
status_messages: "statusmeddelanden"
people:
person:
pending_request: "väntande förfrågningar"
already_friends: "Redan vänner"
already_friends: "Finns i dina kontakter"
thats_you: "Detta är du!"
add_contact: "lägg till kontakt"
index:
results_for: "sökresultat för"
show:
no_posts: "inga meddelanden att visa!"
add_friend: "lägg till vän"
not_friends: "Du ärr närvarande inte vän med %{name}"
request_people: "Om du känner för det så skulle du kunna skicka en vänförfrågan."
already_requested: "Du har redan skickat en vänförfrågan till %{name}."
not_friends: "%{name} finns inte bland dina kontakter"
request_people: "Om du känner för det så skulle du kunna skicka en kontaktförfrågan."
already_requested: "Du har redan skickat en kontaktförfrågan till %{name}."
does_not_exist: "Den här personen finns inte!"
edit:
info_available_to: "Den här informationen kommer vara synlig för alla som du ansluter till på diaspora."
@ -291,7 +297,7 @@ sv:
updated: "Profilen är uppdaterad"
failed: "Misslyckades med att uppdatera profilen"
profile_sidebar:
remove_friend: "ta bort vän"
remove_contact: "ta bort kontakt"
edit_my_profile: "Ändra min profil"
last_seen: "senast sedd: %{how_long_ago}"
bio: "bio"
@ -301,16 +307,16 @@ sv:
results_for: " resultat för %{params}"
people_on_pod_are_aware_of: " personer på denna plats är medvetna om att"
requests:
new_request:
add_a_new_friend_to: "Lägg till en vän till"
manage_aspect_contacts:
add_a_new_contact_to: "Lägg till en kontakt till"
enter_a_diaspora_username: "Ange ett användarnamn:"
your_diaspora_username_is: "Din Diaspora-adress är: %{diaspora_handle}"
friends_username: "Vännens Diaspora-adress"
contact_username: "Kontaktens Diaspora-adress"
create_request: "Skapa förfrågan"
destroy:
success: "Ni är nu vänner."
success: "Kontakten är nu tillagd."
error: "Var god välj en aspekt!"
ignore: "Ignorerade vänförfrågan."
ignore: "Ignorerade kontaktförfrågan."
create:
tried: "vi gjorde vårat bästa för att skicka meddelandet till %{account}"
services:
@ -332,13 +338,13 @@ sv:
love: "hälsningar,"
diaspora: "Diasporas mailrobot"
new_request:
subject: "ny Diaspora vänförfågan från %{from}"
just_sent_you: "skickade nyss en vänförfrågan till dig på Diaspora"
subject: "ny kontaktförfrågan från %{from}"
just_sent_you: "skickade nyss en kontaktförfrågan till dig på Diaspora"
try_it_out: "Du borde verkligen överväga att kolla upp detta."
sign_in: "logga in här"
request_accepted:
subject: "%{name} har accepterat din vänförfrågan på Diaspora"
accepted: "har accepterat din vänförfrågan. Denne finns nu på "
subject: "%{name} har accepterat din kontaktförfrågan på Diaspora"
accepted: "har accepterat din kontaktförfrågan. Denne finns nu på "
aspect: "sidan."
# The following is from the rails-i18n project at http://github.com/svenfuchs/rails-i18n

View file

@ -2,6 +2,7 @@ Feature: managing contact requests
Background:
Given I am signed in
And I have an aspect called "Family"
And I have one contact request
Scenario: seeing contact requests
@ -10,8 +11,6 @@ Feature: managing contact requests
@javascript @wip
Scenario: accepting a contact request
Given I have an aspect called "Family"
When I am on the home page
And I follow "Manage (1)"
Then I should see 1 contact request

View file

@ -11,7 +11,7 @@ end
Given 'I am signed in' do
@me ||= Factory(:user)
@me ||= Factory(:user, :getting_started => false)
When %(I go to the new user session page)
When %(I fill in "Username" with "#{@me.username}")
When %(I fill in "Password" with "#{@me.password}")

View file

@ -14,10 +14,11 @@ end
Given /^I have one contact request$/ do
other_user = make_user
other_user.aspects.create!(:name => "meh")
other_aspect = other_user.aspects.create!(:name => "meh")
other_user.send_contact_request_to(@me.person, other_aspect)
other_user.reload
other_user.send_contact_request_to(@me.person, other_user.aspects.first)
other_aspect.reload
@me.reload
end

View file

@ -7,12 +7,12 @@ module Diaspora
module Connecting
def send_contact_request_to(desired_contact, aspect)
# should have different exception types for these?
raise "You cannot connect yourself" if desired_contact.nil?
raise "You have already sent a contact request to that person!" if self.pending_requests.detect{
|x| x.to == desired_contact}
raise "You cannot connect yourself" if desired_contact.nil?
raise "You have already sent a contact request to that person!" if self.pending_requests.detect {
|x| x.to == desired_contact }
raise "You are already connected to that person!" if contact_for desired_contact
request = Request.instantiate(
:to => desired_contact,
:to => desired_contact,
:from => self.person,
:into => aspect)
if request.save
@ -39,8 +39,8 @@ module Diaspora
end
def accept_and_respond(contact_request_id, aspect_id)
request = pending_requests.find!(contact_request_id)
requester = request.from
request = pending_requests.find!(contact_request_id)
requester = request.from
reversed_request = accept_contact_request(request, aspect_by_id(aspect_id))
dispatch_contact_acceptance reversed_request, requester
end
@ -58,7 +58,7 @@ module Diaspora
def receive_contact_request(contact_request)
Rails.logger.info("receiving contact request #{contact_request.to_json}")
#response from a contact request you sent
if original_request = original_request(contact_request)
destination_aspect = self.aspect_by_id(original_request.into_id)
@ -72,7 +72,7 @@ module Diaspora
self.save
Request.send_request_accepted(self, contact_request.from, destination_aspect)
#this is a new contact request
#this is a new contact request
elsif !request_from_me?(contact_request)
self.pending_requests << contact_request
self.save!
@ -94,19 +94,23 @@ module Diaspora
def remove_contact(bad_contact)
contact = contact_for(bad_contact)
contact.aspects.each{|aspect|
contact.aspects.each do |aspect|
contact.aspects.delete(aspect)
aspect.posts.each { |post|
aspect.posts.each do |post|
aspect.post_ids.delete(post.id) if post.person == bad_contact
}
end
aspect.save
}
end
self.raw_visible_posts.find_all_by_person_id( bad_contact.id ).each{|post|
self.visible_post_ids.delete( post.id )
self.raw_visible_posts.find_all_by_person_id(bad_contact.id).each do |post|
self.visible_post_ids.delete(post.id)
post.user_refs -= 1
(post.user_refs > 0 || post.person.owner.nil? == false) ? post.save : post.destroy
}
if (post.user_refs > 0) || post.person.owner.nil? == false
post.save
else
post.destroy
end
end
self.save
raise "Contact not deleted" unless contact.destroy
bad_contact.save
@ -133,7 +137,7 @@ module Diaspora
end
def requests_for_me
pending_requests.select{|req| req.to == self.person}
pending_requests.select { |req| req.to == self.person }
end
end
end

1266
spec/fixtures/users.yaml vendored

File diff suppressed because it is too large Load diff

View file

@ -27,7 +27,7 @@ module HelperMethods
end
def connect_users(user1, aspect1, user2, aspect2)
request = user1.send_contact_request_to(user2.person, aspect1)
user1.send_contact_request_to(user2.person, aspect1)
user1.reload
aspect1.reload

View file

@ -0,0 +1,13 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
#
require 'spec_helper'
describe SocketsHelper do
describe '#obj_id' do
end
end

View file

@ -100,6 +100,7 @@ describe User do
it 'should be remove a post if the noone links to it' do
person = user2.person
user2.delete
person.reload
lambda {user.disconnect(person)}.should change(Post, :count).by(-1)
end