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?

[View source]

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

[View source]

52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 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) {
    use GraphQL::Schema::Visibility
    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)>)
[View source]

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

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

[View source]

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

def print_schema
  print(@document) + "\n"
end
[View source]

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

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