diff --git a/lib/jam_ruby.rb b/lib/jam_ruby.rb index 044c639ea..94d641d67 100644 --- a/lib/jam_ruby.rb +++ b/lib/jam_ruby.rb @@ -6,6 +6,10 @@ require "jam_ruby/version" require "jam_ruby/message_factory" require "jam_ruby/models/music_session_client" require "jam_ruby/models/user" +require "jam_ruby/models/musician" +require "jam_ruby/models/band" +require "jam_ruby/models/connection" +require "jam_ruby/models/friendship" require "jam_ruby/models/music_session" include Jampb diff --git a/lib/jam_ruby/message_factory.rb b/lib/jam_ruby/message_factory.rb index a6e1d8468..11ac5ff0b 100644 --- a/lib/jam_ruby/message_factory.rb +++ b/lib/jam_ruby/message_factory.rb @@ -1,4 +1,4 @@ -module JamRuby + module JamRuby # creates messages (implementation: protocol buffer) objects cleanly class MessageFactory @@ -115,6 +115,12 @@ module JamRuby return Jampb::ClientMessage.new(:type => ClientMessage::Type::HEARTBEAT, :route_to => SERVER_TARGET, :heartbeat => heartbeat) end + # create a friend update message + def friend_update(user_id, online) + friend = Jampb::FriendUpdate.new(:user_id => user_id, :online => online) + return Jampb::ClientMessage.new(:type => ClientMessage::Type::FRIEND_UPDATE, :target => CLIENT_TARGET, :friend_update => friend) + end + # is this message directed to the server? def server_directed? msg return msg.route_to == MessageFactory::SERVER_TARGET diff --git a/lib/jam_ruby/models/band.rb b/lib/jam_ruby/models/band.rb new file mode 100644 index 000000000..4a26f47b2 --- /dev/null +++ b/lib/jam_ruby/models/band.rb @@ -0,0 +1,9 @@ +module JamRuby + class Band < ActiveRecord::Base + + self.primary_key = 'id' + + has_and_belongs_to_many :musicians + + end +end \ No newline at end of file diff --git a/lib/jam_ruby/models/connection.rb b/lib/jam_ruby/models/connection.rb new file mode 100644 index 000000000..7d6f4382c --- /dev/null +++ b/lib/jam_ruby/models/connection.rb @@ -0,0 +1,8 @@ +module JamRuby + class Connection < ActiveRecord::Base + + self.primary_key = 'id' + belongs_to :user, :class_name => "JamRuby::User" + + end +end \ No newline at end of file diff --git a/lib/jam_ruby/models/friendship.rb b/lib/jam_ruby/models/friendship.rb new file mode 100644 index 000000000..021014ca4 --- /dev/null +++ b/lib/jam_ruby/models/friendship.rb @@ -0,0 +1,10 @@ +module JamRuby + class Friendship < ActiveRecord::Base + + self.primary_key = 'id' + + belongs_to :user + belongs_to :friend, :class_name => "JamRuby::User" + + end +end \ No newline at end of file diff --git a/lib/jam_ruby/models/musician.rb b/lib/jam_ruby/models/musician.rb new file mode 100644 index 000000000..1cc55a29d --- /dev/null +++ b/lib/jam_ruby/models/musician.rb @@ -0,0 +1,9 @@ +module JamRuby + class Musician < JamRuby::User + + self.primary_key = 'id' + + has_and_belongs_to_many :bands + + end +end \ No newline at end of file diff --git a/lib/jam_ruby/models/user.rb b/lib/jam_ruby/models/user.rb index f9a0bf67c..b9eca6713 100644 --- a/lib/jam_ruby/models/user.rb +++ b/lib/jam_ruby/models/user.rb @@ -2,11 +2,21 @@ module JamRuby class User < ActiveRecord::Base attr_accessible :name, :email, :password, :password_confirmation - attr_accessor :updating_password + attr_accessor :updating_password - self.primary_key = 'id' + self.primary_key = 'id' + + # re-visit later (used for multiple table inheritance w/ Musician model) + # belongs_to :biz, :polymorphic => true - has_many :music_session_clients, :class_name => "JamRuby::MusicSessionClient" + has_many :connections, :class_name => "JamRuby::Connection" + + has_many :friendships + has_many :friends, :through => :friendships + has_many :inverse_friendships, :class_name => "JamRuby::Friendship", :foreign_key => "friend_id" + has_many :inverse_friends, :through => :inverse_friendships, :source => :user + + 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" @@ -21,23 +31,27 @@ module JamRuby uniqueness: {case_sensitive: false} validates_length_of :password, minimum: 6, maximum: 100, :if => :should_validate_password? - validates_presence_of :password_confirmation, :if => :should_validate_password? + validates_presence_of :password_confirmation, :if => :should_validate_password? #validates :password_confirmation, presence: true - validates_confirmation_of :password, :if => :should_validate_password? + validates_confirmation_of :password, :if => :should_validate_password? - def should_validate_password? - updating_password || new_record? - end - - def to_s - return email unless email.nil? - return name unless name.nil? - return id - end - - private - def create_remember_token - self.remember_token = SecureRandom.urlsafe_base64 + def should_validate_password? + updating_password || new_record? end + + def friends?(user) + return self.friends.exists?(user) + end + + def to_s + return email unless email.nil? + return name unless name.nil? + return id + end + + private + def create_remember_token + self.remember_token = SecureRandom.urlsafe_base64 + end end end diff --git a/spec/jam_ruby/models/connection_spec.rb b/spec/jam_ruby/models/connection_spec.rb new file mode 100644 index 000000000..8b66ffc16 --- /dev/null +++ b/spec/jam_ruby/models/connection_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Connection do + +end \ No newline at end of file