* VRFS-15: new models for sessions REST API

This commit is contained in:
Seth Call 2012-10-02 22:50:23 -05:00
parent 12fb985883
commit 0f37d1523c
10 changed files with 78 additions and 78 deletions

View File

@ -4,9 +4,9 @@ require "jampb"
require 'uuidtools'
require "jam_ruby/version"
require "jam_ruby/message_factory"
require "jam_ruby/models/jam_session_member"
require "jam_ruby/models/music_session_client"
require "jam_ruby/models/user"
require "jam_ruby/models/jam_session"
require "jam_ruby/models/music_session"
include Jampb

View File

@ -42,27 +42,27 @@ module JamRuby
end
# create a jam session login message
def login_jam_session(jam_session)
login_jam_session = Jampb::LoginJamSession.new(:jam_session => jam_session)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_JAM_SESSION, :target => SERVER_TARGET, :login_jam_session => login_jam_session)
def login_music_session(music_session)
login_music_session = Jampb::LoginMusicSession.new(:music_session => music_session)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_MUSIC_SESSION, :target => SERVER_TARGET, :login_music_session => login_music_session)
end
# create a jam session login message ack (success or on failure)
def login_jam_session_ack(error, error_reason)
login_jam_session_ack = Jampb::LoginJamSessionAck.new(:error => error, :error_reason => error_reason)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_JAM_SESSION_ACK, :target => CLIENT_TARGET, :login_jam_session_ack => login_jam_session_ack)
def login_music_session_ack(error, error_reason)
login_music_session_ack = Jampb::LoginMusicSessionAck.new(:error => error, :error_reason => error_reason)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_JAM_SESSION_ACK, :target => CLIENT_TARGET, :login_music_session_ack => login_music_session_ack)
end
# create a jam session 'leave session' message
def leave_jam_session(jam_session)
leave_jam_session = Jampb::LeaveJamSession.new(:jam_session => jam_session)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LEAVE_JAM_SESSION, :target => SERVER_TARGET, :leave_jam_session => leave_jam_session)
def leave_music_session(music_session)
leave_music_session = Jampb::LeaveMusicSession.new(:music_session => music_session)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LEAVE_JAM_SESSION, :target => SERVER_TARGET, :leave_music_session => leave_music_session)
end
# create a jam session leave message ack (success or on failure)
def leave_jam_session_ack(error, error_reason)
leave_jam_session_ack = Jampb::LeaveJamSessionAck.new(:error => error, :error_reason => error_reason)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LEAVE_JAM_SESSION_ACK, :target => CLIENT_TARGET, :leave_jam_session_ack => leave_jam_session_ack)
def leave_music_session_ack(error, error_reason)
leave_music_session_ack = Jampb::LeaveMusicSessionAck.new(:error => error, :error_reason => error_reason)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LEAVE_JAM_SESSION_ACK, :target => CLIENT_TARGET, :leave_music_session_ack => leave_music_session_ack)
end
# create a server error
@ -78,9 +78,9 @@ module JamRuby
end
# create a user-joined session messag
def user_joined_jam_session(user_id, username)
joined = Jampb::UserJoinedJamSession.new(:user_id => user_id, :username => username)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::USER_JOINED_JAM_SESSION, :target => CLIENT_TARGET, :user_joined_jam_session => joined)
def user_joined_music_session(user_id, username)
joined = Jampb::UserJoinedMusicSession.new(:user_id => user_id, :username => username)
return Jampb::ClientMessage.new(:type => ClientMessage::Type::USER_JOINED_JAM_SESSION, :target => CLIENT_TARGET, :user_joined_music_session => joined)
end
# create a test message to send in session

View File

@ -1,20 +0,0 @@
module JamRuby
class JamSession < ActiveRecord::Base
self.primary_key = 'id'
belongs_to :creator, :inverse_of => :jam_sessions, :class_name => "JamRuby::User", :foreign_key => "user_id"
has_many :jam_session_members, :class_name => "JamRuby::JamSessionMember"
has_many :users, :through => :jam_session_members, :class_name => "JamRuby::User"
# Verifies that the specified user can join this jam session
def access?(user)
return self.public || self.users.exists?(user)
end
def to_s
return name
end
end
end

