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, item, 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, item, conditions_instances = {})
  @subject = subject
  @action = action
  @item = item
  @item_name = calculate_item_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

#itemObject (readonly)

Returns the value of attribute item.



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

def item
  @item
end

#item_nameObject (readonly)

Returns the value of attribute item_name.



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

def item_name
  @item_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_permissions = item.present? ? subject.permissions.for_action(action).for_item(item_name) : subject.permissions.for_action(action).without_item
  matching_permissions_statements = matching_permissions.conditional.map(&:conditions).flatten.map(&:statement)

  matching_permissions.unconditional.any? ||
  matching_permissions_statements.any? && matching_permissions_statements.map { |statement| eval statement }.all?
end