Module: MongoidAbility::Subject::ClassMethods

Defined in:
lib/mongoid_ability/subject.rb

Instance Method Summary collapse

Instance Method Details

#accessible_by(ability, action = :read, options = {}) ⇒ Object




67
68
69
# File 'lib/mongoid_ability/subject.rb', line 67

def accessible_by ability, action=:read, options={}
  AccessibleQueryBuilder.call(self, ability, action, options)
end

#ancestors_with_default_locksObject



43
44
45
# File 'lib/mongoid_ability/subject.rb', line 43

def ancestors_with_default_locks
  self_and_ancestors_with_default_locks - [self]
end

#default_lock(lock_cls, action, outcome, options = {}) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/mongoid_ability/subject.rb', line 19

def default_lock lock_cls, action, outcome, options={}
  unless is_root_class?
    unless root_class.has_default_lock_for_action?(action)
      raise StandardError, "action is not defined on root class (#{root_class})"
    end
  end

  lock = lock_cls.new( subject_type: self.to_s, action: action, outcome: outcome, options: options )

  # remove any existing locks
  if existing_lock = default_locks.detect{ |l| l.action == lock.action }
    default_locks.delete(existing_lock)
  end

  # add new lock
  default_locks.push lock
end

#default_lock_for_action(action) ⇒ Object




57
58
59
# File 'lib/mongoid_ability/subject.rb', line 57

def default_lock_for_action action
  default_locks.detect{ |lock| lock.action == action.to_sym }
end

#default_locksObject



11
12
13
# File 'lib/mongoid_ability/subject.rb', line 11

def default_locks
  @default_locks ||= []
end

#default_locks=(locks) ⇒ Object



15
16
17
# File 'lib/mongoid_ability/subject.rb', line 15

def default_locks= locks
  @default_locks = locks
end

#has_default_lock_for_action?(action) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/mongoid_ability/subject.rb', line 61

def has_default_lock_for_action? action
  default_lock_for_action(action).present?
end

#is_root_class?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/mongoid_ability/subject.rb', line 47

def is_root_class?
  root_class == self
end

#root_classObject



51
52
53
# File 'lib/mongoid_ability/subject.rb', line 51

def root_class
  self_and_ancestors_with_default_locks.last
end

#self_and_ancestors_with_default_locksObject




39
40
41
# File 'lib/mongoid_ability/subject.rb', line 39

def self_and_ancestors_with_default_locks
  ancestors.select { |a| a.is_a?(Class) && a.respond_to?(:default_locks) }
end