class Models::Groups::Invitation
Constants
- STATUS
Attributes
access_key_length[RW]
status[RW]
Public Class Methods
accept(application_id, user_id, access_key)
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 47 def self.accept(application_id, user_id, access_key) #TODO: GJ: skip if already a member invitation = self.available.by_application_id(application_id).by_access_key(access_key).first raise "Invalid invitation" unless invitation invitation.accept(user_id) end
access_key_unique?(application_id, access_key)
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 72 def self.access_key_unique?(application_id, access_key) self.by_application_id(application_id).by_access_key(access_key).empty? end
by_access_key(key)
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 28 def self.by_access_key(key) self.where 'access_key = ?', key end
by_application_id(application_id)
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 24 def self.by_application_id(application_id) self.where 'application_id = ?', application_id end
Public Instance Methods
accept(user_id)
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 55 def accept(user_id) validate! user_id transaction do membership = Membership.new application_id: application_id, group_id: group_id, user_id: user_id self.memberships << membership self.use! membership end end
configuration()
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 43 def configuration Configuration.find_or_create_by({ application_id: self.application_id }) end
reject(user_id)
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 67 def reject(user_id) validate! user_id self.use! false end
status=(status)
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 39 def status=(status) write_attribute(:status_id, STATUS[status]) end
Protected Instance Methods
use!(accept = true)
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 78 def use!(accept = true) if single_use? self.status = accept ? :accepted : :rejected else self.remaining_uses -= 1 end self.save! end
Private Instance Methods
generate_access_key()
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 105 def generate_access_key length = access_key_length.to_i loop do self.access_key = SecureRandom.urlsafe_base64(length).first(length) break if Invitation.access_key_unique?(application_id, access_key) end end
set_defaults()
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 100 def set_defaults self.access_key_length ||= 16 self.status ||= :available end
single_use?()
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 96 def single_use? remaining_uses.nil? || remaining_uses <= 1 end
validate!(user_id)
click to toggle source
# File lib/restpack_group_service/models/invitation.rb, line 89 def validate!(user_id) raise "Invitation is #{status}" unless status == :available raise "Invalid invitee" unless invitee_id.nil? || invitee_id == user_id.to_i raise "Invitation has expired" unless remaining_uses.nil? || remaining_uses > 0 raise "Invitation has expired" unless expires_at.nil? || expires_at > Time.now end