Class: GraphQL::StaticValidation::TypeStack
- Inherits:
-
Object
- Object
- GraphQL::StaticValidation::TypeStack
- Defined in:
- lib/graphql/static_validation/type_stack.rb
Overview
- Ride along with
GraphQL::Language::Visitor
- Track type info, expose it to validators
Defined Under Namespace
Modules: ArgumentStrategy, DirectiveStrategy, FieldStrategy, FragmentDefinitionStrategy, FragmentSpreadStrategy, FragmentWithTypeStrategy, InlineFragmentStrategy, OperationDefinitionStrategy Classes: EnterWithStrategy, LeaveWithStrategy
Constant Summary collapse
- TYPE_INFERRENCE_ROOTS =
These are jumping-off points for infering types down the tree
[ GraphQL::Language::Nodes::OperationDefinition, GraphQL::Language::Nodes::FragmentDefinition, ]
Instance Attribute Summary collapse
-
#argument_definitions ⇒ Array<GraphQL::Node::Argument>
readonly
Arguments which have been entered.
-
#directive_definitions ⇒ Array<GraphQL::Node::Directive>
readonly
Directives are pushed on, then popped off while traversing the tree.
-
#field_definitions ⇒ Array<GraphQL::Field>
readonly
When it enters a field, it's pushed on this stack (useful for nested fields, args).
-
#object_types ⇒ Array<GraphQL::ObjectType, GraphQL::Union, GraphQL::Interface>
readonly
When it enters an object (starting with query or mutation root), it's pushed on this stack.
-
#path ⇒ Array<String>
readonly
Fields which have been entered (by their AST name).
-
#schema ⇒ GraphQL::Schema
readonly
The schema whose types are present in this document.
Instance Method Summary collapse
-
#initialize(schema, visitor) ⇒ TypeStack
constructor
A new instance of TypeStack.
Constructor Details
#initialize(schema, visitor) ⇒ TypeStack
Returns a new instance of TypeStack.
38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/graphql/static_validation/type_stack.rb', line 38 def initialize(schema, visitor) @schema = schema @object_types = [] @field_definitions = [] @directive_definitions = [] @argument_definitions = [] @path = [] PUSH_STRATEGIES.each do |node_class, strategy| visitor[node_class].enter << EnterWithStrategy.new(self, strategy) visitor[node_class].leave << LeaveWithStrategy.new(self, strategy) end end |
Instance Attribute Details
#argument_definitions ⇒ Array<GraphQL::Node::Argument> (readonly)
Returns arguments which have been entered.
31 32 33 |
# File 'lib/graphql/static_validation/type_stack.rb', line 31 def argument_definitions @argument_definitions end |
#directive_definitions ⇒ Array<GraphQL::Node::Directive> (readonly)
Directives are pushed on, then popped off while traversing the tree
28 29 30 |
# File 'lib/graphql/static_validation/type_stack.rb', line 28 def directive_definitions @directive_definitions end |
#field_definitions ⇒ Array<GraphQL::Field> (readonly)
When it enters a field, it's pushed on this stack (useful for nested fields, args). When it exits, it's popped off.
24 25 26 |
# File 'lib/graphql/static_validation/type_stack.rb', line 24 def field_definitions @field_definitions end |
#object_types ⇒ Array<GraphQL::ObjectType, GraphQL::Union, GraphQL::Interface> (readonly)
When it enters an object (starting with query or mutation root), it's pushed on this stack. When it exits, it's popped off.
19 20 21 |
# File 'lib/graphql/static_validation/type_stack.rb', line 19 def object_types @object_types end |
#path ⇒ Array<String> (readonly)
Returns fields which have been entered (by their AST name).
34 35 36 |
# File 'lib/graphql/static_validation/type_stack.rb', line 34 def path @path end |
#schema ⇒ GraphQL::Schema (readonly)
Returns the schema whose types are present in this document.
14 15 16 |
# File 'lib/graphql/static_validation/type_stack.rb', line 14 def schema @schema end |