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