module SnFoil::Policy

ActiveSupport::Concern for adding SnFoil Policy functionality to policy file

@author Matthew Howes

@since 0.1.0

Constants

VERSION

Attributes

entity[R]
options[RW]
record[R]

Public Class Methods

new(entity, record, options = {}) click to toggle source
# File lib/snfoil/policy.rb, line 51
def initialize(entity, record, options = {})
  @record = record
  @entity = entity
  @options = options
end

Public Instance Methods

i_permissions() click to toggle source
# File lib/snfoil/policy.rb, line 31
def i_permissions
  @i_permissions ||= {}
end
permission(authorization_type, entity_class = nil, with: nil, &block) click to toggle source
# File lib/snfoil/policy.rb, line 35
def permission(authorization_type, entity_class = nil, with: nil, &block)
  @i_permissions ||= {}
  @i_permissions[authorization_type] ||= {}
  if @i_permissions[authorization_type][entity_class]
    raise SnFoil::Policy::Error,
          "permission #{entity_class} #{authorization_type} already defined for #{name}"
  end

  @i_permissions[authorization_type][entity_class] = build_permission_exec(with, block)
  define_permission_method(authorization_type)
end

Private Instance Methods

build_permission_exec(method, block) click to toggle source
# File lib/snfoil/policy.rb, line 78
def build_permission_exec(method, block)
  return block if block

  proc { send(method) }
end
define_permission_method(authorization_type) click to toggle source
# File lib/snfoil/policy.rb, line 84
def define_permission_method(authorization_type)
  define_method authorization_type do
    self.class.i_permissions[authorization_type].each do |klass, exec|
      return instance_eval(&exec) if klass.nil? || entity.is_a?(klass)
    end

    false
  end
end