Class: GraphQL::Schema
- Inherits:
-
Object
- Object
- GraphQL::Schema
- Extended by:
- Forwardable
- Defined in:
- lib/graphql/schema.rb,
lib/graphql/schema/printer.rb,
lib/graphql/schema/type_map.rb,
lib/graphql/schema/validation.rb,
lib/graphql/schema/reduce_types.rb,
lib/graphql/schema/possible_types.rb,
lib/graphql/schema/type_expression.rb,
lib/graphql/schema/middleware_chain.rb,
lib/graphql/schema/rescue_middleware.rb,
lib/graphql/schema/invalid_type_error.rb,
lib/graphql/schema/timeout_middleware.rb,
lib/graphql/schema/catchall_middleware.rb
Overview
A GraphQL schema which may be queried with Query.
Defined Under Namespace
Modules: CatchallMiddleware, Printer, ReduceTypes, TypeExpression Classes: InvalidTypeError, MiddlewareChain, PossibleTypes, RescueMiddleware, TimeoutMiddleware, TypeMap, Validation
Constant Summary collapse
- DIRECTIVES =
[GraphQL::Directive::SkipDirective, GraphQL::Directive::IncludeDirective]
- DYNAMIC_FIELDS =
["__type", "__typename", "__schema"]
Instance Attribute Summary collapse
-
#directives ⇒ Object
readonly
Returns the value of attribute directives.
-
#max_complexity ⇒ Object
Returns the value of attribute max_complexity.
-
#max_depth ⇒ Object
Returns the value of attribute max_depth.
-
#middleware ⇒ Array<#call>
readonly
Middlewares suitable for MiddlewareChain, applied to fields during execution.
-
#mutation ⇒ Object
readonly
Returns the value of attribute mutation.
-
#mutation_execution_strategy ⇒ Object
Override these if you don’t want the default executor:.
-
#node_identification ⇒ GraphQL::Relay::GlobalNodeIdentification
The node identification instance for this schema, when using Relay.
-
#query ⇒ Object
readonly
Returns the value of attribute query.
-
#query_analyzers ⇒ Object
readonly
Returns the value of attribute query_analyzers.
-
#query_execution_strategy ⇒ Object
Override these if you don’t want the default executor:.
-
#static_validator ⇒ Object
readonly
Returns the value of attribute static_validator.
-
#subscription ⇒ Object
readonly
Returns the value of attribute subscription.
-
#subscription_execution_strategy ⇒ Object
Override these if you don’t want the default executor:.
Instance Method Summary collapse
-
#execute(*args) ⇒ Hash
Execute a query on itself.
- #execution_strategy_for_operation(operation) ⇒ Object
-
#get_field(parent_type, field_name) ⇒ Object
Resolve field named ‘field_name` for type `parent_type`.
-
#initialize(query:, mutation: nil, subscription: nil, max_depth: nil, max_complexity: nil, types: []) ⇒ Schema
constructor
A new instance of Schema.
-
#possible_types(type_defn) ⇒ Array<GraphQL::ObjectType>
Types which belong to ‘type_defn` in this schema.
- #root_type_for_operation(operation) ⇒ Object
- #type_from_ast(ast_node) ⇒ Object
-
#types ⇒ GraphQL::Schema::TypeMap
‘{ name => type }` pairs of types in this schema.
Constructor Details
#initialize(query:, mutation: nil, subscription: nil, max_depth: nil, max_complexity: nil, types: []) ⇒ Schema
Returns a new instance of Schema.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/graphql/schema.rb', line 40 def initialize(query:, mutation: nil, subscription: nil, max_depth: nil, max_complexity: nil, types: []) @query = query @mutation = mutation @subscription = subscription @max_depth = max_depth @max_complexity = max_complexity @orphan_types = types @directives = DIRECTIVES.reduce({}) { |m, d| m[d.name] = d; m } @static_validator = GraphQL::StaticValidation::Validator.new(schema: self) @rescue_middleware = GraphQL::Schema::RescueMiddleware.new @middleware = [@rescue_middleware] @query_analyzers = [] # Default to the built-in execution strategy: self.query_execution_strategy = GraphQL::Query::SerialExecution self.mutation_execution_strategy = GraphQL::Query::SerialExecution self.subscription_execution_strategy = GraphQL::Query::SerialExecution end |
Instance Attribute Details
#directives ⇒ Object (readonly)
Returns the value of attribute directives.
20 21 22 |
# File 'lib/graphql/schema.rb', line 20 def directives @directives end |
#max_complexity ⇒ Object
Returns the value of attribute max_complexity.
22 23 24 |
# File 'lib/graphql/schema.rb', line 22 def max_complexity @max_complexity end |
#max_depth ⇒ Object
Returns the value of attribute max_depth.
21 22 23 |
# File 'lib/graphql/schema.rb', line 21 def max_depth @max_depth end |
#middleware ⇒ Array<#call> (readonly)
Returns Middlewares suitable for MiddlewareChain, applied to fields during execution.
33 34 35 |
# File 'lib/graphql/schema.rb', line 33 def middleware @middleware end |
#mutation ⇒ Object (readonly)
Returns the value of attribute mutation.
20 21 22 |
# File 'lib/graphql/schema.rb', line 20 def mutation @mutation end |
#mutation_execution_strategy ⇒ Object
Override these if you don’t want the default executor:
25 26 27 |
# File 'lib/graphql/schema.rb', line 25 def mutation_execution_strategy @mutation_execution_strategy end |
#node_identification ⇒ GraphQL::Relay::GlobalNodeIdentification
Returns the node identification instance for this schema, when using Relay.
30 31 32 |
# File 'lib/graphql/schema.rb', line 30 def node_identification @node_identification end |
#query ⇒ Object (readonly)
Returns the value of attribute query.
20 21 22 |
# File 'lib/graphql/schema.rb', line 20 def query @query end |
#query_analyzers ⇒ Object (readonly)
Returns the value of attribute query_analyzers.
20 21 22 |
# File 'lib/graphql/schema.rb', line 20 def query_analyzers @query_analyzers end |
#query_execution_strategy ⇒ Object
Override these if you don’t want the default executor:
25 26 27 |
# File 'lib/graphql/schema.rb', line 25 def query_execution_strategy @query_execution_strategy end |
#static_validator ⇒ Object (readonly)
Returns the value of attribute static_validator.
20 21 22 |
# File 'lib/graphql/schema.rb', line 20 def static_validator @static_validator end |
#subscription ⇒ Object (readonly)
Returns the value of attribute subscription.
20 21 22 |
# File 'lib/graphql/schema.rb', line 20 def subscription @subscription end |
#subscription_execution_strategy ⇒ Object
Override these if you don’t want the default executor:
25 26 27 |
# File 'lib/graphql/schema.rb', line 25 def subscription_execution_strategy @subscription_execution_strategy end |
Instance Method Details
#execute(*args) ⇒ Hash
Execute a query on itself. See Query#initialize for arguments.
71 72 73 74 |
# File 'lib/graphql/schema.rb', line 71 def execute(*args) query = GraphQL::Query.new(self, *args) query.result end |
#execution_strategy_for_operation(operation) ⇒ Object
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/graphql/schema.rb', line 117 def execution_strategy_for_operation(operation) case operation when "query" query_execution_strategy when "mutation" mutation_execution_strategy when "subscription" subscription_execution_strategy else raise ArgumentError, "unknown operation type: #{operation}" end end |
#get_field(parent_type, field_name) ⇒ Object
Resolve field named ‘field_name` for type `parent_type`. Handles dynamic fields `__typename`, `__type` and `__schema`, too
78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/graphql/schema.rb', line 78 def get_field(parent_type, field_name) defined_field = parent_type.get_field(field_name) if defined_field defined_field elsif field_name == "__typename" GraphQL::Introspection::TypenameField.create(parent_type) elsif field_name == "__schema" && parent_type == query GraphQL::Introspection::SchemaField.create(self) elsif field_name == "__type" && parent_type == query GraphQL::Introspection::TypeByNameField.create(self.types) else nil end end |
#possible_types(type_defn) ⇒ Array<GraphQL::ObjectType>
Returns types which belong to ‘type_defn` in this schema.
99 100 101 102 |
# File 'lib/graphql/schema.rb', line 99 def possible_types(type_defn) @interface_possible_types ||= GraphQL::Schema::PossibleTypes.new(self) @interface_possible_types.possible_types(type_defn) end |
#root_type_for_operation(operation) ⇒ Object
104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/graphql/schema.rb', line 104 def root_type_for_operation(operation) case operation when "query" query when "mutation" mutation when "subscription" subscription else raise ArgumentError, "unknown operation type: #{operation}" end end |
#type_from_ast(ast_node) ⇒ Object
93 94 95 |
# File 'lib/graphql/schema.rb', line 93 def type_from_ast(ast_node) GraphQL::Schema::TypeExpression.build_type(self, ast_node) end |
#types ⇒ GraphQL::Schema::TypeMap
Returns ‘{ name => type }` pairs of types in this schema.
61 62 63 64 65 66 |
# File 'lib/graphql/schema.rb', line 61 def types @types ||= begin all_types = @orphan_types + [query, mutation, subscription, GraphQL::Introspection::SchemaType] GraphQL::Schema::ReduceTypes.reduce(all_types.compact) end end |