lib/kindergarten/exceptions.rb
module Kindergarten
# Signals unallowed access
class AccessDenied < CanCan::AccessDenied
def initialize(action, target, opts)
message = opts.delete(:message)
if message.blank?
name = target.is_a?(Class) ? target.name : target.class.name
message = "You are not allowed to #{action} that #{name.downcase}"
end
super(message, action, target)
end
end
class Sandbox
class NoPurposeError < NoMethodError
def initialize(purpose, sandbox)
@purpose = purpose
@sandbox = sandbox
end
def to_s
"undefined purpose '#{@purpose}' for #{@sandbox}"
end
end
end
class Perimeter
class NoExposedMethods < NoMethodError
def initialize(perimeter)
@perimeter = perimeter
super
end
def to_s
"The module #{@perimeter.name} does not expose any methods."
end
end
class NoPurpose < ArgumentError
def initialize(perimeter)
@perimeter = perimeter
super
end
def to_s
"The module #{@perimeter.name} does not have a purpose."
end
end
class RestrictedMethodError < ArgumentError
def initialize(perimeter, method)
@perimeter = perimeter
@method = method
end
def to_s
"You exposed '#{method}' on the #{perimeter}, but that is a restricted method"
end
end
# Signals bad sandbox method implementation
class Unguarded < SecurityError; end
end
end