class Admission::Arbitration
Attributes
person[R]
request[R]
Public Class Methods
define_rules(privilege_order, &block)
click to toggle source
# File lib/admission/arbitration.rb, line 68 def self.define_rules privilege_order, &block builder = self::RulesBuilder.new privilege_order builder.instance_exec &block builder.create_index end
new(person, rules_index, request)
click to toggle source
# File lib/admission/arbitration.rb, line 5 def initialize person, rules_index, request @person = person @rules_index = rules_index @request = request.to_sym @decisions = {} end
Public Instance Methods
case_to_s()
click to toggle source
# File lib/admission/arbitration.rb, line 64 def case_to_s @request.to_s end
decide(privilege)
click to toggle source
# File lib/admission/arbitration.rb, line 54 def decide privilege decision = make_decision @rules_index[@request], privilege return decision if decision.eql?(:forbidden) || decision.eql?(true) decision = decide_per_inheritance privilege return decision if decision.eql?(:forbidden) || decision.eql?(true) make_decision @rules_index[Admission::ALL_ACTION], privilege end
decide_per_inheritance(privilege)
click to toggle source
# File lib/admission/arbitration.rb, line 41 def decide_per_inheritance privilege inherited = privilege.inherited return nil if inherited.nil? || inherited.empty? explicit_allowance = false inherited.each do |p| rule = rule_per_privilege p return rule if rule == :forbidden explicit_allowance ||= rule end explicit_allowance end
make_decision(from_rules, privilege)
click to toggle source
# File lib/admission/arbitration.rb, line 28 def make_decision from_rules, privilege if from_rules decision = from_rules[privilege] decision = @person.instance_exec @context, &decision if Proc === decision unless Admission::VALID_DECISION.include? decision raise "invalid decision: #{decision}" end decision end end
prepare_sitting(context=nil)
click to toggle source
# File lib/admission/arbitration.rb, line 12 def prepare_sitting context=nil return if context == @context @context = context @decisions = {} end
rule_per_privilege(privilege)
click to toggle source
# File lib/admission/arbitration.rb, line 18 def rule_per_privilege privilege decision = @decisions[privilege] return decision unless decision.nil? decision = decide privilege decision = false if decision.nil? @decisions[privilege] = decision end