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

Conflicts:
	Gemfile
	Gemfile.lock
	spec/models/user/invite_spec.rb
This commit is contained in:
maxwell 2010-10-14 23:02:06 -07:00
commit 341009e20f
22 changed files with 891 additions and 154 deletions

View file

@ -1,6 +1,7 @@
source 'http://rubygems.org'
gem 'rails', '3.0.1'
gem 'rails', '>= 3.0.0'
gem 'bundler', '>= 1.0.0'
#Security

286
Gemfile.lock Normal file
View file

@ -0,0 +1,286 @@
GIT
remote: git://github.com/Empact/roxml.git
revision: 33034d3e632b3a14565a791af0a63c7e23ec0de4
specs:
roxml (3.1.5)
activesupport (>= 2.3.0)
nokogiri (>= 1.3.3)
GIT
remote: git://github.com/collectiveidea/devise-mongo_mapper
revision: fa2f20310e0988295adc192255d3b1cedee1b412
specs:
devise-mongo_mapper (0.0.1)
devise (~> 1.1.0)
GIT
remote: git://github.com/dcu/magent.git
revision: fe08cc6e9d4c1772035f84bcfb665d17b00ac625
specs:
magent (1.0.0)
em-websocket
mongo
uuidtools
GIT
remote: git://github.com/igrigorik/em-http-request.git
revision: bf62d67fc72d6e701be5037e239dd470194b8e45
ref: bf62d67fc72d6e701be5
specs:
em-http-request (0.2.13)
addressable (>= 2.0.0)
eventmachine (>= 0.12.9)
GIT
remote: git://github.com/jnunemaker/mongomapper.git
revision: fd59b0ab068be7321f8e84b9dc12fb4fa6b8535d
branch: rails3
specs:
mongo_mapper (0.8.4)
activemodel (~> 3.0.0)
activesupport (~> 3.0.0)
plucky (~> 0.3.6)
GIT
remote: git://github.com/rsofaer/carrierwave.git
revision: 9edb8bdddd2236742a85bfd7b260387498d01f88
branch: master
specs:
carrierwave (0.4.4)
GIT
remote: git://github.com/rsofaer/redfinger.git
revision: 07721f46d02b9d3aa04880788fecb0b4c1b284d7
specs:
redfinger (0.0.6)
hashie
nokogiri (>= 1.4.0)
rest-client (>= 1.5.0)
GIT
remote: git://github.com/rsofaer/sprinkle.git
revision: 7c744ed158dda1f99a015e6a29d086e80bd8c635
specs:
sprinkle (0.3.1)
activesupport (>= 3.0.0beta4)
capistrano (>= 2.5.5)
highline (>= 1.4.0)
GEM
remote: http://rubygems.org/
specs:
abstract (1.0.0)
actionmailer (3.0.0)
actionpack (= 3.0.0)
mail (~> 2.2.5)
actionpack (3.0.0)
activemodel (= 3.0.0)
activesupport (= 3.0.0)
builder (~> 2.1.2)
erubis (~> 2.6.6)
i18n (~> 0.4.1)
rack (~> 1.2.1)
rack-mount (~> 0.6.12)
rack-test (~> 0.5.4)
tzinfo (~> 0.3.23)
activemodel (3.0.0)
activesupport (= 3.0.0)
builder (~> 2.1.2)
i18n (~> 0.4.1)
activerecord (3.0.0)
activemodel (= 3.0.0)
activesupport (= 3.0.0)
arel (~> 1.0.0)
tzinfo (~> 0.3.23)
activeresource (3.0.0)
activemodel (= 3.0.0)
activesupport (= 3.0.0)
activesupport (3.0.0)
addressable (2.2.2)
arel (1.0.1)
activesupport (~> 3.0.0)
aws (2.3.21)
http_connection
uuidtools
xml-simple
bcrypt-ruby (2.1.2)
bson (1.1)
bson_ext (1.1)
builder (2.1.2)
capistrano (2.5.19)
highline
net-scp (>= 1.0.0)
net-sftp (>= 2.0.0)
net-ssh (>= 2.0.14)
net-ssh-gateway (>= 1.0.0)
capybara (0.3.9)
culerity (>= 0.2.4)
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
selenium-webdriver (>= 0.0.3)
childprocess (0.0.7)
ffi (~> 0.6.3)
crack (0.1.8)
cucumber (0.9.2)
builder (~> 2.1.2)
diff-lcs (~> 1.1.2)
gherkin (~> 2.2.5)
json (~> 1.4.6)
term-ansicolor (~> 1.0.5)
cucumber-rails (0.3.2)
cucumber (>= 0.8.0)
culerity (0.2.12)
daemons (1.1.0)
database_cleaner (0.5.2)
devise (1.1.3)
bcrypt-ruby (~> 2.1.2)
warden (~> 0.10.7)
devise_invitable (0.3.4)
devise (~> 1.1.0)
diff-lcs (1.1.2)
em-websocket (0.1.4)
addressable (>= 2.1.1)
eventmachine (>= 0.12.9)
erubis (2.6.6)
abstract (>= 1.0.0)
eventmachine (0.12.10)
factory_girl (1.3.2)
factory_girl_rails (1.0)
factory_girl (~> 1.3)
rails (>= 3.0.0.beta4)
ffi (0.6.3)
rake (>= 0.8.7)
gherkin (2.2.8)
json (~> 1.4.6)
term-ansicolor (~> 1.0.5)
haml (3.0.21)
hashie (0.4.0)
highline (1.6.1)
http_connection (1.3.1)
i18n (0.4.1)
json (1.4.6)
json_pure (1.4.6)
mail (2.2.7)
activesupport (>= 2.3.6)
mime-types
treetop (>= 1.4.5)
mime-types (1.16)
mini_fb (1.1.3)
hashie
rest-client
mini_magick (2.3)
subexec (~> 0.0.4)
mocha (0.9.8)
rake
mongo (1.1)
bson (>= 1.0.5)
net-scp (1.0.4)
net-ssh (>= 1.99.1)
net-sftp (2.0.5)
net-ssh (>= 2.0.9)
net-ssh (2.0.23)
net-ssh-gateway (1.0.1)
net-ssh (>= 1.99.1)
nokogiri (1.4.3.1)
plucky (0.3.6)
mongo (~> 1.1)
polyglot (0.3.1)
pubsubhubbub (0.1.1)
em-http-request (>= 0.1.5)
eventmachine (>= 0.12.9)
rack (1.2.1)
rack-mount (0.6.13)
rack (>= 1.0.0)
rack-test (0.5.6)
rack (>= 1.0)
rails (3.0.0)
actionmailer (= 3.0.0)
actionpack (= 3.0.0)
activerecord (= 3.0.0)
activeresource (= 3.0.0)
activesupport (= 3.0.0)
bundler (~> 1.0.0)
railties (= 3.0.0)
railties (3.0.0)
actionpack (= 3.0.0)
activesupport (= 3.0.0)
rake (>= 0.8.4)
thor (~> 0.14.0)
rake (0.8.7)
rest-client (1.6.1)
mime-types (>= 1.16)
rspec (2.0.0)
rspec-core (= 2.0.0)
rspec-expectations (= 2.0.0)
rspec-mocks (= 2.0.0)
rspec-core (2.0.0)
rspec-expectations (2.0.0)
diff-lcs (>= 1.1.2)
rspec-mocks (2.0.0)
rspec-core (= 2.0.0)
rspec-expectations (= 2.0.0)
rspec-rails (2.0.0)
rspec (= 2.0.0)
rubyzip (0.9.4)
selenium-webdriver (0.0.29)
childprocess (>= 0.0.7)
ffi (~> 0.6.3)
json_pure
rubyzip
subexec (0.0.4)
term-ansicolor (1.0.5)
thin (1.2.7)
daemons (>= 1.0.9)
eventmachine (>= 0.12.6)
rack (>= 1.0.0)
thor (0.14.3)
treetop (1.4.8)
polyglot (>= 0.3.1)
tzinfo (0.3.23)
uuidtools (2.1.1)
warden (0.10.7)
rack (>= 1.0.0)
webmock (1.3.5)
addressable (>= 2.1.1)
crack (>= 0.1.7)
will_paginate (3.0.pre2)
xml-simple (1.0.12)
PLATFORMS
ruby
DEPENDENCIES
addressable
aws
bson (= 1.1)
bson_ext (= 1.1)
bundler (>= 1.0.0)
capybara (~> 0.3.9)
carrierwave!
cucumber-rails (= 0.3.2)
database_cleaner
devise (= 1.1.3)
devise-mongo_mapper!
devise_invitable (~> 0.3.4)
em-http-request!
em-websocket
factory_girl_rails
haml
json
magent!
mini_fb
mini_magick
mocha
mongo_mapper!
pubsubhubbub
rails (= 3.0.0)
redfinger!
roxml!
rspec (>= 2.0.0)
rspec-rails (>= 2.0.0)
sprinkle!
thin
webmock
will_paginate (= 3.0.pre2)