View File

@ -1,14 +0,0 @@
module JamRuby
class JamSessionMember < ActiveRecord::Base
self.primary_key = 'id'
belongs_to :user, :class_name => "JamRuby::User"
belongs_to :jam_session, :class_name => "JamRuby::JamSession"
def to_s
return self.user.to_s
end
end
end

View File

@ -0,0 +1,21 @@
module JamRuby
class MusicSession < ActiveRecord::Base
self.primary_key = 'id'
belongs_to :creator, :inverse_of => :music_sessions, :class_name => "JamRuby::User", :foreign_key => "user_id"
has_many :music_session_clients, :class_name => "JamRuby::MusicSessionClient"
has_many :users, :through => :music_session_clients, :class_name => "JamRuby::User"
# Verifies that the specified user can join this jam session
def access?(user)
#return self.public || self.users.exists?(user)
return true
end
def to_s
return description
end
end
end

View File

@ -0,0 +1,14 @@
module JamRuby
class MusicSessionClient < ActiveRecord::Base
self.primary_key = 'id'
belongs_to :user, :class_name => "JamRuby::User"
belongs_to :music_session, :class_name => "JamRuby::MusicSession"
def to_s
return "#{self.user.to_s}:#{self.ip_address}"
end
end
end

View File

@ -6,9 +6,9 @@ module JamRuby
self.primary_key = 'id'
has_many :jam_session_members, :class_name => "JamRuby::JamSessionMember"
has_many :created_jam_sessions, :foreign_key => "user_id", :inverse_of => :user, :class_name => "JamRuby::JamSession" # sessions *created* by the user
has_many :jam_sessions, :through => :jam_session_members, :class_name => "JamRuby::JamSession"
has_many :music_session_clients, :class_name => "JamRuby::MusicSessionClient"
has_many :created_music_sessions, :foreign_key => "user_id", :inverse_of => :user, :class_name => "JamRuby::MusicSession" # sessions *created* by the user
has_many :music_sessions, :through => :music_session_clients, :class_name => "JamRuby::MusicSession"
has_secure_password

View File

@ -10,12 +10,11 @@ FactoryGirl.define do
end
end
factory :jam_session, :class => JamRuby::JamSession do
sequence(:name) { |n| "Jam Session #{n}" }
public false
factory :music_session, :class => JamRuby::MusicSession do
sequence(:description) { |n| "Music Session #{n}" }
end
factory :jam_session_member, :class => JamRuby::JamSessionMember do
factory :music_session_client, :class => JamRuby::MusicSessionClient do
end
end

View File

@ -1,20 +0,0 @@
require 'spec_helper'
describe JamSession do
it 'can grant access to valid user' do
user1 = FactoryGirl.create(:user) # in the jam session
user2 = FactoryGirl.create(:user) # in the jam session
user3 = FactoryGirl.create(:user) # not in the jam session
jam_session = FactoryGirl.create(:jam_session, :creator => user1)
jam_session_member1 = FactoryGirl.create(:jam_session_member, :user => user1, :jam_session => jam_session)
jam_session_member2 = FactoryGirl.create(:jam_session_member, :user => user2, :jam_session => jam_session)
jam_session.access?(user1).should == true
jam_session.access?(user2).should == true
jam_session.access?(user3).should == false
end
end

View File

@ -0,0 +1,20 @@
require 'spec_helper'
describe MusicSession do
it 'can grant access to valid user' do
user1 = FactoryGirl.create(:user) # in the jam session
user2 = FactoryGirl.create(:user) # in the jam session
user3 = FactoryGirl.create(:user) # not in the jam session
music_session = FactoryGirl.create(:music_session, :creator => user1)
music_session_member1 = FactoryGirl.create(:music_session_client, :user => user1, :music_session => music_session, :ip_address => "1.1.1.1")
music_session_member2 = FactoryGirl.create(:music_session_client, :user => user2, :music_session => music_session, :ip_address => "2.2.2.2")
music_session.access?(user1).should == true
music_session.access?(user2).should == true
#music_session.access?(user3).should == false -- wait until we have finalized access models in place
end
end