class Sevn::RulesPack
Public Class Methods
new()
click to toggle source
# File lib/sevn/rules_pack.rb, line 3 def initialize @allowed_abilities = general_abilities @scoped_abilities = Hash.new { |hash, key| hash[key] = Sevn::Constants::EMPTY_ARRAY } @aliases = Sevn::Constants::DEFAULT_ALIASES.merge(action_aliases) abilities_check(@allowed_abilities) end
Public Instance Methods
abilities(object, subject)
click to toggle source
# File lib/sevn/rules_pack.rb, line 20 def abilities(object, subject) Sevn::Constants::EMPTY_ARRAY end
action_aliases()
click to toggle source
# File lib/sevn/rules_pack.rb, line 24 def action_aliases Sevn::Constants::EMPTY_HASH end
allowed?(object, action, subject)
click to toggle source
# File lib/sevn/rules_pack.rb, line 10 def allowed?(object, action, subject) @allowed_abilities.include?(action) || @scoped_abilities[scoped_abilities_key(object, subject)].include?(action) || prepare_and_check_scoped_abilities(object, action, subject) end
general_abilities()
click to toggle source
# File lib/sevn/rules_pack.rb, line 16 def general_abilities Sevn::Constants::EMPTY_ARRAY end
Private Instance Methods
abilities_check(abilities)
click to toggle source
# File lib/sevn/rules_pack.rb, line 65 def abilities_check(abilities) raise Sevn::Errors::InvalidPackAbilitiesType.new unless abilities.kind_of?(Array) end
all_abilities(object, subject)
click to toggle source
# File lib/sevn/rules_pack.rb, line 29 def all_abilities(object, subject) @allowed_abilities + @scoped_abilities[scoped_abilities_key(object, subject)] end
from_abilities_method(object, subject)
click to toggle source
# File lib/sevn/rules_pack.rb, line 39 def from_abilities_method(object, subject) abilities_from_method = abilities(object, subject) abilities_check(abilities_from_method) @scoped_abilities[scoped_abilities_key(object, subject)] += abilities_from_method end
from_action_method(object, action, subject)
click to toggle source
# File lib/sevn/rules_pack.rb, line 45 def from_action_method(object, action, subject) sevn_action = "sevn_#{action}".to_sym if self.respond_to?(sevn_action) && self.send(sevn_action, object, subject) @scoped_abilities[scoped_abilities_key(object, subject)] << action else # Return empty array to avoid breaking the interface Sevn::Constants::EMPTY_ARRAY end end
from_aliased_action_method(object, action, subject)
click to toggle source
# File lib/sevn/rules_pack.rb, line 55 def from_aliased_action_method(object, action, subject) sevn_aliased_action = "sevn_#{@aliases[action]}".to_sym if @aliases[action] && self.respond_to?(sevn_aliased_action) && self.send(sevn_aliased_action, object, subject) @scoped_abilities[scoped_abilities_key(object, subject)] << action else # Return empty array to avoid breaking the interface Sevn::Constants::EMPTY_ARRAY end end
prepare_and_check_scoped_abilities(object, action, subject)
click to toggle source
# File lib/sevn/rules_pack.rb, line 33 def prepare_and_check_scoped_abilities(object, action, subject) from_abilities_method(object, subject).include?(action) || from_action_method(object, action, subject).include?(action) || from_aliased_action_method(object, action, subject).include?(action) end
scoped_abilities_key(object, subject)
click to toggle source
# File lib/sevn/rules_pack.rb, line 69 def scoped_abilities_key(object, subject) "o#{object.object_id}_s#{subject.object_id}".to_sym end