From 4660434a2bd202cc58db25d4d6346346ffadb691 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Mon, 1 Oct 2012 17:27:32 -0400 Subject: [PATCH 1/4] user presence development --- lib/jam_ruby.rb | 4 ++++ lib/jam_ruby/message_factory.rb | 2 +- lib/jam_ruby/models/band.rb | 9 +++++++++ lib/jam_ruby/models/connection.rb | 7 +++++++ lib/jam_ruby/models/friendship.rb | 10 ++++++++++ lib/jam_ruby/models/musician.rb | 9 +++++++++ lib/jam_ruby/models/user.rb | 7 +++++++ 7 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 lib/jam_ruby/models/band.rb create mode 100644 lib/jam_ruby/models/connection.rb create mode 100644 lib/jam_ruby/models/friendship.rb create mode 100644 lib/jam_ruby/models/musician.rb diff --git a/lib/jam_ruby.rb b/lib/jam_ruby.rb index 32786f931..cff11c020 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/jam_session_member" 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/jam_session" include Jampb diff --git a/lib/jam_ruby/message_factory.rb b/lib/jam_ruby/message_factory.rb index e8845c892..1fe146526 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 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..229ca1d4a --- /dev/null +++ b/lib/jam_ruby/models/connection.rb @@ -0,0 +1,7 @@ +module JamRuby + class Connection < ActiveRecord::Base + + self.primary_key = 'id' + + 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..1af8ca24c --- /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, :class_name => "JamRuby::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 863658424..a25bfe31d 100644 --- a/lib/jam_ruby/models/user.rb +++ b/lib/jam_ruby/models/user.rb @@ -6,6 +6,13 @@ module JamRuby self.primary_key = 'id' + belongs_to :biz, :polymorphic => true + + 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 :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" From 2c60c3b263c76209e20eb434017dfaa884926bf8 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Tue, 2 Oct 2012 01:02:02 -0400 Subject: [PATCH 2/4] added friend_update message / user presence development --- lib/jam_ruby/message_factory.rb | 6 ++++++ lib/jam_ruby/models/connection.rb | 8 ++++++++ lib/jam_ruby/models/user.rb | 15 +++++++++------ 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/jam_ruby/message_factory.rb b/lib/jam_ruby/message_factory.rb index 1fe146526..e0c565bbe 100644 --- a/lib/jam_ruby/message_factory.rb +++ b/lib/jam_ruby/message_factory.rb @@ -95,6 +95,12 @@ return Jampb::ClientMessage.new(:type => ClientMessage::Type::HEARTBEAT, :target => 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.target == MessageFactory::SERVER_TARGET diff --git a/lib/jam_ruby/models/connection.rb b/lib/jam_ruby/models/connection.rb index 229ca1d4a..49ffaed14 100644 --- a/lib/jam_ruby/models/connection.rb +++ b/lib/jam_ruby/models/connection.rb @@ -1,7 +1,15 @@ module JamRuby class Connection < ActiveRecord::Base + attr_accessor :user_id, :client_id + self.primary_key = 'id' + belongs_to :user, :class_name => "JamRuby::User" + + def initialize(user_id, client_id) + @user_id = user_id + @client_id = client_id + end 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 a25bfe31d..8674ecb95 100644 --- a/lib/jam_ruby/models/user.rb +++ b/lib/jam_ruby/models/user.rb @@ -6,14 +6,17 @@ module JamRuby self.primary_key = 'id' - belongs_to :biz, :polymorphic => true + # re-visit later (used for multiple table inheritance w/ Musician model) + # belongs_to :biz, :polymorphic => true + + 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 :jam_session_members, :class_name => "JamRuby::JamSessionMember" + + 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" @@ -43,8 +46,8 @@ module JamRuby end private - def create_remember_token - self.remember_token = SecureRandom.urlsafe_base64 - end + def create_remember_token + self.remember_token = SecureRandom.urlsafe_base64 + end end end From 4b15f102db42e746e3689e65b12989b6fac95017 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Sun, 7 Oct 2012 00:53:54 -0400 Subject: [PATCH 3/4] added unit test --- spec/jam_ruby/models/connection_spec.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 spec/jam_ruby/models/connection_spec.rb diff --git a/spec/jam_ruby/models/connection_spec.rb b/spec/jam_ruby/models/connection_spec.rb new file mode 100644 index 000000000..6cac8147d --- /dev/null +++ b/spec/jam_ruby/models/connection_spec.rb @@ -0,0 +1,20 @@ +require 'spec_helper' + +describe Connection 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 \ No newline at end of file From 5ba13fa893c5b52abd6ad5d6d5e3d92d71f7ac4d Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Sun, 7 Oct 2012 14:02:26 -0400 Subject: [PATCH 4/4] fixed issues found in unit tests --- lib/jam_ruby/models/connection.rb | 9 +-------- lib/jam_ruby/models/friendship.rb | 6 +++--- lib/jam_ruby/models/user.rb | 4 ++++ spec/jam_ruby/models/connection_spec.rb | 15 --------------- 4 files changed, 8 insertions(+), 26 deletions(-) diff --git a/lib/jam_ruby/models/connection.rb b/lib/jam_ruby/models/connection.rb index 49ffaed14..7d6f4382c 100644 --- a/lib/jam_ruby/models/connection.rb +++ b/lib/jam_ruby/models/connection.rb @@ -1,15 +1,8 @@ module JamRuby class Connection < ActiveRecord::Base - attr_accessor :user_id, :client_id - - self.primary_key = 'id' + self.primary_key = 'id' belongs_to :user, :class_name => "JamRuby::User" - def initialize(user_id, client_id) - @user_id = user_id - @client_id = client_id - end - end end \ No newline at end of file diff --git a/lib/jam_ruby/models/friendship.rb b/lib/jam_ruby/models/friendship.rb index 1af8ca24c..021014ca4 100644 --- a/lib/jam_ruby/models/friendship.rb +++ b/lib/jam_ruby/models/friendship.rb @@ -1,10 +1,10 @@ module JamRuby class Friendship < ActiveRecord::Base - self.primary_key = 'id' + self.primary_key = 'id' - belongs_to :user, :class_name => "JamRuby::User" - belongs_to :friend, :class_name => "JamRuby::User" + 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/user.rb b/lib/jam_ruby/models/user.rb index 5ac99c726..b9eca6713 100644 --- a/lib/jam_ruby/models/user.rb +++ b/lib/jam_ruby/models/user.rb @@ -39,6 +39,10 @@ module JamRuby 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? diff --git a/spec/jam_ruby/models/connection_spec.rb b/spec/jam_ruby/models/connection_spec.rb index 6cac8147d..8b66ffc16 100644 --- a/spec/jam_ruby/models/connection_spec.rb +++ b/spec/jam_ruby/models/connection_spec.rb @@ -2,19 +2,4 @@ require 'spec_helper' describe Connection 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 \ No newline at end of file