Method: Maybee::Authorization#granted?

Defined in:
lib/maybee/authorization.rb

#granted?(object, subject) ⇒ Boolean



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/maybee/authorization.rb', line 16

def granted?(object, subject)
  return false if !@allow_nil && @subject_classes && @subject_classes.none? { |klass| subject.is_a?(klass) }
  return true unless @conditionals
  return true if @conditionals.all? do |clause, cond|
    next(false) if subject.nil? && !@allow_nil
    if :if_subject == clause || :unless_subject == clause
      receiver, argument = subject, object
    else
      receiver, argument = object, subject
    end
    result = if cond.is_a?(Proc)
      if cond.arity == 1
        receiver.instance_exec(argument, &cond)
      else
        receiver.instance_exec(&cond)
      end
    else
      receiver.send(cond)
    end
    (:if_subject == clause || :if == clause) ? result : !result
  end
  false
end