merging latest

This commit is contained in:
Brian Smith 2012-11-16 22:14:25 -05:00
commit e7fec41191
6 changed files with 57 additions and 6 deletions

View File

@ -28,6 +28,7 @@ require "jam_ruby/models/connection"
require "jam_ruby/models/friendship"
require "jam_ruby/models/music_session"
require "jam_ruby/models/invitation"
require "jam_ruby/models/fan_invitation"
require "jam_ruby/models/friend_request"
require "jam_ruby/models/instrument"
require "jam_ruby/models/connection_track"

View File

@ -0,0 +1,32 @@
module JamRuby
class FanInvitation < 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_fan_invitations, :class_name => "JamRuby::User", :foreign_key => "sender_id"
belongs_to :receiver, :inverse_of => :received_fan_invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id"
belongs_to :music_session, :inverse_of => :fan_invitations, :class_name => "JamRuby::MusicSession"
validates :sender, :presence => true
validates :receiver, :presence => true
validates :music_session, :presence => true
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)
end
end
end
end

View File

@ -3,16 +3,26 @@ module JamRuby
self.primary_key = 'id'
attr_accessible :creator, :musician_access, :approval_required, :fan_chat, :fan_access
belongs_to :creator, :inverse_of => :music_sessions, :class_name => "JamRuby::User", :foreign_key => "user_id"
has_many :connections, :class_name => "JamRuby::Connection"
has_many :users, :through => :connections, :class_name => "JamRuby::User"
has_and_belongs_to_many :genres, :class_name => "::JamRuby::Genre", :join_table => "genres_music_sessions"
has_many :invitations, :foreign_key => "music_session_id", :inverse_of => :music_session, :class_name => "JamRuby::Invitation"
has_many :invited_users, :through => :invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id", :source => :receiver
has_many :invited_musicians, :through => :invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id", :source => :receiver
has_many :fan_invitations, :foreign_key => "music_session_id", :inverse_of => :music_session, :class_name => "JamRuby::FanInvitation"
has_many :invited_fans, :through => :fan_invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id", :source => :receiver
after_save :require_at_least_one_genre, :limit_to_three_genres
validates :fan_chat, :inclusion => {:in => [true, false]}
validates :fan_access, :inclusion => {:in => [true, false]}
validates :approval_required, :inclusion => {:in => [true, false]}
validates :musician_access, :inclusion => {:in => [true, false]}
def self.index(current_user)
return MusicSession.includes(:invitations, :connections => [:user => [:friendships]]).order("(invitations.id is NULL) ASC, (friendships.friend_id != '#{current_user.id}' OR friendships.friend_id is NULL) ASC, music_sessions.created_at DESC").where("invitations.receiver_id = '#{current_user.id}' OR (friendships.friend_id = '#{current_user.id}') OR musician_access = true")
end
@ -23,7 +33,7 @@ module JamRuby
return true
else
# the creator can always join, and the invited users can join
return self.creator == user || self.invited_users.exists?(user)
return self.creator == user || self.invited_musicians.exists?(user)
end
end
@ -33,7 +43,7 @@ module JamRuby
return true
else
# the creator can always see, and the invited users can see it too
return self.creator == user || self.invited_users.exists?(user)
return self.creator == user || self.invited_musicians.exists?(user)
end
end

View File

@ -60,6 +60,10 @@ module JamRuby
has_many :received_invitations, :foreign_key => "receiver_id", :inverse_of => :receiver, :class_name => "JamRuby::Invitation"
has_many :sent_invitations, :foreign_key => "sender_id", :inverse_of => :sender, :class_name => "JamRuby::Invitation"
# fan_invitations
has_many :received_fan_invitations, :foreign_key => "receiver_id", :inverse_of => :receiver, :class_name => "JamRuby::FanInvitation"
has_many :sent_fan_invitations, :foreign_key => "sender_id", :inverse_of => :sender, :class_name => "JamRuby::FanInvitation"
# This causes the authenticate method to be generated (among other stuff)
has_secure_password

View File

@ -5,14 +5,18 @@ FactoryGirl.define do
password_confirmation "foobar"
email_confirmed true
factory :admin do
admin true
end
end
factory :music_session, :class => JamRuby::MusicSession do
factory :music_session, :class => "JamRuby::MusicSession" do
sequence(:description) { |n| "Music Session #{n}" }
musician_access true
fan_chat true
fan_access true
approval_required false
musician_access true
end
factory :connection, :class => JamRuby::Connection do

View File

@ -18,7 +18,7 @@ describe ConnectionManager do
def create_music_session(user_id)
description = "some session"
@conn.exec("INSERT INTO music_sessions (user_id, description, musician_access) VALUES ($1, $2, $3) RETURNING id", [user_id, description, true]) do |result|
@conn.exec("INSERT INTO music_sessions (user_id, description, musician_access, approval_required, fan_chat, fan_access) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id", [user_id, description, true, false, true, true]) do |result|
return result.getvalue(0, 0)
end
end