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
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)>)


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



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

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


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