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