class Dynamican::Evaluator
Attributes
action[R]
conditions_instances[R]
item[R]
item_name[R]
subject[R]
Public Class Methods
new(subject, action, item, conditions_instances = {})
click to toggle source
# 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
Public Instance Methods
evaluate()
click to toggle source
# 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
Private Instance Methods
calculate_item_name()
click to toggle source
# File lib/dynamican/evaluator.rb, line 34 def calculate_item_name class_name = if item.class.in? [Symbol, String, Class] item.to_s.classify else item.class.name.demodulize end given_item_name = item.class.try(:dynamican_item_name) given_item_name || class_name end
set_instance_variables()
click to toggle source
# File lib/dynamican/evaluator.rb, line 25 def set_instance_variables instance_variable_set("@#{subject.class.name.demodulize.underscore}", subject) instance_variable_set("@#{item.class.name.demodulize.underscore}", item) conditions_instances.each do |instance_name, instance_item| instance_variable_set("@#{instance_name}", instance_item) end end