Class: GraphQL::Schema::Printer

Inherits:
Language::Printer show all
Defined in:
lib/graphql/schema/printer.rb

Overview

Used to convert your GraphQL::Schema to a GraphQL schema string

Examples:

print your schema to standard output (via helper)

puts GraphQL::Schema::Printer.print_schema(MySchema)

print your schema to standard output

puts GraphQL::Schema::Printer.new(MySchema).print_schema

print a single type to standard output

class Types::Query < GraphQL::Schema::Object
  description "The query root of this schema"

  field :post, Types::Post, null: true
end

class Types::Post < GraphQL::Schema::Object
  description "A blog post"

  field :id, ID, null: false
  field :title, String, null: false
  field :body, String, null: false
end

class MySchema < GraphQL::Schema
  query(Types::Query)
end

printer = GraphQL::Schema::Printer.new(MySchema)
puts printer.print_type(Types::Post)

Defined Under Namespace

Classes: IntrospectionPrinter

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Language::Printer

#print

Constructor Details

#initialize(schema, context: nil, only: nil, except: nil, introspection: false) ⇒ Printer

Returns a new instance of Printer.

Parameters:

  • schema (GraphQL::Schema)
  • context (Hash) (defaults to: nil)
  • only (<#call(member, ctx)>) (defaults to: nil)
  • except (<#call(member, ctx)>) (defaults to: nil)
  • introspection (Boolean) (defaults to: false)

    Should include the introspection types in the string?


42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/graphql/schema/printer.rb', line 42

def initialize(schema, context: nil, only: nil, except: nil, introspection: false)
  @document_from_schema = GraphQL::Language::DocumentFromSchemaDefinition.new(
    schema,
    context: context,
    only: only,
    except: except,
    include_introspection_types: introspection,
  )

  @document = @document_from_schema.document
  @schema = schema
end

Instance Attribute Details

#schemaObject (readonly)

Returns the value of attribute schema.


35
36
37
# File 'lib/graphql/schema/printer.rb', line 35

def schema
  @schema
end

#wardenObject (readonly)

Returns the value of attribute warden.


35
36
37
# File 'lib/graphql/schema/printer.rb', line 35

def warden
  @warden
end

Class Method Details

Return the GraphQL schema string for the introspection type system


56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/graphql/schema/printer.rb', line 56

def self.print_introspection_schema
  query_root = Class.new(GraphQL::Schema::Object) do
    graphql_name "Root"
    field :throwaway_field, String
  end
  schema = Class.new(GraphQL::Schema) { query(query_root) }

  introspection_schema_ast = GraphQL::Language::DocumentFromSchemaDefinition.new(
    schema,
    except: ->(member, _) { member.graphql_name == "Root" },
    include_introspection_types: true,
    include_built_in_directives: true,
  ).document

  introspection_schema_ast.to_query_string(printer: IntrospectionPrinter.new)
end

Return a GraphQL schema string for the defined types in the schema

Parameters:

  • schema (GraphQL::Schema)
  • context (Hash)
  • only (<#call(member, ctx)>)
  • except (<#call(member, ctx)>)

78
79
80
81
# File 'lib/graphql/schema/printer.rb', line 78

def self.print_schema(schema, **args)
  printer = new(schema, **args)
  printer.print_schema
end

Instance Method Details

Return a GraphQL schema string for the defined types in the schema


84
85
86
# File 'lib/graphql/schema/printer.rb', line 84

def print_schema
  print(@document) + "\n"
end

88
89
90
91
# File 'lib/graphql/schema/printer.rb', line 88

def print_type(type)
  node = @document_from_schema.build_type_definition_node(type)
  print(node)
end