diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb index ac17fc56b..a6e44934e 100644 --- a/app/controllers/invitations_controller.rb +++ b/app/controllers/invitations_controller.rb @@ -13,14 +13,13 @@ class InvitationsController < Devise::InvitationsController redirect_to :back return end - params[:user][:aspect_id] = params[:user].delete(:aspects) + aspect = params[:user].delete(:aspects) message = params[:user].delete(:invite_messages) - params[:user][:invite_message] = message unless message == "" emails = params[:user][:email].split(/, */) good_emails, bad_emails = emails.partition{|e| e.try(:match, Devise.email_regexp)} - good_emails.each{|e| Resque.enqueue(Jobs::InviteUser, current_user.id, params[:user].merge({:email => e}))} + good_emails.each{|e| Resque.enqueue(Jobs::InviteUser, current_user.id, e, aspect, message)} if bad_emails.any? flash[:error] = I18n.t('invitations.create.sent') + good_emails.join(', ') + " "+ I18n.t('invitations.create.rejected') + bad_emails.join(', ') diff --git a/app/models/invitation.rb b/app/models/invitation.rb index 88174d081..bfdcb0dcb 100644 --- a/app/models/invitation.rb +++ b/app/models/invitation.rb @@ -13,6 +13,7 @@ class Invitation validates_presence_of :from, :to, :into def self.invite(opts = {}) + return false if opts[:email] == opts[:from].email existing_user = User.find_by_email(opts[:email]) if existing_user if opts[:from].contact_for(opts[:from].person) diff --git a/app/models/jobs/invite_user.rb b/app/models/jobs/invite_user.rb index f302e5e1c..8111d9d4d 100644 --- a/app/models/jobs/invite_user.rb +++ b/app/models/jobs/invite_user.rb @@ -1,9 +1,9 @@ module Jobs class InviteUser @queue = :email - def self.perform(sender_id, params) + def self.perform(sender_id, email, aspect_id, invite_message) user = User.find(sender_id) - user.invite_user(params) + user.invite_user(email, aspect_id, invite_message) end end end diff --git a/app/models/user.rb b/app/models/user.rb index 792a3c903..d9d1af8ef 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -362,14 +362,13 @@ class User end ###Invitations############ - def invite_user(opts = {}) - aspect_id = opts.delete(:aspect_id) - aspect_object = self.aspects.find_by_id(aspect_id) + def invite_user(email, aspect_id, invite_message = "") + aspect_object = Aspect.first(:user_id => self.id, :id => aspect_id) if aspect_object - Invitation.invite(:email => opts[:email], + Invitation.invite(:email => email, :from => self, :into => aspect_object, - :message => opts[:invite_message]) + :message => invite_message) else false end diff --git a/spec/controllers/invitations_controller_spec.rb b/spec/controllers/invitations_controller_spec.rb index 2efaf3f90..181e01bd9 100644 --- a/spec/controllers/invitations_controller_spec.rb +++ b/spec/controllers/invitations_controller_spec.rb @@ -75,7 +75,7 @@ describe InvitationsController do describe "#update" do before do user.invites = 5 - @invited_user = user.invite_user(:email => "a@a.com", :aspect_id => user.aspects.first.id) + @invited_user = user.invite_user("a@a.com", user.aspects.first.id) @accept_params = {:user=> {:password_confirmation =>"password", :username=>"josh", diff --git a/spec/models/user/invite_spec.rb b/spec/models/user/invite_spec.rb index 3cae2580b..79706e618 100644 --- a/spec/models/user/invite_spec.rb +++ b/spec/models/user/invite_spec.rb @@ -13,32 +13,28 @@ describe User do let(:aspect2) {inviter_with_3_invites.aspects.create(:name => "Jersey Girls")} context "creating invites" do - it 'requires an apect' do - inviter.invite_user(:email => "maggie@example.com").should == false - end - it 'requires your aspect' do - inviter.invite_user(:email => "maggie@example.com", :aspect_id => wrong_aspect.id).should == false + inviter.invite_user("maggie@example.com", wrong_aspect.id).should == false end it 'calls Invitation.invite' do Invitation.should_receive(:invite) - inviter.invite_user(:email => @email, :aspect_id => aspect.id) + inviter.invite_user(@email, aspect.id) end it 'has an invitation' do - inviter.invite_user(:email => "joe@example.com", :aspect_id => aspect.id).invitations_to_me.count.should == 1 + inviter.invite_user("joe@example.com", aspect.id).invitations_to_me.count.should == 1 end it 'creates it with an email' do - inviter.invite_user(:email => "joe@example.com", :aspect_id => aspect.id).email.should == "joe@example.com" + inviter.invite_user("joe@example.com", aspect.id).email.should == "joe@example.com" end it 'throws if you try to add someone you"re connected to' do connect_users(inviter, aspect, another_user, wrong_aspect) inviter.reload - proc{inviter.invite_user(:email => another_user.email, :aspect_id => aspect.id)}.should raise_error /already connected/ + proc{inviter.invite_user(another_user.email, aspect.id)}.should raise_error /already connected/ end end @@ -46,8 +42,8 @@ describe User do context "limit on invites" do it 'does not invite people I already invited' do - 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/ + inviter_with_3_invites.invite_user("email1@example.com", aspect2.id) + proc{inviter_with_3_invites.invite_user("email1@example.com", aspect2.id)}.should raise_error /You already invited this person/ end end