From 1a99565ea42049eae06bdb4898ad9981660dfe20 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Thu, 15 Nov 2012 20:50:03 -0600 Subject: [PATCH] * VRFS-92 stub out music session params --- lib/jam_ruby.rb | 1 + lib/jam_ruby/models/fan_invitation.rb | 32 ++++++++++++++++++++++++ lib/jam_ruby/models/music_session.rb | 16 +++++++++--- lib/jam_ruby/models/user.rb | 4 +++ spec/factories.rb | 8 ++++-- spec/jam_ruby/connection_manager_spec.rb | 2 +- 6 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 lib/jam_ruby/models/fan_invitation.rb diff --git a/lib/jam_ruby.rb b/lib/jam_ruby.rb index 63c5d0c7c..71211ff5e 100644 --- a/lib/jam_ruby.rb +++ b/lib/jam_ruby.rb @@ -27,6 +27,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" diff --git a/lib/jam_ruby/models/fan_invitation.rb b/lib/jam_ruby/models/fan_invitation.rb new file mode 100644 index 000000000..026b16599 --- /dev/null +++ b/lib/jam_ruby/models/fan_invitation.rb @@ -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 diff --git a/lib/jam_ruby/models/music_session.rb b/lib/jam_ruby/models/music_session.rb index e5f2ba72d..1fa5652f0 100644 --- a/lib/jam_ruby/models/music_session.rb +++ b/lib/jam_ruby/models/music_session.rb @@ -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 diff --git a/lib/jam_ruby/models/user.rb b/lib/jam_ruby/models/user.rb index b4cecfe78..ab9e7454b 100644 --- a/lib/jam_ruby/models/user.rb +++ b/lib/jam_ruby/models/user.rb @@ -52,6 +52,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 diff --git a/spec/factories.rb b/spec/factories.rb index bc82f9e43..7f57ac65b 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -6,14 +6,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 diff --git a/spec/jam_ruby/connection_manager_spec.rb b/spec/jam_ruby/connection_manager_spec.rb index fd660fa3f..0c26c56e2 100644 --- a/spec/jam_ruby/connection_manager_spec.rb +++ b/spec/jam_ruby/connection_manager_spec.rb @@ -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