Class: Admission::Rails::ActionAdmission

Inherits:
Object
  • Object
show all
Defined in:
lib/admission/rails/action_admission.rb

Constant Summary collapse

ALL_ACTIONS =
'^'.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(controller) ⇒ ActionAdmission

Returns a new instance of ActionAdmission.



9
10
11
12
# File 'lib/admission/rails/action_admission.rb', line 9

def initialize controller
  @controller = controller
  @resolvers = {}
end

Instance Attribute Details

#controllerObject (readonly)

Returns the value of attribute controller.



7
8
9
# File 'lib/admission/rails/action_admission.rb', line 7

def controller
  @controller
end

#resolversObject (readonly)

Returns the value of attribute resolvers.



7
8
9
# File 'lib/admission/rails/action_admission.rb', line 7

def resolvers
  @resolvers
end

Instance Method Details

#for(*actions, resolve_to: nil, &block) ⇒ Object

config methods (adding resolvers)



16
17
18
19
20
21
# File 'lib/admission/rails/action_admission.rb', line 16

def for *actions, resolve_to: nil, &block
  resolve_to = resolve_to || block
  resolver = ScopeResolver.using resolve_to

  set_resolver actions, resolver
end

#for_all(resolve_to = nil, &block) ⇒ Object



23
24
25
# File 'lib/admission/rails/action_admission.rb', line 23

def for_all resolve_to=nil, &block
  self.for ALL_ACTIONS, resolve_to: (resolve_to || block || ScopeResolver.default)
end

#for_resource(*actions, all: false, nested: false) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/admission/rails/action_admission.rb', line 27

def for_resource *actions, all: false, nested: false
  finder_name = if nested
    "#{controller.controller_name}_admission_scope"
  else
    "find_#{controller.controller_name.singularize}"
  end
  resolver = ScopeResolver.using finder_name.to_sym

  actions = all ? ALL_ACTIONS : actions
  set_resolver actions, resolver
end

#scope_for_action(action) ⇒ Object

run-time



44
45
46
47
48
# File 'lib/admission/rails/action_admission.rb', line 44

def scope_for_action action
  resolvers[action] ||
      resolvers[ALL_ACTIONS] ||
      parent&.scope_for_action(action)
end

#skip(*actions) ⇒ Object



39
40
41
# File 'lib/admission/rails/action_admission.rb', line 39

def skip *actions
  set_resolver actions, ScopeResolver.void
end