Sha256: a0d5da9741e65fc926f8e6c175bca1f8c76244a3be53d4eb25a258211af7db63

Contents?: true

Size: 1.42 KB

Versions: 2

Compression:

Stored size: 1.42 KB

Contents

class GraphQL::Schema
  DIRECTIVES = [GraphQL::SkipDirective, GraphQL::IncludeDirective]

  attr_reader :query, :mutation, :directives, :static_validator
  def initialize(query:, mutation:)
    # Add fields to this query root for introspection:
    query.fields = query.fields.merge({
      "__type" =>     GraphQL::Field.new do |f, type, field, arg|
        f.description("A type in the GraphQL system")
        f.arguments({name: arg.build(type: !type.String)})
        f.type(!GraphQL::Introspection::TypeType)
        f.resolve -> (o, a, c) { self.types[a["name"]] }
      end,
      "__schema" =>   GraphQL::Field.new do |f|
        f.description("This GraphQL schema")
        f.type(!GraphQL::Introspection::SchemaType)
        f.resolve -> (o, a, c) { self }
      end
    })

    @query    = query
    @mutation = mutation
    @directives = DIRECTIVES.reduce({}) { |m, d| m[d.name] = d; m }
    @static_validator = GraphQL::StaticValidation::Validator.new(schema: self)

    errors = SchemaValidator.new.validate(self)
    if errors.any?
      raise("Schema is invalid: \n#{errors.join("\n")}")
    end
  end

  def types
    @types ||= TypeReducer.new(query, {}).result
  end
end

require 'graph_ql/schema/each_item_validator'
require 'graph_ql/schema/field_validator'
require 'graph_ql/schema/implementation_validator'
require 'graph_ql/schema/schema_validator'
require 'graph_ql/schema/type_reducer'
require 'graph_ql/schema/type_validator'

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
graphql-0.3.0 lib/graph_ql/schema.rb
graphql-0.2.0 lib/graph_ql/schema.rb