Class: MongoidAbility::ResolveOwnerLocks

Inherits:
ResolveLocks
  • Object
show all
Defined in:
lib/mongoid_ability/resolve_owner_locks.rb

Instance Attribute Summary

Attributes inherited from ResolveLocks

#action, #options, #owner, #subject, #subject_class, #subject_id, #subject_type

Instance Method Summary collapse

Methods inherited from ResolveLocks

call, #initialize

Constructor Details

This class inherits a constructor from MongoidAbility::ResolveLocks

Instance Method Details

#callObject



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/mongoid_ability/resolve_owner_locks.rb', line 4

def call
  # FIXME: this is not a very nice fix
  return unless owner.respond_to?(:locks_relation)

  locks_for_subject_type = owner.locks_relation.for_action(action).for_subject_type(subject_type)

  return unless locks_for_subject_type.exists?

  # return outcome if owner defines lock for id
  if subject.present?
    id_locks = locks_for_subject_type.id_locks.for_subject_id(subject_id)
    return false if id_locks.any?{ |l| l.closed?(options) }
    return true if id_locks.any?{ |l| l.open?(options) }
  end

  # return outcome if owner defines lock for subject_type
  class_locks = locks_for_subject_type.class_locks
  return false if class_locks.class_locks.any?{ |l| l.closed?(options) }
  return true if class_locks.class_locks.any?{ |l| l.open?(options) }

  nil
end