View file

@ -106,7 +106,8 @@ class UsersController < ApplicationController
private
def prep_image_url(params)
url = APP_CONFIG[:pod_url].chop if APP_CONFIG[:pod_url][-1,1] == '/'
url = APP_CONFIG[:pod_url].dup
url.chop! if APP_CONFIG[:pod_url][-1,1] == '/'
if params[:profile][:image_url].empty?
params[:profile].delete(:image_url)
else

View file

@ -27,7 +27,6 @@ class Request
before_validation :clean_link
scope :for_user, lambda{ |user| where(:destination_url => user.person.receive_url) }
scope :from_user, lambda{ |user| where(:destination_url.ne => user.person.receive_url) }
def self.instantiate(options = {})
person = options[:from]

View file

@ -268,8 +268,24 @@ class User
###Invitations############
def invite_user( opts = {} )
if self.invites > 0
invited_user = User.invite!(:email => opts[:email], :inviter => self)
aspect_id = opts.delete(:aspect_id)
if aspect_id == nil
raise "Must invite into aspect"
elsif !(self.aspects.find_by_id(aspect_id))
raise "Must invite to your aspect"
end
request = Request.instantiate(
:to => "http://local_request.example.com",
:from => self.person,
:into => aspect_id
)
invited_user = User.invite!(:email => opts[:email], :request => request, :inviter => self)
self.invites = self.invites - 1
self.pending_requests << request
request.save
self.save!
invited_user
else
@ -279,11 +295,14 @@ class User
def self.invite!(attributes={})
inviter = attributes.delete(:inviter)
request = attributes.delete(:request)
invitable = find_or_initialize_with_error_by(:email, attributes.delete(:email))
invitable.attributes = attributes
if invitable.inviters.include?(inviter)
raise "You already invited this person"
else
invitable.pending_requests << request
invitable.inviters << inviter
end

View file

@ -8,9 +8,6 @@
$("#add_album_button").fancybox();
});
= content_for :page_title do
= link_to "◂ #{t('.home')}", aspects_path, :aspect => params[:aspect]
- content_for :left_pane do
= render "shared/aspect_friends"
@ -31,6 +28,3 @@
#pagination
= will_paginate @albums
#content_bottom
.back
= link_to "⇧ #{t('.home')}", root_path

View file

@ -0,0 +1,20 @@
-# Copyright (c) 2010, Diaspora Inc. This file is
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
#no_posts.empty_message{:style => ("display:none" unless @posts.count == 0)}
.null_arrow ⇧
%h3=t('.start_talking')
#no_friends.empty_message{:style => ("display:none" unless @friends.count == 0)}
- if (@aspect == :all) || (@aspect == :public)
%h3=t('.nobody')
%h4= link_to t('.add_friend'), aspects_manage_path
%h4= link_to t('.invite'), aspects_manage_path
- else
%h3=t('.nobody_in_aspect', :aspect_name => @aspect.name)
%h4= link_to t('.add_friend_to', :aspect_name => @aspect.name), "#add_request_pane", :class => "add_request_button"
%h4= link_to t('.invite', :aspect_name => @aspect.name), "#invite_user_pane", :class => "invite_user_button", :class => "invite_user_button", :title => t('.invite')

View file

@ -2,18 +2,18 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
- content_for :page_title do
= link_to t('.photos'), albums_path(:aspect => @aspect)
- content_for :left_pane do
= render "shared/aspect_friends"
- content_for :publish do
= render "shared/publisher", :aspect_ids => :all, :broadcast => true
= render 'aspects/empty_messages'
%ul#stream
- for post in @posts
= render type_partial(post), :post => post unless post.class == Album
#pagination
= will_paginate @posts

View file

