class YouShallNotPass::Authorizator

Public Class Methods

new(**attrs) click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 6
def initialize(**attrs)
  attrs.each do |attr, value|
    send attr, value
  end
end

Private Class Methods

__dsl_policies__() click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 79
def self.__dsl_policies__
  @__dsl_policies__ ||= {}
end
attribute(attr) click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 59
def self.attribute(attr)
  fattr attr
end
policy(name, &block) click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 55
def self.policy(name, &block)
  __dsl_policies__[name] = proc { block }
end

Public Instance Methods

can?(permission, **args) click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 12
def can?(permission, **args)
  Array(policies.fetch(permission)).all? do |policy|
    Callable(policy).call(**args) == true
  end
end
can_all?(*permissions, **args) click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 18
def can_all?(*permissions, **args)
  permissions.all? { |permission| can?(permission, **args)}
end
can_any?(*permissions, **args) click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 22
def can_any?(*permissions, **args)
  permissions.any? { |permission| can?(permission, **args)}
end
perform_if(permission, **args) { || ... } click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 26
def perform_if(permission, **args)
  yield if can?(permission, **args)
end
perform_if_all(*permissions, **args) { || ... } click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 34
def perform_if_all(*permissions, **args)
  yield if can_all?(*permissions, **args)
end
perform_if_any(*permissions, **args) { || ... } click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 42
def perform_if_any(*permissions, **args)
  yield if can_any?(*permissions, **args)
end
perform_unless(permission, **args) { || ... } click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 30
def perform_unless(permission, **args)
  yield unless can?(permission, **args)
end
perform_unless_all(*permissions, **args) { || ... } click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 38
def perform_unless_all(*permissions, **args)
  yield unless can_all?(*permissions, **args)
end
perform_unless_any(*permissions, **args) { || ... } click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 46
def perform_unless_any(*permissions, **args)
  yield unless can_any?(*permissions, **args)
end
policies() click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 50
def policies
  @policies ||= __set_policies__
end

Private Instance Methods

__dsl_policies__() click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 73
def __dsl_policies__
  self.class.__dsl_policies__. each_with_object({}) { |(name, value), res|
    res[name] = instance_eval(&value)
  }
end
__method_policies__() click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 68
def __method_policies__
  methods.grep(/_policies\z/).
    each_with_object({}) { |name, res| res.merge!(send(name)) }
end
__set_policies__() click to toggle source
# File lib/you_shall_not_pass/authorizator.rb, line 64
def __set_policies__
  __method_policies__.merge!(__dsl_policies__)
end