Sha256: e6b5cea90ffd5ac675a0ff2403fc4e80e7b203b9d6084833efa141eebee272d7

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

class GraphQL::Query
  DEFAULT_RESOLVE = :__default_resolve
  extend ActiveSupport::Autoload
  autoload(:Arguments)
  autoload(:FieldResolutionStrategy)
  autoload(:FragmentSpreadResolutionStrategy)
  autoload(:InlineFragmentResolutionStrategy)
  autoload(:OperationResolver)
  autoload(:SelectionResolver)
  autoload(:TypeResolver)
  attr_reader :schema, :document, :context, :fragments, :params

  def initialize(schema, query_string, context: nil, params: {})
    @schema = schema
    @document = GraphQL.parse(query_string)
    @context = context
    @params = params
    @fragments = {}
    @operations = {}

    @document.parts.each do |part|
      if part.is_a?(GraphQL::Nodes::FragmentDefinition)
        @fragments[part.name] = part
      elsif part.is_a?(GraphQL::Nodes::OperationDefinition)
        @operations[part.name] = part
      end
    end
  end

  # Get the result for this query, executing it once
  def result
    @result ||= {
      "data" => execute,
    }
  rescue StandardError => err
    message = "Something went wrong during query execution: #{err}"
    {"errors" => [{"message" => message}]}
  end

  private

  def execute
    response = {}
    @operations.each do |name, operation|
      resolver = OperationResolver.new(operation, self)
      response[name] = resolver.result
    end
    response
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
graphql-0.1.0 lib/graph_ql/query.rb