Class: Dynamican::Evaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/dynamican/evaluator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(subject, action, object, conditions_instances = {}) ⇒ Evaluator

Returns a new instance of Evaluator.



5
6
7
8
9
10
11
# File 'lib/dynamican/evaluator.rb', line 5

def initialize(subject, action, object, conditions_instances = {})
  @subject = subject
  @action = action
  @object = object
  @object_name = calculate_object_name
  @conditions_instances = conditions_instances
end

Instance Attribute Details

#actionObject (readonly)

Returns the value of attribute action.



3
4
5
# File 'lib/dynamican/evaluator.rb', line 3

def action
  @action
end

#conditions_instancesObject (readonly)

Returns the value of attribute conditions_instances.



3
4
5
# File 'lib/dynamican/evaluator.rb', line 3

def conditions_instances
  @conditions_instances
end

#objectObject (readonly)

Returns the value of attribute object.



3
4
5
# File 'lib/dynamican/evaluator.rb', line 3

def object
  @object
end

#object_nameObject (readonly)

Returns the value of attribute object_name.



3
4
5
# File 'lib/dynamican/evaluator.rb', line 3

def object_name
  @object_name
end

#subjectObject (readonly)

Returns the value of attribute subject.



3
4
5
# File 'lib/dynamican/evaluator.rb', line 3

def subject
  @subject
end

Instance Method Details

#evaluateObject



13
14
15
16
17
18
19
20
21
# File 'lib/dynamican/evaluator.rb', line 13

def evaluate
  set_instance_variables

  matching_connectors = subject.permission_connectors.for_action(action).for_object(object_name)
  matching_conditions_statements = matching_connectors.conditional.map(&:conditions).flatten.map(&:statement)

  matching_connectors.unconditional.any? ||
  matching_conditions_statements.any? && matching_conditions_statements.map { |statement| eval statement }.all?
end