class Restrict::Restriction

Attributes

actions[RW]
on[RW]
options[RW]
unless[RW]

Public Class Methods

new(*args) click to toggle source
# File lib/restrict/restriction.rb, line 5
def initialize(*args)
  @options  = args.extract_options!
  @unless   = @options[:unless]
  @on       = @options[:on] || options[:of] || options[:object]
  @actions  = args
end

Public Instance Methods

applies_to?(action) click to toggle source
# File lib/restrict/restriction.rb, line 12
def applies_to?(action)
  applies_to_action?(action) || applies_to_all_actions?
end
validate(controller) click to toggle source
# File lib/restrict/restriction.rb, line 16
def validate(controller)
  @unless or return

  unless_args = []
  if @on
    object = controller.__send__(on)
    unless_args << object or raise Restrict::AccessDenied, reason: 'object given was #{object.inspect}'
  end

  unless controller.__send__(@unless, *unless_args)
    raise Restrict::AccessDenied, reason: self
  end
end

Private Instance Methods

applies_to_action?(name) click to toggle source
# File lib/restrict/restriction.rb, line 36
def applies_to_action?(name)
  actions.include?(name.to_sym)
end
applies_to_all_actions?() click to toggle source
# File lib/restrict/restriction.rb, line 32
def applies_to_all_actions?
  actions.empty?
end