module Surrounded::AccessControl
Public Class Methods
extended(base)
click to toggle source
# File lib/surrounded/access_control.rb, line 6 def self.extended(base) base.send(:include, AccessMethods) Surrounded::Exceptions.define(base, exceptions: :AccessError) end
Private Instance Methods
define_access_method(name, &block)
click to toggle source
# File lib/surrounded/access_control.rb, line 32 def define_access_method(name, &block) mod = Module.new mod.class_eval { define_method "disallow_#{name}?" do begin apply_behaviors instance_exec(&block) ensure remove_behaviors end end } const_set("SurroundedAccess#{name}", mod) include mod end
disallow(*names, &block)
click to toggle source
# File lib/surrounded/access_control.rb, line 13 def disallow(*names, &block) names.map do |name| define_access_method(name, &block) end end
Also aliased as: guard
trigger_return_content(name, *args, &block)
click to toggle source
# File lib/surrounded/access_control.rb, line 20 def trigger_return_content(name, *args, &block) %{ method_restrictor = "disallow_#{name}?" if self.respond_to?(method_restrictor, true) && self.send(method_restrictor) raise ::#{self.to_s}::AccessError.new("access to #{self.name}##{name} is not allowed") end #{super} } end