Class: StrongActions::Decision

Inherits:
Object
  • Object
show all
Defined in:
lib/strong_actions/decision.rb

Instance Method Summary collapse

Constructor Details

#initialize(target) ⇒ Decision

Returns a new instance of Decision.



4
5
6
# File 'lib/strong_actions/decision.rb', line 4

def initialize(target)
  @target = target
end

Instance Method Details

#call(role, controller_path, action_name = nil, params = {}) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/strong_actions/decision.rb', line 8

def call(role, controller_path, action_name = nil, params = {})
  role_definition = StrongActions.config.role_definition(role)
  return true unless role_definition

  controller_value = role_definition[controller_path]
  return true if controller_value.nil?

  if controller_value.is_a?(Hash)
    action_name ||= 'index'
    action_value = controller_value[action_name]
  else
    action_value = controller_value
  end
  return true if action_value.nil?

  action_value = [action_value] unless action_value.is_a?(Array)
  action_value.each do |definition|
    next if definition === true
    return false unless definition

    role_object = role_object_for(role)
    return false unless role_object.instance_eval(definition)
  end

  true
end

#role_object_for(role) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/strong_actions/decision.rb', line 35

def role_object_for(role)
  begin
     return @target.instance_eval(role)
  rescue NameError
    raise "role #{role} is not defined in controller"
  end
end