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

Constant Summary

Constants inherited from Language::Printer

Language::Printer::OMISSION

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Language::Printer

#print

Constructor Details

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

Returns a new instance of Printer.

Parameters:

  • schema (GraphQL::Schema)
  • context (Hash) (defaults to: nil)
  • introspection (Boolean) (defaults to: false)

    Should include the introspection types in the string?



40
41
42
43
44
45
46
47
48
49
# File 'lib/graphql/schema/printer.rb', line 40

def initialize(schema, context: nil, introspection: false)
  @document_from_schema = GraphQL::Language::DocumentFromSchemaDefinition.new(
    schema,
    context: context,
    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



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

def self.print_introspection_schema
  query_root = Class.new(GraphQL::Schema::Object) do
    graphql_name "Root"
    field :throwaway_field, String
    def self.visible?(ctx)
      false
    end
  end
  schema = Class.new(GraphQL::Schema) {
    query(query_root)
    def self.visible?(member, _ctx)
      member.graphql_name != "Root"
    end
  }

  introspection_schema_ast = GraphQL::Language::DocumentFromSchemaDefinition.new(
    schema,
    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)>)


81
82
83
84
# File 'lib/graphql/schema/printer.rb', line 81

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



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

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


91
92
93
94
# File 'lib/graphql/schema/printer.rb', line 91

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