Class: MongoidAbility::FindLock::FindInheritedLock

Inherits:
MongoidAbility::FindLock show all
Defined in:
lib/mongoid_ability/find_lock.rb

Instance Attribute Summary

Attributes inherited from MongoidAbility::FindLock

#action, #options, #owner, #subject_id, #subject_type

Instance Method Summary collapse

Methods inherited from MongoidAbility::FindLock

call, #initialize

Constructor Details

This class inherits a constructor from MongoidAbility::FindLock

Instance Method Details

#callObject



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/mongoid_ability/find_lock.rb', line 39

def call
  return unless owner.respond_to?(owner.class.inherit_from_relation_name)
  locks = LocksDecorator.new(
    owner.inherit_from_relation
          .flat_map { |inherited_owner| FindOwnedLock.call(inherited_owner, action, subject_type, subject_id, options) }
  )

  if subject_id.present?
    lock = locks.for_subject_id(subject_id).detect(&:closed?) ||
           locks.for_subject_id(subject_id).detect(&:open?)
    return lock unless lock.nil?
  end

  locks.class_locks.detect(&:open?) || locks.class_locks.detect(&:closed?)
end