* jam-ruby updated to include jam_session model and tests
This commit is contained in:
parent
e8ec5f3eaf
commit
0f847580e6
|
|
@ -0,0 +1 @@
|
||||||
|
up.connopts=dbname:jam_ruby
|
||||||
2
Gemfile
2
Gemfile
|
|
@ -6,9 +6,11 @@ workspace = ENV["WORKSPACE"] || "~/workspace"
|
||||||
|
|
||||||
gem 'pg', '0.14.0'
|
gem 'pg', '0.14.0'
|
||||||
gem 'jam_db', :path=> "#{workspace}/jam-db/target/ruby_package"
|
gem 'jam_db', :path=> "#{workspace}/jam-db/target/ruby_package"
|
||||||
|
gem 'jampb', :path => '~/workspace/jam-pb/target/ruby/jampb'
|
||||||
gem 'activerecord', '3.2.7'
|
gem 'activerecord', '3.2.7'
|
||||||
gem 'uuidtools', '2.1.2'
|
gem 'uuidtools', '2.1.2'
|
||||||
gem 'bcrypt-ruby', '3.0.1'
|
gem 'bcrypt-ruby', '3.0.1'
|
||||||
|
gem 'ruby-protocol-buffers', '1.2.2'
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem "factory_girl"
|
gem "factory_girl"
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
require "pg"
|
require "pg"
|
||||||
require "active_record"
|
require "active_record"
|
||||||
require "jam_db"
|
require "jam_db"
|
||||||
|
require "jampb"
|
||||||
require 'uuidtools'
|
require 'uuidtools'
|
||||||
require "jam_ruby/version"
|
require "jam_ruby/version"
|
||||||
require "jam_ruby/models/extensions/uuid"
|
require "jam_ruby/message_factory"
|
||||||
|
require "jam_ruby/models/jam_session_member"
|
||||||
require "jam_ruby/models/user"
|
require "jam_ruby/models/user"
|
||||||
require "jam_ruby/models/jam_session"
|
require "jam_ruby/models/jam_session"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,93 @@
|
||||||
|
module JamRuby
|
||||||
|
# creates messages (implementation: protocol buffer) objects cleanly
|
||||||
|
class MessageFactory
|
||||||
|
|
||||||
|
CLIENT_TARGET = "client"
|
||||||
|
SERVER_TARGET = "server"
|
||||||
|
SESSION_TARGET_PREFIX = "session:"
|
||||||
|
USER_TARGET_PREFIX = "user:"
|
||||||
|
|
||||||
|
|
||||||
|
def initialize()
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
# create a login message using user/pass
|
||||||
|
def login_with_user_pass(username, password)
|
||||||
|
login = Jampb::Login.new(:username => username, :password => password)
|
||||||
|
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN, :target => SERVER_TARGET, :login => login)
|
||||||
|
end
|
||||||
|
|
||||||
|
# create a login message using token (a cookie or similiar)
|
||||||
|
def login_with_token(token)
|
||||||
|
login = Jampb::Login.new(:token => token)
|
||||||
|
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN, :target => SERVER_TARGET, :login => login)
|
||||||
|
end
|
||||||
|
|
||||||
|
# create a login ack (login was successful)
|
||||||
|
def login_ack(public_ip)
|
||||||
|
login_ack = Jampb::LoginAck.new(:public_ip => public_ip)
|
||||||
|
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_ACK, :target => CLIENT_TARGET, :login_ack => login_ack)
|
||||||
|
end
|
||||||
|
|
||||||
|
# create a jam session login message
|
||||||
|
def login_jam_session(jam_session)
|
||||||
|
login_jam_session = Jampb::LoginJamSession.new(:jam_session => jam_session)
|
||||||
|
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_JAM_SESSION, :target => SESSION_TARGET_PREFIX + jam_session_id, :login_jam_session => login_jam_session)
|
||||||
|
end
|
||||||
|
|
||||||
|
# create a jam session login message ack (success or on failure)
|
||||||
|
def login_jam_session_ack(error, error_reason)
|
||||||
|
login_jam_session_ack = Jampb::LoginJamSessionAck.new(:error => error, :error_reason => error_reason)
|
||||||
|
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LOGIN_JAM_SESSION_ACK, :target => CLIENT_TARGET, :login_jam_session_ack => login_jam_session_ack)
|
||||||
|
end
|
||||||
|
|
||||||
|
# create a jam session 'leave session' message
|
||||||
|
def leave_jam_session(jam_session)
|
||||||
|
leave_jam_session = Jampb::LeaveJamSession.new(:jam_session => jam_session)
|
||||||
|
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LEAVE_JAM_SESSION, :target => SERVER_TARGET, :leave_jam_session => leave_jam_session)
|
||||||
|
end
|
||||||
|
|
||||||
|
# create a jam session leave message ack (success or on failure)
|
||||||
|
def leave_jam_session_ack(error, error_reason)
|
||||||
|
leave_jam_session_ack = Jampb::LeaveJamSessionAck.new(:error => error, :error_reason => error_reason)
|
||||||
|
return Jampb::ClientMessage.new(:type => ClientMessage::Type::LEAVE_JAM_SESSION_ACK, :target => CLIENT_TARGET, :leave_jam_session_ack => leave_jam_session_ack)
|
||||||
|
end
|
||||||
|
|
||||||
|
# create a server error
|
||||||
|
def server_generic_error(error_msg)
|
||||||
|
error = Jampb::ServerGenericError.new(:error_msg => error_msg)
|
||||||
|
return Jampb::ClientMessage.new(:type => ClientMessage::Type::SERVER_GENERIC_ERROR, :target => CLIENT_TARGET, :server_generic_error => error)
|
||||||
|
end
|
||||||
|
|
||||||
|
# create a user-joined session message
|
||||||
|
def user_joined_jam_session(user_id, username)
|
||||||
|
error = Jampb::UserJoinedJamSession.new(:user_id => user_id, :username => username)
|
||||||
|
return Jampb::ClientMessage.new(:type => ClientMessage::Type::USER_JOINED_JAM_SESSION, :target => CLIENT_TARGET, :server_generic_error => error)
|
||||||
|
end
|
||||||
|
|
||||||
|
# is this message directed to the server?
|
||||||
|
def server_directed? msg
|
||||||
|
return msg.target == MessageFactory::SERVER_TARGET
|
||||||
|
end
|
||||||
|
|
||||||
|
# is this message directed to the client?
|
||||||
|
def client_directed? msg
|
||||||
|
return msg.target == MessageFactory::CLIENT_TARGET
|
||||||
|
end
|
||||||
|
|
||||||
|
# is this message directed to a (jam) session?
|
||||||
|
def session_directed? msg
|
||||||
|
return msg.start_with? MessageFactory::SESSION_PREFIX_TARGET
|
||||||
|
end
|
||||||
|
|
||||||
|
# is this message directed to a user?
|
||||||
|
def user_directed? msg
|
||||||
|
return msg.start_with? MessageFactory::USER_PREFIX_TARGET
|
||||||
|
end
|
||||||
|
|
||||||
|
def extract_session(msg)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
module JamRuby
|
|
||||||
module UUID
|
|
||||||
extend ActiveSupport::Concern
|
|
||||||
|
|
||||||
included do
|
|
||||||
before_create :generate_uuid
|
|
||||||
|
|
||||||
def generate_uuid
|
|
||||||
self.id = UUIDTools::UUID.random_create.to_s
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -1,12 +1,14 @@
|
||||||
module JamRuby
|
module JamRuby
|
||||||
class JamSession < ActiveRecord::Base
|
class JamSession < ActiveRecord::Base
|
||||||
|
|
||||||
include JamRuby::UUID
|
belongs_to :user, :inverse_of => :jam_sessions
|
||||||
|
|
||||||
# Verifies that the specified user (user_session_id ) can join the jam_sessin_id
|
has_many :jam_session_members
|
||||||
# returns true/false
|
has_many :users, :through => :jam_session_members
|
||||||
def access?(jam_session_id, user_session_id)
|
|
||||||
|
|
||||||
|
# Verifies that the specified user can join this jam session
|
||||||
|
def access?(user)
|
||||||
|
return self.users.exists? user
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,9 @@
|
||||||
|
module JamRuby
|
||||||
|
class JamSessionMember < ActiveRecord::Base
|
||||||
|
|
||||||
|
belongs_to :user
|
||||||
|
belongs_to :jam_session
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -3,6 +3,10 @@ module JamRuby
|
||||||
|
|
||||||
attr_accessible :name, :email, :password, :password_confirmation
|
attr_accessible :name, :email, :password, :password_confirmation
|
||||||
|
|
||||||
|
has_many :jam_session_members
|
||||||
|
has_many :created_jam_sessions, :foreign_key => "user_id", :inverse_of => :user # sessions *created* by the user
|
||||||
|
has_many :jam_sessions, :through => :jam_session_members
|
||||||
|
|
||||||
has_secure_password
|
has_secure_password
|
||||||
|
|
||||||
before_save { |user| user.email = email.downcase }
|
before_save { |user| user.email = email.downcase }
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
FactoryGirl.define do
|
FactoryGirl.define do
|
||||||
factory :user do
|
factory :user, :class => JamRuby::User do
|
||||||
sequence(:name) { |n| "Person #{n}" }
|
sequence(:name) { |n| "Person #{n}" }
|
||||||
sequence(:email) { |n| "person_#{n}@example.com"}
|
sequence(:email) { |n| "person_#{n}@example.com"}
|
||||||
password "foobar"
|
password "foobar"
|
||||||
|
|
@ -9,4 +9,12 @@ FactoryGirl.define do
|
||||||
admin true
|
admin true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
factory :jam_session, :class => JamRuby::JamSession do
|
||||||
|
sequence(:name) { |n| "Jam Session #{n}" }
|
||||||
|
end
|
||||||
|
|
||||||
|
factory :jam_session_member, :class => JamRuby::JamSessionMember do
|
||||||
|
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
@ -4,5 +4,17 @@ describe JamSession do
|
||||||
|
|
||||||
it 'can grant access to valid user' 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, :user => 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
|
||||||
end
|
end
|
||||||
|
|
@ -23,10 +23,9 @@ describe User do
|
||||||
|
|
||||||
describe "accessible attributes" do
|
describe "accessible attributes" do
|
||||||
it "should not allow access to admin" do
|
it "should not allow access to admin" do
|
||||||
userish = User.new(admin: true, name: "george")
|
userish = User.new(admin: true)
|
||||||
userish.admin.should == false
|
userish.admin.should == false # the .new style above will be ignored
|
||||||
userish.name.should == "george"
|
userish.admin = true # but deliberate property setting will work
|
||||||
userish.admin = true
|
|
||||||
userish.admin.should == true
|
userish.admin.should == true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ require 'factory_girl'
|
||||||
require 'rubygems'
|
require 'rubygems'
|
||||||
require 'spork'
|
require 'spork'
|
||||||
require 'database_cleaner'
|
require 'database_cleaner'
|
||||||
|
require 'factories'
|
||||||
|
|
||||||
include JamRuby
|
include JamRuby
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue