2012-11-30 15:23:43 +00:00
module JamRuby
class JoinRequest < ActiveRecord :: Base
2014-08-19 01:41:44 +00:00
include HtmlSanitize
html_sanitize strict : [ :text ]
2012-11-30 15:23:43 +00:00
REQUESTOR_MUST_BE_A_MUSICIAN = " requestor must be a musician "
self . primary_key = 'id'
belongs_to :user , :class_name = > " JamRuby::User "
2014-05-06 13:34:38 +00:00
belongs_to :music_session , :class_name = > " JamRuby::MusicSession " , :foreign_key = > " music_session_id "
2012-11-30 15:23:43 +00:00
has_many :invitations , :inverse_of = > :join_request , :class_name = > " JamRuby::Invitation "
validates :user , :presence = > true
validates :music_session , :presence = > true
2013-10-16 07:23:43 +00:00
validates :text , no_profanity : true , length : { maximum : 140 } # arbitrary decision of 140. the database is at 2000 max on this field
2012-11-30 15:23:43 +00:00
validates_uniqueness_of :user_id , :scope = > :music_session_id
validate :requestor_is_musician
# list all paginations for the current user
def self . index ( current_user )
# TODO pagination
return JoinRequest . where ( " join_requests.user_id = ' #{ current_user . id } ' " ) . order ( 'join_requests.created_at DESC' )
end
def requestor_is_musician
unless user . musician?
errors . add ( :user , REQUESTOR_MUST_BE_A_MUSICIAN )
end
end
def to_s
return " #{ self . user . to_s } : #{ self . music_session . to_s } "
end
# permissions:
# only the creator of the join request can do a get
# or a member of the music_session that the join_request is designated for
def self . show ( id , user )
return JoinRequest . find ( id , :conditions = > [ " user_id = ? OR music_session_id IN (select music_session_id from connections WHERE user_id = ?) " , user . id , user . id ] )
end
end
2013-07-26 08:07:24 +00:00
end