@ -2,18 +2,18 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
- content_for :page_title do
= link_to t('.photos'), albums_path(:aspect => @aspect)
- content_for :left_pane do
= render "shared/aspect_friends"
- content_for :publish do
= render "shared/publisher", :aspect_ids => :all
= render 'aspects/empty_messages'
%ul#stream
- for post in @posts
= render type_partial(post), :post => post unless post.class == Album
#pagination
= will_paginate @posts

View file

@ -4,5 +4,6 @@
%p
= f.label :email
= f.text_field :email
= f.hidden_field :aspect_id, :value => @aspect.id
%p= f.submit "Send an invitation"
/= link_to "Home", after_sign_in_path_for(resource_name)

View file

@ -37,9 +37,10 @@
});
function processRetraction(post_id){
$('#' + post_id ).fadeOut(500, function(){
$(this).remove;
});
$('#' + post_id ).fadeOut(500).remove();
if($("#stream")[0].childElementCount == 0){
$("#no_posts").fadeIn(200);
}
}
function processComment(post_id, html){
@ -59,14 +60,23 @@
function processPost(className, html, aspectIds){
if(onPageForAspects(aspectIds)){
$("#stream").prepend(
$(html).fadeIn("fast", function(){
$("#stream label:first").inFieldLabels();
})
);
var addPostToStream = function (html){
$("#stream").prepend(
$(html).fadeIn("fast", function(){
$("#stream label:first").inFieldLabels();
})
)
};
if( $("#no_posts").is(":visible") ){
$("#no_posts").fadeOut(400, addPostToStream(html)).hide();
} else {
addPostToStream(html);
}
}
}
function processPhotoInAlbum(photoHash){
if (location.href.indexOf(photoHash['album_id']) == -1){
return ;

View file

@ -2,30 +2,41 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
#friend_pictures
= owner_image_link
- for friend in @friends
= person_image_link(friend)
- if @logged_in && (@aspect == :public)
%h3 Facebook Friends
- @fb_friends = MiniFB.get(@access_token, 'me', :type => "friends")
- @fb_friends[:data].each do |friend|
= image_tag( "http://graph.facebook.com/#{friend[:id]}/picture" )
-unless (@aspect == :all) || (@aspect == :public)
= link_to (image_tag('add_friend_button.png', :height => "50px", :width => "50px")), "#add_request_pane", :id => 'add_request_button'
.yo{:style => 'display:none'}
#add_request_pane
= render "requests/new_request", :aspect => @aspect
-else
.clear
%br
= link_to t('.add_friends'), aspects_manage_path
#left_pane
#friend_pictures
= owner_image_link
- for friend in @friends
= person_image_link(friend)
- if @logged_in && (@aspect == :public)
%h3 Facebook Friends
- @fb_friends = MiniFB.get(@access_token, 'me', :type => "friends")
- @fb_friends[:data].each do |friend|
= image_tag( "http://graph.facebook.com/#{friend[:id]}/picture" )
-unless (@aspect == :all) || (@aspect == :public)
= link_to (image_tag('add_friend_button.png', :height => "50px", :width => "50px")), "#add_request_pane", :id => 'add_request_button'
.yo{:style => 'display:none'}
#add_request_pane
= render "requests/new_request", :aspect => @aspect
-else
.clear
%br
= link_to t('.add_friends'), aspects_manage_path
%br
%br
%ul
%li= link_to 'stream', aspect_path(@aspect)
%li= link_to t('.photos'), albums_path(:aspect => @aspect)
%br
%h4 Invites
= link_to "Invite a friend!", "#invite_user_pane", :class => "invite_user_button", :class => "invite_user_button", :title => "Invite a friend"
%br
= "You have #{@invites} invites."
.yo{ :style => "display:none;"}
#invite_user_pane
= render "invitations/new"
%br
= link_to "Invite a friend!", "#invite_user_pane", :id => "invite_user_button", :class => "invite_user_button", :title => "Invite a friend"
%br
= "You have #{@invites} invites."
.yo{ :style => "display:none;"}
#invite_user_pane
= render "invitations/new"

View file

@ -1,7 +1,3 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
fr-informal:
errors:
messages:
@ -22,19 +18,29 @@ fr-informal:
signed_in: 'Connecté avec succès.'
signed_out: 'Déconnecté avec succès.'
passwords:
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant des instructions texpliquant comment réinitialiser ton mot de passe.'
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant les instructions pour réinitialiser ton mot de passe.'
updated: 'Ton mot de passe a été modifié avec succès. Tu es à présent connecté.'
confirmations:
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant des instructions texpliquant comment confirmer ton compte.'
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant les instructions pour confirmer ton compte.'
confirmed: 'Ton compte a été confirmé avec succès. Tu es à présent connecté.'
registrations:
signed_up: 'Tu tes inscrit avec succès. Si activée, une confirmation a été envoyée sur ton adresse e-mail.'
signed_up: 'Tu tes inscrit avec succès. Si cette dernière est activée, une confirmation a été envoyée sur ton adresse e-mail.'
updated: 'Tu as mis à jour ton compte avec succès.'
destroyed: 'Au revoir ! Ton compte a été résilié avec succès. Nous espérons te revoir très bientôt.'
unlocks:
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant des instructions texpliquant comment déverrouiller ton compte.'
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant les instructions pour déverrouiller ton compte.'
unlocked: 'Ton compte a été déverrouillé avec succès. Tu es à présent connecté.'
invitations:
send_instructions: 'Ton invitation a été envoyée.'
invitation_token_invalid: 'Le jeton dinvitation fourni nest pas valide !'
updated: 'Ton mot de passe a été réglé avec succès. Tu es à présent connecté.'
mailer:
confirmation_instructions: 'Instructions de confirmation'
reset_password_instructions: 'Réinitialiser les instructions du mot de passe'
unlock_instructions: 'Instructions de déverrouillage'
confirmation_instructions:
subject: 'Instructions de confirmation'
reset_password_instructions:
subject: 'Instructions de réinitialisation du mot de passe'
unlock_instructions:
subject: 'Instructions de déverrouillage'
invitation:
subject: 'Un ami souhaite que tu rejoignes Diaspora !'

View file

@ -1,7 +1,3 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
fr:
errors:
messages:
@ -14,7 +10,7 @@ fr:
unauthenticated: 'Vous devez vous connecter ou vous inscrire avant de continuer.'
unconfirmed: 'Vous devez confirmer votre compte avant de continuer.'
locked: 'Votre compte est verrouillé.'
invalid: 'E-mail ou mot de passe invalide.'
invalid: 'Adresse e-mail ou mot de passe invalide.'
invalid_token: 'Jeton dauthentification invalide.'
timeout: 'Votre session a expiré, veuillez vous connecter de nouveau afin de continuer.'
inactive: 'Votre compte na pas encore été activé.'
@ -22,19 +18,29 @@ fr:
signed_in: 'Connecté avec succès.'
signed_out: 'Déconnecté avec succès.'
passwords:
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant des instructions vous expliquant comment réinitialiser votre mot de passe.'
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant les instructions pour réinitialiser votre mot de passe.'
updated: 'Votre mot de passe a été modifié avec succès. Vous êtes à présent connecté.'
confirmations:
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant des instructions vous expliquant comment confirmer votre compte.'
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant les instructions pour confirmer votre compte.'
confirmed: 'Votre compte a été confirmé avec succès. Vous êtes à présent connecté.'
registrations:
signed_up: 'Vous vous êtes inscrit avec succès. Si activée, une confirmation a été envoyée sur votre adresse e-mail.'
signed_up: 'Vous vous êtes inscrit avec succès. Si cette dernière est activée, une confirmation a été envoyée sur votre adresse e-mail.'
updated: 'Vous avez mis à jour votre compte avec succès.'
destroyed: 'Au revoir ! Votre compte a été résilié avec succès. Nous espérons vous revoir très bientôt.'
unlocks:
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant des instructions vous expliquant comment déverrouiller votre compte.'
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant les instructions pour déverrouiller votre compte.'
unlocked: 'Votre compte a été déverrouillé avec succès. Vous êtes à présent connecté.'
invitations:
send_instructions: 'Votre invitation a été envoyée.'
invitation_token_invalid: 'Le jeton dinvitation fourni nest pas valide !'
updated: 'Votre mot de passe a été réglé avec succès. Vous êtes à présent connecté.'
mailer:
confirmation_instructions: 'Instructions de confirmation'
reset_password_instructions: 'Réinitialiser les instructions du mot de passe'
unlock_instructions: 'Instructions de déverrouillage'
confirmation_instructions:
subject: 'Instructions de confirmation'
reset_password_instructions:
subject: 'Instructions de réinitialisation du mot de passe'
unlock_instructions:
subject: 'Instructions de déverrouillage'
invitation:
subject: 'Un ami souhaite que vous rejoigniez Diaspora !'

View file

@ -0,0 +1,40 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
tr:
errors:
messages:
not_found: "bulunmadi"
already_confirmed: "zaten doğrulandı"
not_locked: "kilitlenmedi"
devise:
failure:
unauthenticated: "Devam etmeden once bir hesap açtırmalı veya hesabınızla giriş yapmalısınız."
unconfirmed: "Hesabınızı doğrulamalısınız devam etmeden once."
locked: "Hesabınız kilitlenmiştir."
invalid: "Yanlış email veya şifre."
invalid_token: "Yanlış authentikasyon tılsımı."
timeout: "Zamanınız sona erdi, lütfen tekrar giriş yapın devam etmek için."
inactive: "Hesabınız aktive edilmemiştir daha."
sessions:
signed_in: "Başarıyla giriş yaptınız."
signed_out: "Başarıyla çıkıs yaptınız."
passwords:
send_instructions: "Kisa bir süre içersinde şifrenizi nasıl yeniliyceğinizi açıklıyan bir email alıcaksınız."
updated: "Şifreniz değistirilmiştir. Şu anda giriş yapmış oluyorsunuz."
confirmations:
send_instructions: "Kısa bir süre içersinde hesabınızı nasıl dogruluycaginiza dair bir email alicaksiniz."
confirmed: "Hesabınız dogrulanmıstır. Şu anda giriş yapmış oluyorsunuz."
registrations:
signed_up: "Basarıyla kayıt yaptınız. Dogrulama emaili size gonderilmistir."
updated: "Heabinizi başarili olarak yenilediniz."
destroyed: "Hoşçakal! Hesabiniz yok edildi. Umuyoruz sizi tekrar gorüceğiz yakınlarda."
unlocks:
send_instructions: "Kisa bir süre içersinde hesabınızı nasıl kilit altinda çikarabiliceginize dair bir email alıcaksınız."
unlocked: "Heabiniz kilit altindan çıkartılmıstır. Şu anda giriş yapmıs oluyorsunuz"
mailer:
confirmation_instructions: "Doğrulama talimatları"
reset_password_instructions: "Yeni şifre kurma talimatları"
unlock_instructions: "Kilit altından çıkarma talimatları"

View file

@ -38,6 +38,7 @@ en:
share: "Share"
aspect_friends:
add_friends: "add friends"
photos: "photos"
albums:
album:
you: "you"
@ -69,10 +70,13 @@ en:
friends_albums: "Friends Albums"
your_albums: "Your Albums"
aspects:
index:
photos: "photos"
show:
photos: "photos"
empty_messages:
start_talking: "Nobody has said anything yet. Get the conversation started!"
nobody: "We know you have friends, bring them to Diaspora!"
nobody_in_aspect: "Your aspect '%{aspect_name}' is empty."
add_friend: "Add a friend"
add_friend_to: "Add a someone to %{aspect_name}"
invite: "Invite a someone to join Diaspora!"
manage:
add_a_new_aspect: "Add a new aspect"
add_a_new_friend: "Add a new friend"

View file

@ -21,7 +21,7 @@ fr-informal:
people:
helper:
results_for: " résultats concernant %{params}"
people_on_pod_are_aware_of: " personnes agissant comme des automates sont conscients de"
people_on_pod_are_aware_of: " personnes agissant comme des automates sont au courant"
layouts:
application:
edit_profile: "éditer le profil"
@ -52,7 +52,7 @@ fr-informal:
edit:
editing: "Édition"
updated: "mis à jour"
are_you_sure: "Es-tu sûr(e)?"
are_you_sure: "Es-tu sûr(e) ?"
delete_album: "Supprimer lalbum"
cancel: "Annuler"
index:
@ -84,17 +84,18 @@ fr-informal:
add_a_new_aspect: "Ajouter un nouvel aspect"
create: "Créer"
create:
success:"Clique sur le symbole plus situé sur le côté gauche afin que Diaspora détermine qui peut voir ton nouvel aspect."
success: "Clique sur le symbole plus situé sur le côté gauche afin que Diaspora détermine qui peut voir ton nouvel aspect."
failure: "La création de laspect a échoué."
destroy:
success: "%{name} a été supprimé avec succès."
update:
success: "Ton aspect, %{name}, a été édité avec succès."
move_friends:
failure: "Lédition de laspect concernant lami %{real_name} a échoué."
failure: "Lédition de laspect concernant ton ami %{real_name} a échoué."
success: "Les aspects ont été édités avec succès."
move_friend:
error: "ne fonctionne pas %{inspect}"
notice: "Tu montres à présent à ton ami un aspect différent au tien."
failure: "ne fonctionne pas %{inspect}"
success: "Tu montres à présent à ton ami un aspect différent au tiens."
helper:
remove: "supprimer"
aspect_not_empty: "Laspect nest pas vide"
@ -106,12 +107,14 @@ fr-informal:
update_profile: "Mettre à jour le profil"
home: "Accueil"
diaspora_username: "NOM DUTILISATEUR DIASPORA"
info: "Information"
info: "Informations"
picture: "Image"
editing_profile: "Édition du profil"
albums: "Albums"
you_dont_have_any_photos: "Tu nas aucune photo ! Rends-toi sur la page"
page_to_upload_some: "afin den transférer quelques-unes."
or: "ou"
destroy: "Compte clôturé avec succès."
comments:
comment:
ago: "il y a"
@ -132,25 +135,33 @@ fr-informal:
delete_photo: "Supprimer la photo"
photo:
show_comments: "afficher les commentaires"
posted_a_new_photo_to: "a publié une nouvelle photo sur"
posted_a_new_photo_to: "a publié une nouvelle photo dans"
new:
new_photo: "Nouvelle photo"
back_to_list: "Retourner à la liste"
post_it: "publie-la !"
post_it: "la publier !"
create:
runtime_error: "Le transfert de la photo a échoué. Es-tu sûr(e) que ta ceinture de sécurité est bien attachée ?"
integrity_error: "Le transfert de la photo a échoué. Es-tu sûr(e) que cétait bien une image ?"
type_error: "Le transfert de la photo a échoué. Es-tu sûr(e) que limage était bien ajoutée ?"
type_error: "Le transfert de la photo a échoué. Es-tu sûr(e) que limage a bien été ajoutée ?"
update:
notice: "La photo a été mise à jour avec succès."
error: "Échec de lédition de la photo."
error: "Lédition de la photo a échoué."
destroy:
notice: "Photo supprimée."
notice: "La photo a été supprimée."
registrations:
new:
sign_up: "Inscription"
create:
success: "Tu as rejoint Diaspora !"
invitations:
create:
sent: 'Ton invitation a été envoyée.'
no_more: 'Tu nas plus dinvitation.'
already_sent: 'Tu as déjà invité cette personne.'
invitation_token_invalid: 'Le jeton dinvitation fourni nest pas valide !'
updated: 'Ton mot de passe a été réglé avec succès. Tu es à présent connecté.'
status_messages:
new_status_message:
tell_me_something_good: "dis-moi quelque chose de bien"
@ -164,14 +175,14 @@ fr-informal:
comments: "commentaires"
are_you_sure: "Es-tu sûr(e) ?"
destroy: "Détruire"
view_all: "Tout voir"
view_all: "Tout afficher"
message: "Message"
owner: "Propriétaire"
helper:
no_message_to_display: "Aucun message à afficher."
people:
person:
add_friend: "ajouter un ami"
add_friend: "ajouter en ami"
pending_request: "requête en attente"
index:
add_friend: "ajouter un ami"
@ -186,13 +197,13 @@ fr-informal:
show:
last_seen: "dernière connexion : %{how_long_ago}"
friends_since: "amis depuis : %{how_long_ago}"
save: "sauvegarder"
save: "sauver"
are_you_sure: "Es-tu sûr(e) ?"
remove_friend: "supprimer un ami"
remove_friend: "supprimer de mes amis"
requests:
new_request:
add_a_new_friend_to: "Ajouter un ami à"
enter_a_diaspora_username: "Saisi un nom dutilisateur Diaspora :"
add_a_new_friend_to: "Ajouter un nouvel ami à"
enter_a_diaspora_username: "Saisis un nom dutilisateur Diaspora :"
your_diaspora_username_is: "Ton nom dutilisateur Diaspora est : %{diaspora_handle}"
friends_username: "Nom dutilisateur de lami"
destroy:
@ -201,6 +212,6 @@ fr-informal:
ignore: "Requête dami ignorée."
create:
error: "Aucun résultat Diaspora na été trouvé avec cette adresse e-mail !"
already_friends: "Tu es déjà ami avec %{destination_url}!"
already_friends: "Vous êtes déjà amis avec %{destination_url}!"
success: "Une requête dami a été envoyée à %{destination_url}."
horribly_wrong: "Quelque chose dhorrible sest produit."

View file

@ -2,42 +2,42 @@
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
# Localization file for French. Add more files in this directory for other locales.
# Localization file for French (Formal Honorifics). Add more files in this directory for other locales.
# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
fr:
hello: "Bonjour tout le monde"
application:
helper:
unknown_person: "unknown person"
new_requests: "new requests"
unknown_person: "personne inconnue"
new_requests: "nouvelles requêtes"
dashboards:
helper:
home: "home"
home: "accueil"
error_messages:
helper:
invalid_fields: "Invalid Fields"
correct_the_following_errors_and_try_again: "Correct the following errors and try again."
invalid_fields: "Champs invalides"
correct_the_following_errors_and_try_again: "Corrigez les erreurs suivantes, puis réessayez."
people:
helper:
results_for: " resultados para %{params}"
people_on_pod_are_aware_of: " gente en pod estan al tanto de "
results_for: " résultats concernant %{params}"
people_on_pod_are_aware_of: " personnes agissant comme des automates sont au courant"
layouts:
application:
edit_profile: "Éditez votre profil"
logout: "Déconnexion"
edit_profile: "éditer le profil"
logout: "déconnexion"
shared:
aspect_nav:
all_aspects: "Tous les Aspects"
manage: "Gérez"
manage_your_aspects: "Gérez vos Aspects"
all_aspects: "Tous les aspects"
manage: "Gérer"
manage_your_aspects: "Gérer vos aspects"
sub_header:
all_aspects: "Tous les Aspects"
manage_aspects: "Gérez vos Aspects"
all_aspects: "Tous les aspects"
manage_aspects: "Gérer les aspects"
publisher:
share: "Partager"
aspect_friends:
add_friends: "Ajouter des amis"
add_friends: "ajouter des amis"
albums:
album:
you: "vous"
@ -52,22 +52,22 @@ fr:
edit:
editing: "Édition"
updated: "mis à jour"
are_you_sure: "Êtes-vous sûr?"
delete_album: "Supprimer l'album"
are_you_sure: "Êtes-vous sûr(e) ?"
delete_album: "Supprimer lalbum"
cancel: "Annuler"
index:
home: "accueil"
new_album: "Nouvel album"
helper:
friends_albums: "Friends Albums"
your_albums: "Your Albums"
create:
success: "Tu as créé un album nommé %{name}."
success: "Vous avez créé un album nommé %{name}."
update:
success: "Lalbum %{name} a été édité avec succès."
failure: "Lédition de lalbum %{name} a échoué."
destroy:
success: "Lalbum %{name} a été supprimé."
helper:
friends_albums: "Albums damis"
your_albums: "Vos albums"
aspects:
index:
photos: "photos"
@ -75,8 +75,8 @@ fr:
photos: "photos"
manage:
add_a_new_aspect: "Ajouter un nouvel aspect"
add_a_new_friend: "Ajouter un nouvel amis"
show: "Voir"
add_a_new_friend: "Ajouter un nouvel ami"
show: "Afficher"
update_aspects: "Mettre à jour les aspects"
requests: "Requêtes"
ignore_remove: "Ignorer/Supprimer"
@ -84,7 +84,21 @@ fr:
add_a_new_aspect: "Ajouter un nouvel aspect"
create: "Créer"
create:
success:"Cliquez sur plus situé sur le côté gauche afin den informer Diaspora qui peut voir votre nouvel aspect."
success: "Cliquez sur le symbole plus situé sur le côté gauche afin que Diaspora détermine qui peut voir votre nouvel aspect."
failure: "La création de laspect a échoué."
destroy:
success: "%{name} a été supprimé avec succès."
update:
success: "Votre aspect, %{name}, a été édité avec succès."
move_friends:
failure: "Lédition de laspect concernant votre ami %{real_name} a échoué."
success: "Les aspects ont été édités avec succès."
move_friend:
failure: "ne fonctionne pas %{inspect}"
success: "Vous montrez à présent à votre ami un aspect différent au vôtre."
helper:
remove: "supprimer"
aspect_not_empty: "Laspect nest pas vide"
users:
edit:
editing_profile: "Édition du profil"
@ -93,12 +107,14 @@ fr:
update_profile: "Mettre à jour le profil"
home: "Accueil"
diaspora_username: "NOM DUTILISATEUR DIASPORA"
info: "Information"
info: "Informations"
picture: "Image"
editing_profile: "Édition du profil"
albums: "Albums"
you_dont_have_any_photos: "Vous navez aucune photo ! Rendez-vous sur la page"
page_to_upload_some: "afin den transférer quelques-unes."
or: "ou"
destroy: "Compte clôturé avec succès."
comments:
comment:
ago: "il y a"
@ -111,22 +127,41 @@ fr:
next: "suivant"
edit_photo: "Éditer la photo"
delete_photo: "Supprimer la photo"
are_you_sure: "Êtes-vous sûr ?"
are_you_sure: "Êtes-vous sûr(e) ?"
comments: "commentaires"
edit:
editing: "Édition"
are_you_sure: "Êtes-vous sûr ?"
are_you_sure: "Êtes-vous sûr(e) ?"
delete_photo: "Supprimer la photo"
photo:
show_comments: "afficher les commentaires"
posted_a_new_photo_to: "a publié une nouvelle photo sur"
posted_a_new_photo_to: "a publié une nouvelle photo dans"
new:
new_photo: "Nouvelle photo"
back_to_list: "Retourner à la liste"
post_it: "publiez-la !"
post_it: "la publier !"
create:
runtime_error: "Le transfert de la photo a échoué. Êtes-vous sûr(e) que votre ceinture de sécurité est bien attachée ?"
integrity_error: "Le transfert de la photo a échoué. Êtes-vous sûr(e) que cétait bien une image ?"
type_error: "Le transfert de la photo a échoué. Êtes-vous sûr(e) que limage a bien été ajoutée ?"
update:
notice: "La photo a été mise à jour avec succès."
error: "Lédition de la photo a échoué."
destroy:
notice: "La photo a été supprimée."
registrations:
new:
sign_up: "Inscription"
create:
success: "Vous avez rejoint Diaspora !"
invitations:
create:
sent: 'Votre invitation a été envoyée.'
no_more: 'Vous navez plus dinvitation.'
already_sent: 'Vous avez déjà invité cette personne.'
invitation_token_invalid: 'Le jeton dinvitation fourni nest pas valide !'
updated: 'Votre mot de passe a été réglé avec succès. Vous êtes à présent connecté.'
status_messages:
new_status_message:
tell_me_something_good: "dites-moi quelque chose de bien"
@ -134,16 +169,21 @@ fr:
status_message:
show_comments: "afficher les commentaires"
delete: "Supprimer"
are_you_sure: "Êtes-vous sûr ?"
are_you_sure: "Êtes-vous sûr(e) ?"
show:
status_message: "Message détat"
comments: "commentaires"
are_you_sure: "Êtes-vous sûr ?"
are_you_sure: "Êtes-vous sûr(e) ?"
destroy: "Détruire"
view_all: "Tout voir"
view_all: "Tout afficher"
message: "Message"
owner: "Propriétaire"
helper:
no_message_to_display: "Aucun message à afficher."
people:
person:
add_friend: "ajouter en ami"
pending_request: "requête en attente"
index:
add_friend: "ajouter un ami"
real_name: "nom réel"
@ -157,6 +197,21 @@ fr:
show:
last_seen: "dernière connexion : %{how_long_ago}"
friends_since: "amis depuis : %{how_long_ago}"
save: "sauvegarder"
are_you_sure: "Êtes-vous sûr ?"
remove_friend: "supprimer un ami"
save: "sauver"
are_you_sure: "Êtes-vous sûr(e) ?"
remove_friend: "supprimer de mes amis"
requests:
new_request:
add_a_new_friend_to: "Ajouter un nouvel ami à"
enter_a_diaspora_username: "Saisissez un nom dutilisateur Diaspora :"
your_diaspora_username_is: "Votre nom dutilisateur Diaspora est : %{diaspora_handle}"
friends_username: "Nom dutilisateur de lami"
destroy:
success: "Vous êtes à présent amis."
error: "Veuillez sélectionner un aspect !"
ignore: "Requête dami ignorée."
create:
error: "Aucun résultat Diaspora na été trouvé avec cette adresse e-mail !"
already_friends: "Vous êtes déjà amis avec %{destination_url}!"
success: "Une requête dami a été envoyée à %{destination_url}."
horribly_wrong: "Quelque chose dhorrible sest produit."

View file

@ -0,0 +1,208 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3. See
# the COPYRIGHT file.
# Sample localization file for English. Add more files in this directory for other locales.
# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
tr:
hello: "Merhaba dünya"
application:
helper:
unknown_person: "bilinmiyen insanlar"
new_requests: "yeni istekler"
dashboards:
helper:
home: "ev"
error_messages:
helper:
invalid_fields: "Yanliș Bölümler"
correct_the_following_errors_and_try_again: "Alttaki yanlișlari düzeltin ve tekrar deneyin."
people:
helper:
results_for: "%{params} için sonuçlar"
people_on_pod_are_aware_of: " bu podda bizim bildiğimiz kişiler."
layouts:
application:
edit_profile: "profili düzelt"
logout: ık"
shared:
aspect_nav:
all_aspects: "Bütün Yanlar"
manage: "Düzenle"
manage_your_aspects: "Bütün yanları düzenle"
sub_header:
all_aspects: "Bütün Yanlar"
manage_aspects: "Yanları Düzenle"
publisher:
share: "Paylaş"
aspect_friends:
add_friends: "Arkadaş ekle"
albums:
album:
you: "sen"
new_album:
create: "yarat"
add_a_new_album: "Yeni albüm ekle"
show:
edit_album: "Albümü düzelt"
albums: "albümler"
updated: "düzeltildi"
by: "tarafından"
edit:
editing: "düzeltiyor"
updated: "düzeltildi"
are_you_sure: "Eminmisin?"
delete_album: "Sil Albümü"
cancel: "Vazgeç"
index:
home: "Ev"
new_album: "Yeni Albüm"
create:
success: "Yeni bir album yarattınız %{name} isminde."
update:
success: "Albüm %{name} başarı ile eklenmiştir."
failure: "Albüm %{name} yı düzeltme başarılı değil."
destroy:
success: "Albüm %{name} silinmistir."
helper:
friends_albums: "Arkadaşların Albümleri"
your_albums: "Sizin Albümleriniz"
aspects:
index:
photos: "resimler"
show:
photos: "resimler"
manage:
add_a_new_aspect: "Yeni bir yan ekle"
add_a_new_friend: "Yeni bir arkadaş ekle"
show: "Show"
update_aspects: "Yanlari düzelt"
requests: "Ricalar"
ignore_remove: "Goz ardi et/çıkart"
new_aspect:
add_a_new_aspect: "Yeni bir yan ekle"
create: "Yarat"
create:
success: "Sol taraftaki arti ya tıklıyarak Diasporaya sizin yeni yanınızı kimlerin görebileceğini belirtin."
failure: "Yan yaratimi basarılı değildi."
destroy:
success: "%{name} basarıyla yaratıldı."
update:
success: "Sizin yanınız, %{name}, başariyla düzeltildi."
move_friends:
failure: "Yan düzeltimi arkadisınız %{real_name} icin başarisizdi."
success: "Yanlar başariyla düzeltildi."
move_friend:
failure: "%{inspect} islemedi."
success: "Simdi siz arkadaşlarınıza başka bir yanınızı gosteriyorsunuz."
helper:
remove: "cikart"
aspect_not_empty: "Yan bos değil"
users:
edit:
editing_profile: "Profili düzeltiliyor"
profile:
cancel: "Vazgeç"
update_profile: "düzelt Profili"
home: "Ev"
diaspora_username: "DIASPORA ISMINIZ"
info: "Bilgi"
picture: "Resim"
editing_profile: "Profili düzeltmek"
albums: "Albümler"
you_dont_have_any_photos: "Hicbir fotorafiniz yok! Şuraya gidin"
page_to_upload_some: "yuklemek icin."
or: "veya"
comments:
comment:
ago: "once"
new_comment:
comment: "Yorum"
photos:
show:
prev: "once"
full_size: "tam büyüklük"
next: "sonra"
edit_photo: "düzelt Fotoyu"
delete_photo: "Sil Fotoyu"
are_you_sure: "Eminmisiniz?"
comments: "yorumlar"
edit:
editing: "düzeltiliyor"
are_you_sure: "Eminmisiniz?"
delete_photo: "Sil Fotoyu"
photo:
show_comments: "göster yorumları"
posted_a_new_photo_to: "yeni bir foto koydu "
new:
new_photo: "Yeni Foto"
back_to_list: "Listeye Geri Git"
post_it: "ekle!"
create:
runtime_error: "Fotoyu yukleme başarısızdı. Emniyet kemeriniz takılımıydı?"
integrity_error: "Fotoyu yukleme başarısızdı. Resim olduğundan eminmisınız?"
type_error: "Fotoyu yukleme başarısızdı. Bir resim yuklediğinize eminmisiniz?"
update:
notice: "Resim başarıyla eklendi."
error: "Fotoyu düzeltme basarısızdı."
destroy:
notice: "Foto silindi."
registrations:
new:
sign_up: "Katıl"
create:
success: "Diasporaya katıldınız!"
status_messages:
new_status_message:
tell_me_something_good: "bana iyi bir şey söyle"
oh_yeah: "tabi ya!"
status_message:
show_comments: "göster yorumları"
delete: "Sil"
are_you_sure: "Eminmisiniz?"
show:
status_message: "Status Mesaji"
comments: "yorumlar"
are_you_sure: "Eminmisiniz?"
destroy: "Yok et"
view_all: "Hepsine bak"
message: "Mesaj"
owner: "Sahibi"
helper:
no_message_to_display: "Gosterilcek bir mesaj yok."
people:
person:
add_friend: "Arkadaş ekle"
pending_request: "bekletilen rica"
index:
add_friend: "Arkadaş ekle"
real_name: "esas ismi"
diaspora_handle: "diaspora ismi"
thats_you: "o sensin!"
friend_request_pending: "Arkadaş ricasi bekletiliyor"
you_have_a_friend_request_from_this_person: "siz bir arkadaş isteği aldiniz bu kişiden"
new:
new_person: "Yeni Kişi"
back_to_list: "Listeye geri dön"
show:
last_seen: "son gorüldü: %{how_long_ago}"
friends_since: "Arkadaş süreci: %{how_long_ago}"
save: "sakla"
are_you_sure: "Eminmisiniz?"
remove_friend: "çikart arkadaşlıktan"
requests:
new_request:
add_a_new_friend_to: "Buna yeni bir arkadaş ekle"
enter_a_diaspora_username: "Bir Diaspora ismi gir:"
your_diaspora_username_is: "Sizin Diaspora isminiz: %{diaspora_handle}"
friends_username: "Arkadaşin Diaspora ismi"
destroy:
success: "Siz şimdi arkadaşsınız."
error: "Lutfen bir yan seçiniz!"
ignore: "Arkadaş isteğini reddettiniz."
create:
error: "Diaspora cekirdeği bulunmadı bu emailde!"
already_friends: "Siz zaten arakadaşsınız %{destination_url} ile!"
success: "%{destination_url} için arakadaş olma isteği gonderilmiştir."
horribly_wrong: "Bir şey muhtemalan yanliş gitti."

View file

@ -27,8 +27,8 @@ $(document).ready(function(){
//buttons//////
$("#add_aspect_button").fancybox({ 'titleShow' : false });
$("#add_request_button").fancybox({ 'titleShow': false });
$("#invite_user_button").fancybox({ 'titleShow': false });
$(".add_request_button").fancybox({ 'titleShow': false });
$(".invite_user_button").fancybox({ 'titleShow': false });
$(".add_request_button").fancybox({ 'titleShow': false });
$("input[type='submit']").addClass("button");

View file

@ -964,3 +964,48 @@ ul#settings_nav
#aspect_list
:margin 0
:padding 0
#left_pane
ul
:margin 0
:padding 0
:list
:style none
li a
:display block
:padding 3px
:border
:bottom 1px solid #ccc
&:hover
&:after
:content ""
.empty_message
:margin
:top 12px
:bottom 12px
:text
:align center
:color #777
h3
:color #777
:margin
:left 70px
:padding 2em
:bottom 0.7em
:width 520px
:border 2px dashed #777
:border-radius 5px
.null_arrow
:margin
:top -14px
:font
:size 80px
:display inline-block

View file

@ -6,58 +6,78 @@ require 'spec_helper'
describe User do
let(:inviter) {Factory.create :user}
let(:aspect) {inviter.aspect(:name => "awesome")}
let(:another_user) {Factory.create :user}
let(:wrong_aspect) {another_user.aspect(:name => "super")}
let(:inviter_with_3_invites) {Factory.create :user, :invites => 3}
let!(:invited_user) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter)}
let(:invited_user1) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter_with_3_invites)}
let(:invited_user2) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter_with_3_invites)}
let(:invited_user3) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter_with_3_invites)}
let(:aspect2) {inviter_with_3_invites.aspect(:name => "Jersey Girls")}
let!(:invited_user1) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter)}
before do
deliverable = Object.new
deliverable.stub!(:deliver)
::Devise.mailer.stub!(:invitation).and_return(deliverable)
end
context "creating invites" do
before do
deliverable = Object.new
deliverable.stub!(:deliver)
::Devise.mailer.stub!(:invitation).and_return(deliverable)
it 'requires an apect' do
proc{inviter.invite_user(:email => "maggie@example.com")}.should raise_error /Must invite into aspect/
end
it 'requires your aspect' do
proc{inviter.invite_user(:email => "maggie@example.com", :aspect_id => wrong_aspect.id)}.should raise_error /Must invite to your aspect/
end
it 'creates a user' do
inviter
lambda {
inviter.invite_user(:email => "joe@example.com")
inviter.invite_user(:email => "joe@example.com", :aspect_id => aspect.id )
}.should change(User, :count).by(1)
end
it 'sends email to the invited user' do
::Devise.mailer.should_receive(:invitation).once
inviter.invite_user(:email => "ian@example.com")
inviter.invite_user(:email => "ian@example.com", :aspect_id => aspect.id)
end
it 'adds the inviter to the invited_user' do
invited_user = inviter.invite_user(:email => "marcy@example.com")
invited_user = inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id)
invited_user.reload
invited_user.inviters.include?(inviter).should be_true
end
it 'adds a pending request to the invited user' do
invited_user = inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id)
invited_user.reload
invited_user.pending_requests.find_by_callback_url(inviter.receive_url).nil?.should == false
end
it 'adds a pending request to the inviter' do
inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id)
inviter.reload
inviter.pending_requests.find_by_callback_url(inviter.receive_url).nil?.should == false
end
end
context "limit on invites" do
it 'does not invite users after 3 invites' do
User.stub!(:invite!).and_return(invited_user1,invited_user2,invited_user3)
inviter_with_3_invites.invite_user(:email => "email1@example.com")
inviter_with_3_invites.invite_user(:email => "email2@example.com")
inviter_with_3_invites.invite_user(:email => "email3@example.com")
proc{inviter_with_3_invites.invite_user(:email => "email4@example.com")}.should raise_error /You have no invites/
inviter_with_3_invites.invite_user(:email => "email1@example.com", :aspect_id => aspect2.id)
inviter_with_3_invites.invite_user(:email => "email2@example.com", :aspect_id => aspect2.id)
inviter_with_3_invites.invite_user(:email => "email3@example.com", :aspect_id => aspect2.id)
proc{inviter_with_3_invites.invite_user(:email => "email4@example.com", :aspect_id => aspect2.id)}.should raise_error /You have no invites/
end
it 'does not invite people I already invited' do
pending "this is really weird to test without the actual method working"
User.stub!(:invite!).and_return(invited_user1,invited_user1)
inviter_with_3_invites.invite_user(:email => "email1@example.com")
proc{inviter_with_3_invites.invite_user(:email => "email1@example.com")}.should raise_error /You already invited that person/
inviter_with_3_invites.invite_user(:email => "email1@example.com", :aspect_id => aspect2.id)
proc{inviter_with_3_invites.invite_user(:email => "email1@example.com", :aspect_id => aspect2.id)}.should raise_error /You already invited this person/
end
end
context "the acceptance of an invitation" do
it "should create the person with the passed in params" do
person_count = Person.count
u = invited_user.accept_invitation!(:invitation_token => "abc",
u = invited_user1.accept_invitation!(:invitation_token => "abc",
:username => "user",
:password => "secret",
:password_confirmation => "secret",