vrfs152: created one FB invite constraint

This commit is contained in:
Jonathan Kolyer 2014-01-29 21:22:37 -06:00
parent 7c39c3cd4c
commit a73d4d758d
6 changed files with 44 additions and 3 deletions

View File

@ -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

View File

@ -1 +0,0 @@
ALTER TABLE invited_users ALTER COLUMN email DROP NOT NULL;

View File

@ -0,0 +1,3 @@
ALTER TABLE invited_users ALTER COLUMN email DROP NOT NULL;
ALTER TABLE invited_users ADD COLUMN invite_medium VARCHAR(64);

View File

@ -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
@ -69,5 +76,11 @@ module JamRuby
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

View File

@ -997,6 +997,17 @@ module JamRuby
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
#def encrypted_password

View File

@ -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