class KittyPolicy::GraphQL::CanResolver

Public Class Methods

new(policy:, base_resolver: ::GraphQL::Schema::Resolver, current_user_key: :current_user) click to toggle source
# File lib/kitty_policy/graphql/can_resolver.rb, line 6
def initialize(policy:, base_resolver: ::GraphQL::Schema::Resolver, current_user_key: :current_user)
  @base_resolver = base_resolver
  @current_user_key = current_user_key
  @policy = policy
end

Public Instance Methods

field_options() click to toggle source
# File lib/kitty_policy/graphql/can_resolver.rb, line 29
def field_options
  raise "Can't use `#{self.class.name}` directly as resolver. Use `resolve: #{self.class.name}.perform(action)`"
end
perform(action, &extract_subject) click to toggle source
# File lib/kitty_policy/graphql/can_resolver.rb, line 12
def perform(action, &extract_subject)
  policy = @policy
  current_user_key = @current_user_key

  Class.new(@base_resolver) do
    type ::GraphQL::BOOLEAN_TYPE, null: false

    define_method(:resolve) do
      policy.can?(
        context[current_user_key],
        action,
        extract_subject ? extract_subject.call(object) : object,
      )
    end
  end
end