class MarbleGate::Access

Attributes

context[R]

Public Class Methods

new(context, action, *args) click to toggle source
# File lib/marble_gate/access.rb, line 13
def initialize(context, action, *args)
  @context, @action = context, action.to_sym
  @args = args
end

Public Instance Methods

for_authorizer?(model_class) click to toggle source
# File lib/marble_gate/access.rb, line 25
def for_authorizer?(model_class)
  cls = auth_class(model_class)
  cls.send(choose_action(cls), *@args)
end
for_model?(model) click to toggle source
# File lib/marble_gate/access.rb, line 18
def for_model?(model)
  return for_authorizer?(model) if model.is_a?(Class)

  obj = auth_class(model.class).new(model)
  obj.send(choose_action(obj), *@args)
end
user() click to toggle source
# File lib/marble_gate/access.rb, line 30
def user
  context.send(MarbleGate.current_user_method_name)
end

Private Instance Methods

auth_class(model_class) click to toggle source
# File lib/marble_gate/access.rb, line 36
def auth_class(model_class)
  return @auth_class if @auth_class

  _auth_class = "#{model_class.name}Authorizer"
  @auth_class = _auth_class.safe_constantize
  raise MarbleGate::MissingAuthorizer unless @auth_class

  %i(user context).each { |m| @auth_class.send("#{m}=", send(m)) }
  @auth_class.model_class = model_class
  @auth_class
end
choose_action(auth) click to toggle source
# File lib/marble_gate/access.rb, line 48
def choose_action(auth)
  return @action if auth.respond_to?(@action)

  new_action = MarbleGate.alias_map[@action]
  return new_action if new_action && auth.respond_to?(new_action)

  return :manage if auth.respond_to?(:manage)

  :default
end