diff --git a/lib/jam_ruby/message_factory.rb b/lib/jam_ruby/message_factory.rb index 7f5cd30fe..85838c19e 100644 --- a/lib/jam_ruby/message_factory.rb +++ b/lib/jam_ruby/message_factory.rb @@ -96,6 +96,10 @@ return Jampb::ClientMessage.new(:type => ClientMessage::Type::TEST_SESSION_MESSAGE, :route_to => SESSION_TARGET_PREFIX + session_id, :test_session_message => test) end + def session_invitation(receiver_id, invitation_id) + session_invitation = Jampb::SessionInvitation.new(:invitation => invitation_id) + return Jampb::ClientMessage.new(:type => ClientMessage::Type::SESSION_INVITATION, :route_to => USER_TARGET_PREFIX + receiver_id, :session_invitation => session_invitation) + end ############## P2P CLIENT MESSAGES ################# # send a request to do a ping diff --git a/lib/jam_ruby/models/invitation.rb b/lib/jam_ruby/models/invitation.rb index e636fd418..239a9b2a2 100644 --- a/lib/jam_ruby/models/invitation.rb +++ b/lib/jam_ruby/models/invitation.rb @@ -2,6 +2,7 @@ module JamRuby class Invitation < ActiveRecord::Base FRIENDSHIP_REQUIRED_VALIDATION_ERROR = "You can only invite friends" + MEMBERSHIP_REQUIRED_OF_MUSIC_SESSION = "You must be a member of the music session to send invitations on behalf of it" self.primary_key = 'id' belongs_to :sender, :inverse_of => :sent_invitations, :class_name => "JamRuby::User", :foreign_key => "sender_id" @@ -12,10 +13,16 @@ module JamRuby validates :receiver, :presence => true validates :music_session, :presence => true - validate :require_are_friends + validate :require_sender_in_music_session, :require_are_friends private + def require_sender_in_music_session + unless music_session.users.exists? sender + errors.add(:music_session, MEMBERSHIP_REQUIRED_OF_MUSIC_SESSION) + end + end + def require_are_friends unless receiver.friends.exists? sender errors.add(:receiver, FRIENDSHIP_REQUIRED_VALIDATION_ERROR)