vrfs152: created one FB invite constraint
This commit is contained in:
parent
7c39c3cd4c
commit
a73d4d758d
|
|
@ -91,4 +91,4 @@ music_session_constraints.sql
|
|||
mixes_drop_manifest_add_retry.sql
|
||||
music_sessions_unlogged.sql
|
||||
integrate_icecast_into_sessions.sql
|
||||
invited_users_allow_email_null.sql
|
||||
invited_users_facebook_support.sql
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
ALTER TABLE invited_users ALTER COLUMN email DROP NOT NULL;
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
ALTER TABLE invited_users ALTER COLUMN email DROP NOT NULL;
|
||||
ALTER TABLE invited_users ADD COLUMN invite_medium VARCHAR(64);
|
||||
|
||||
|
|
@ -19,6 +19,7 @@ module JamRuby
|
|||
validates :invitation_code, :presence => true
|
||||
validates :note, length: {maximum: 400}, no_profanity: true # 400 == arbitrary.
|
||||
|
||||
validate :one_facebook_invite_per_user, :if => lambda { |iu| iu.invite_medium == FB_MEDIUM }
|
||||
validate :valid_personalized_invitation
|
||||
# validate :not_accepted_twice
|
||||
validate :not_accepted_twice, :if => lambda { |iu| iu.email }
|
||||
|
|
@ -32,6 +33,12 @@ module JamRuby
|
|||
self.sender_id = nil if self.sender_id.blank? # this coercion was done just to make activeadmin work
|
||||
end
|
||||
|
||||
FB_MEDIUM = 'facebook'
|
||||
|
||||
def self.facebook_invite(user)
|
||||
where(:sender_id => user.id, :invite_medium => FB_MEDIUM).limit(1).first
|
||||
end
|
||||
|
||||
def track_user_progression
|
||||
self.sender.update_progression_field(:first_invited_at) unless self.sender.nil?
|
||||
end
|
||||
|
|
@ -68,6 +75,12 @@ module JamRuby
|
|||
def not_accepted_twice
|
||||
errors.add(:accepted, "you can only accept an invitation once") if accepted_twice
|
||||
end
|
||||
|
||||
def one_facebook_invite_per_user
|
||||
rel = InvitedUser.where(:invite_medium => FB_MEDIUM, :sender_id => self.sender_id)
|
||||
rel = rel.where(['id != ?',self.id]) if self.id
|
||||
errors.add(:invite_medium, "one facebook invite allowed per user") if 0 < rel.count
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -996,6 +996,17 @@ module JamRuby
|
|||
def first_recording_at
|
||||
Recording.where(:owner_id => self.id).order('created_at ASC').first.try(:created_at)
|
||||
end
|
||||
|
||||
def facebook_invite
|
||||
unless iu = InvitedUser.facebook_invite(self)
|
||||
iu = InvitedUser.new
|
||||
iu.sender = self
|
||||
iu.autofriend = true
|
||||
iu.invite_medium = InvitedUser::FB_MEDIUM
|
||||
iu.save
|
||||
end
|
||||
iu
|
||||
end
|
||||
|
||||
# devise compatibility
|
||||
|
||||
|
|
|
|||
|
|
@ -106,8 +106,23 @@ describe InvitedUser do
|
|||
|
||||
it 'accepts empty emails' do
|
||||
user1 = FactoryGirl.create(:user)
|
||||
invited_user = FactoryGirl.create(:invited_user, :sender => user1, :email => '')
|
||||
invited_user = FactoryGirl.create(:invited_user, :sender_id => user1.id, :email => '')
|
||||
expect(invited_user.valid?).to eq(true)
|
||||
end
|
||||
|
||||
it 'accepts one facebook invite per user' do
|
||||
user1 = FactoryGirl.create(:user)
|
||||
invited_user = FactoryGirl.create(:invited_user, :sender_id => user1.id, :invite_medium => InvitedUser::FB_MEDIUM)
|
||||
expect(invited_user.valid?).to eq(true)
|
||||
invited_user.autofriend = !invited_user.autofriend
|
||||
invited_user.save
|
||||
expect(invited_user.valid?).to eq(true)
|
||||
invited_user1 = InvitedUser.new(:email => 'foobar@example.com', :sender_id => user1.id)
|
||||
invited_user1.autofriend = true
|
||||
invited_user1.invite_medium = InvitedUser::FB_MEDIUM
|
||||
invited_user1.save
|
||||
expect(invited_user1.valid?).to eq(false)
|
||||
expect(InvitedUser.facebook_invite(user1).id).to eq(invited_user.id)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue