Class: GraphQL::Schema::Printer Private

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

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

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

Examples:

print your schema to standard output (via helper)

MySchema = GraphQL::Schema.define(query: QueryType)
puts GraphQL::Schema::Printer.print_schema(MySchema)

print your schema to standard output

MySchema = GraphQL::Schema.define(query: QueryType)
puts GraphQL::Schema::Printer.new(MySchema).print_schema

print a single type to standard output

query_root = GraphQL::ObjectType.define do
  name "Query"
  description "The query root of this schema"

  field :post do
    type post_type
    resolve ->(obj, args, ctx) { Post.find(args["id"]) }
  end
end

post_type = GraphQL::ObjectType.define do
  name "Post"
  description "A blog post"

  field :id, !types.ID
  field :title, !types.String
  field :body, !types.String
end

MySchema = GraphQL::Schema.define(query: query_root)

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

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Printer

Parameters:

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

    Should include the introspection types in the string?



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/graphql/schema/printer.rb', line 47

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)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



40
41
42
# File 'lib/graphql/schema/printer.rb', line 40

def schema
  @schema
end

#wardenObject (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



40
41
42
# File 'lib/graphql/schema/printer.rb', line 40

def warden
  @warden
end

Class Method Details

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Return the GraphQL schema string for the introspection type system



62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/graphql/schema/printer.rb', line 62

def self.print_introspection_schema
  query_root = ObjectType.define(name: "Root")
  schema = GraphQL::Schema.define(query: query_root)

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

  introspection_schema_ast.to_query_string(printer: IntrospectionPrinter.new)
end

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/graphql/schema/printer.rb', line 96

def print_directive(directive)
  if directive.name == "deprecated"
    reason = directive.arguments.find { |arg| arg.name == "reason" }

    if reason.value == GraphQL::Directive::DEFAULT_DEPRECATION_REASON
      "@deprecated"
    else
      "@deprecated(reason: #{reason.value.to_s.inspect})"
    end
  else
    super
  end
end

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



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

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