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
guard(*names, &block)
Alias for: disallow
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