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