jam-cloud/ruby/lib/jam_ruby/models/online_presence.rb

70 lines
2.3 KiB
Ruby
Raw Normal View History

module JamRuby
2015-02-13 08:16:48 +00:00
class OnlinePresence < ActiveRecord::Base
PERMISSION_MSG = "You do not have permission to perform this operation."
attr_accessible :player_id, :service_type, :username
belongs_to :player, polymorphic: true
2015-02-05 08:34:25 +00:00
validates :service_type, presence:true, length: {maximum: 100}
validates :username, presence:true, length: {maximum: 100}
validate :username_service_type_unique
def username_service_type_unique
2015-02-13 08:16:48 +00:00
match = OnlinePresence.exists?(:username => self.username, :service_type => self.service_type)
raise ConflictError, "Username #{self.username} is already associated with a #{self.service_type} account" if match
end
def self.index(options = {})
2015-02-13 06:32:55 +00:00
raise StateError, "The user is not specified." if options[:id].blank?
OnlinePresence.where("player_id = ?", options[:id])
end
# Create with target_player (target_player is either user or band):
def self.create(target_player, options = {}, save = true)
auth_player(target_player, options)
2015-02-10 07:44:16 +00:00
raise StateError, "Missing required information" if options[:service_type].blank? || options[:username].blank?
up = OnlinePresence.new({
:player_id => target_player.id,
:service_type => options[:service_type],
:username => options[:username]
})
up.save! if save
up
end
def self.update(target_player, options = {})
auth_player(target_player, options)
2015-02-10 07:44:16 +00:00
raise StateError, "Missing required information" if options[:service_type].blank? || options[:username].blank? || options[:id].blank?
2015-02-05 08:34:25 +00:00
2015-02-13 08:16:48 +00:00
up = OnlinePresence.find(options[:id])
2015-02-10 07:44:16 +00:00
up.service_type = options[:service_type]
up.username = options[:username]
up.save!
end
def self.delete(target_player, options = {})
2015-02-05 08:34:25 +00:00
id = options[:id]
2015-02-10 07:44:16 +00:00
raise StateError, "Missing required information" if id.blank?
2015-02-13 08:16:48 +00:00
online_presence = OnlinePresence.find(id)
2015-02-10 07:44:16 +00:00
if online_presence.player_id != target_player.id
raise JamPermissionError, PERMISSION_MSG
2015-02-05 08:34:25 +00:00
end
2015-02-13 08:16:48 +00:00
unless online_presence.nil?
OnlinePresence.destroy(id)
end
end
2015-02-05 08:34:25 +00:00
private
def self.auth_player(target_player, options={})
2015-06-03 21:34:37 +00:00
if target_player.nil? || options[:player_id] != target_player.id
raise JamPermissionError, PERMISSION_MSG
end
2015-02-05 08:34:25 +00:00
end
end
end