saucy 0.2.39 → 0.2.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/invitations_controller.rb +1 -0
- data/app/mailers/invitation_mailer.rb +10 -3
- data/app/models/invitation.rb +9 -0
- data/lib/generators/saucy/features/templates/factories.rb +1 -0
- data/lib/generators/saucy/install/templates/create_saucy_tables.rb +1 -0
- data/spec/controllers/invitations_controller_spec.rb +2 -0
- data/spec/mailers/invitiation_mailer_spec.rb +19 -0
- data/spec/models/invitation_spec.rb +9 -0
- metadata +4 -3
|
@@ -12,6 +12,7 @@ class InvitationsController < ApplicationController
|
|
|
12
12
|
def create
|
|
13
13
|
@invitation = Invitation.new(params[:invitation])
|
|
14
14
|
@invitation.account = current_account
|
|
15
|
+
@invitation.sender = current_user
|
|
15
16
|
if @invitation.save
|
|
16
17
|
flash[:success] = "User invited."
|
|
17
18
|
redirect_to account_memberships_url(current_account)
|
|
@@ -4,8 +4,15 @@ class InvitationMailer < ActionMailer::Base
|
|
|
4
4
|
subject = I18n.t(:subject,
|
|
5
5
|
:scope => [:saucy, :mailers, :invitation_mailer, :invititation],
|
|
6
6
|
:default => "Invitation")
|
|
7
|
-
mail :to
|
|
8
|
-
:subject
|
|
9
|
-
:
|
|
7
|
+
mail :to => invitation.email,
|
|
8
|
+
:subject => subject,
|
|
9
|
+
:reply_to => invitation.sender_email,
|
|
10
|
+
:from => sender_name_and_support_address
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def sender_name_and_support_address
|
|
16
|
+
%{"#{@invitation.sender_name}" <#{Saucy::Configuration.mailer_sender}>}
|
|
10
17
|
end
|
|
11
18
|
end
|
data/app/models/invitation.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
class Invitation < ActiveRecord::Base
|
|
2
2
|
belongs_to :account
|
|
3
|
+
belongs_to :sender, :class_name => 'User'
|
|
3
4
|
validates_presence_of :account_id
|
|
4
5
|
validates_presence_of :email
|
|
5
6
|
has_and_belongs_to_many :projects
|
|
@@ -46,6 +47,14 @@ class Invitation < ActiveRecord::Base
|
|
|
46
47
|
code
|
|
47
48
|
end
|
|
48
49
|
|
|
50
|
+
def sender_name
|
|
51
|
+
sender.name
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def sender_email
|
|
55
|
+
sender.email
|
|
56
|
+
end
|
|
57
|
+
|
|
49
58
|
private
|
|
50
59
|
|
|
51
60
|
def deliver_invitation
|
|
@@ -34,6 +34,7 @@ class CreateSaucyTables < ActiveRecord::Migration
|
|
|
34
34
|
create_table :invitations do |table|
|
|
35
35
|
table.string :email
|
|
36
36
|
table.integer :account_id
|
|
37
|
+
table.integer :sender_id
|
|
37
38
|
table.boolean :admin, :null => false, :default => false
|
|
38
39
|
table.string :code
|
|
39
40
|
table.boolean :used, :default => false, :null => false
|
|
@@ -55,6 +55,7 @@ describe InvitationsController, "valid create", :as => :account_admin do
|
|
|
55
55
|
before do
|
|
56
56
|
Invitation.stubs(:new => invitation)
|
|
57
57
|
invitation.stubs(:account=)
|
|
58
|
+
invitation.stubs(:sender=)
|
|
58
59
|
invitation.stubs(:save => true)
|
|
59
60
|
post :create, :account_id => account.to_param, :invitation => attributes
|
|
60
61
|
end
|
|
@@ -66,6 +67,7 @@ describe InvitationsController, "valid create", :as => :account_admin do
|
|
|
66
67
|
it "saves an invitation" do
|
|
67
68
|
Invitation.should have_received(:new).with(attributes)
|
|
68
69
|
invitation.should have_received(:account=).with(account)
|
|
70
|
+
invitation.should have_received(:sender=).with(current_user)
|
|
69
71
|
invitation.should have_received(:save)
|
|
70
72
|
end
|
|
71
73
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe InvitationMailer, "invitation" do
|
|
4
|
+
let(:invitation) { Factory(:invitation) }
|
|
5
|
+
subject { InvitationMailer.invitation(invitation) }
|
|
6
|
+
|
|
7
|
+
it "sets reply-to to the user that sent the invitation" do
|
|
8
|
+
subject.reply_to.should == [invitation.sender_email]
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "sets from to the user's name" do
|
|
12
|
+
from = subject.header_fields.detect { |field| field.name == "From"}
|
|
13
|
+
from.value.should =~ %r{^"#{invitation.sender_name}" <.*>$}
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it "sends from the support address" do
|
|
17
|
+
subject.from.should == [Saucy::Configuration.mailer_sender]
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -4,6 +4,7 @@ describe Invitation do
|
|
|
4
4
|
it { should validate_presence_of(:account_id) }
|
|
5
5
|
it { should validate_presence_of(:email) }
|
|
6
6
|
it { should belong_to(:account) }
|
|
7
|
+
it { should belong_to(:sender) }
|
|
7
8
|
it { should have_and_belong_to_many(:projects) }
|
|
8
9
|
|
|
9
10
|
it { should_not allow_mass_assignment_of(:account_id) }
|
|
@@ -55,6 +56,14 @@ describe Invitation, "saved" do
|
|
|
55
56
|
it "uses the code in the url" do
|
|
56
57
|
subject.to_param.should == code
|
|
57
58
|
end
|
|
59
|
+
|
|
60
|
+
it "delegates sender email" do
|
|
61
|
+
subject.sender_email.should == subject.sender.email
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "delegates sender name" do
|
|
65
|
+
subject.sender_name.should == subject.sender.name
|
|
66
|
+
end
|
|
58
67
|
end
|
|
59
68
|
|
|
60
69
|
describe Invitation, "valid accept for a new user" do
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: saucy
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 71
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
8
|
- 2
|
|
9
|
-
-
|
|
10
|
-
version: 0.2.
|
|
9
|
+
- 40
|
|
10
|
+
version: 0.2.40
|
|
11
11
|
platform: ruby
|
|
12
12
|
authors:
|
|
13
13
|
- thoughtbot, inc.
|
|
@@ -241,6 +241,7 @@ files:
|
|
|
241
241
|
- spec/controllers/projects_controller_spec.rb
|
|
242
242
|
- spec/environment.rb
|
|
243
243
|
- spec/layouts_spec.rb
|
|
244
|
+
- spec/mailers/invitiation_mailer_spec.rb
|
|
244
245
|
- spec/models/account_spec.rb
|
|
245
246
|
- spec/models/invitation_spec.rb
|
|
246
247
|
- spec/models/limit_spec.rb
|