module MongoidAbility::Owner
Public Class Methods
included(base)
click to toggle source
# File lib/mongoid_ability/owner.rb, line 3 def self.included(base) base.extend ClassMethods base.class_eval do include Mongoid::Touchable::InstanceMethods delegate :can?, :cannot?, to: :ability before_save :cleanup_locks end end
Public Instance Methods
ability()
click to toggle source
# File lib/mongoid_ability/owner.rb, line 40 def ability @ability ||= MongoidAbility::Ability.new(self) end
has_lock?(lock)
click to toggle source
# File lib/mongoid_ability/owner.rb, line 44 def has_lock?(lock) @has_lock ||= {} return @has_lock[lock.id.to_s] if @has_lock.key?(lock.id.to_s) @has_lock[lock.id.to_s] ||= begin locks_relation.where( subject_type: lock.subject_type, subject_id: lock.subject_id.presence, action: lock.action, options: lock.options ).exists? end end
inherit_from_relation()
click to toggle source
# File lib/mongoid_ability/owner.rb, line 35 def inherit_from_relation return unless respond_to?(self.class.inherit_from_relation_name) send(self.class.inherit_from_relation_name) end
locks_relation()
click to toggle source
# File lib/mongoid_ability/owner.rb, line 25 def locks_relation return unless respond_to?(self.class.locks_relation_name) send(self.class.locks_relation_name) end
locks_relation=(val)
click to toggle source
# File lib/mongoid_ability/owner.rb, line 30 def locks_relation=(val) return unless respond_to?("#{self.class.locks_relation_name}=") send "#{self.class.locks_relation_name}=", val end
Private Instance Methods
cleanup_locks()
click to toggle source
# File lib/mongoid_ability/owner.rb, line 61 def cleanup_locks locks_relation.select(&:open?).each do |lock| lock.destroy if locks_relation.where( subject_type: lock.subject_type, subject_id: lock.subject_id.presence, action: lock.action, options: lock.options ).any?(&:closed?) end end