class GraphQL::PersistedQueries::MultiplexResolver

Resolves multiplex query

Public Class Methods

new(schema, queries, **kwargs) click to toggle source
# File lib/graphql/persisted_queries/multiplex_resolver.rb, line 7
def initialize(schema, queries, **kwargs)
  @schema = schema
  @queries = queries
  @kwargs = kwargs
end

Public Instance Methods

resolve() click to toggle source
# File lib/graphql/persisted_queries/multiplex_resolver.rb, line 13
def resolve
  resolve_persisted_queries
  perform_multiplex
  results
end

Private Instance Methods

perform_multiplex() click to toggle source
# File lib/graphql/persisted_queries/multiplex_resolver.rb, line 42
def perform_multiplex
  resolve_idx = (0...@queries.count).select { |i| results[i].nil? }
  multiplex_result = @schema.multiplex_original(
    resolve_idx.map { |i| @queries.at(i) }, **@kwargs
  )
  resolve_idx.each_with_index { |res_i, mult_i| results[res_i] = multiplex_result[mult_i] }
end
resolve_persisted_queries() click to toggle source
# File lib/graphql/persisted_queries/multiplex_resolver.rb, line 25
def resolve_persisted_queries
  @queries.each_with_index do |query_params, i|
    resolve_persisted_query(query_params, i)
  end
end
resolve_persisted_query(query_params, pos) click to toggle source
# File lib/graphql/persisted_queries/multiplex_resolver.rb, line 31
def resolve_persisted_query(query_params, pos)
  extensions = query_params.dig(:context, :extensions)
  return unless extensions

  query_params[:query] = Resolver.new(extensions, @schema).resolve(query_params[:query])
rescue GraphQL::PersistedQueries::NotFound, GraphQL::PersistedQueries::WrongHash => e
  values = { "errors" => [{ "message" => e.message }] }
  query = GraphQL::Query.new(@schema, query_params[:query])
  results[pos] = GraphQL::Query::Result.new(query: query, values: values)
end
results() click to toggle source
# File lib/graphql/persisted_queries/multiplex_resolver.rb, line 21
def results
  @results ||= Array.new(@queries.count)
end