Class: GraphQL::Language::StaticVisitor
- Inherits:
-
Object
- Object
- GraphQL::Language::StaticVisitor
show all
- Defined in:
- lib/graphql/language/static_visitor.rb
Overview
Like GraphQL::Language::Visitor
except it doesn't support
making changes to the document -- only visiting it as-is.
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of StaticVisitor.
[View source]
7
8
9
|
# File 'lib/graphql/language/static_visitor.rb', line 7
def initialize(document)
@document = document
end
|
Class Method Details
permalink
.make_visit_methods(ast_node_class) ⇒ Object
We don't use alias
here because it breaks super
[View source]
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/graphql/language/static_visitor.rb', line 96
def self.make_visit_methods(ast_node_class)
node_method = ast_node_class.visit_method
children_of_type = ast_node_class.children_of_type
child_visit_method = :"#{node_method}_children"
class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
# The default implementation for visiting an AST node.
# It doesn't _do_ anything, but it continues to visiting the node's children.
# To customize this hook, override one of its make_visit_methods (or the base method?)
# in your subclasses.
#
# @param node [GraphQL::Language::Nodes::AbstractNode] the node being visited
# @param parent [GraphQL::Language::Nodes::AbstractNode, nil] the previously-visited node, or `nil` if this is the root node.
# @return [void]
def #{node_method}(node, parent)
#{
if method_defined?(child_visit_method)
"#{child_visit_method}(node)"
elsif children_of_type
children_of_type.map do |child_accessor, child_class|
"node.#{child_accessor}.each do |child_node|
#{child_class.visit_method}(child_node, node)
end"
end.join("\n")
else
""
end
}
end
RUBY
end
|
Instance Method Details
permalink
#on_argument_children(new_node) ⇒ Object
[View source]
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# File 'lib/graphql/language/static_visitor.rb', line 76
def on_argument_children(new_node)
new_node.children.each do |value_node|
case value_node
when Language::Nodes::VariableIdentifier
on_variable_identifier(value_node, new_node)
when Language::Nodes::InputObject
on_input_object(value_node, new_node)
when Language::Nodes::Enum
on_enum(value_node, new_node)
when Language::Nodes::NullValue
on_null_value(value_node, new_node)
else
raise ArgumentError, "Invariant: unexpected argument value node #{value_node.class} (#{value_node.inspect})"
end
end
end
|
permalink
#on_document_children(document_node) ⇒ Object
[View source]
25
26
27
28
29
30
|
# File 'lib/graphql/language/static_visitor.rb', line 25
def on_document_children(document_node)
document_node.children.each do |child_node|
visit_method = child_node.visit_method
public_send(visit_method, child_node, document_node)
end
end
|
permalink
#on_field_children(new_node) ⇒ Object
[View source]
32
33
34
35
36
37
38
|
# File 'lib/graphql/language/static_visitor.rb', line 32
def on_field_children(new_node)
new_node.arguments.each do |arg_node| on_argument(arg_node, new_node)
end
visit_directives(new_node)
visit_selections(new_node)
end
|
permalink
#on_fragment_definition_children(new_node) ⇒ Object
Also known as:
on_inline_fragment_children
[View source]
61
62
63
64
|
# File 'lib/graphql/language/static_visitor.rb', line 61
def on_fragment_definition_children(new_node)
visit_directives(new_node)
visit_selections(new_node)
end
|
permalink
#on_operation_definition_children(new_node) ⇒ Object
[View source]
68
69
70
71
72
73
74
|
# File 'lib/graphql/language/static_visitor.rb', line 68
def on_operation_definition_children(new_node)
new_node.variables.each do |arg_node|
on_variable_definition(arg_node, new_node)
end
visit_directives(new_node)
visit_selections(new_node)
end
|
This method returns an undefined value.
Visit document
and all children
[View source]
13
14
15
16
17
18
19
20
21
22
23
|
# File 'lib/graphql/language/static_visitor.rb', line 13
def visit
visit_method = @document.visit_method
result = public_send(visit_method, @document, nil)
@result = if result.is_a?(Array)
result.first
else
@document
end
end
|
permalink
#visit_directives(new_node) ⇒ Object
[View source]
40
41
42
43
44
|
# File 'lib/graphql/language/static_visitor.rb', line 40
def visit_directives(new_node)
new_node.directives.each do |dir_node|
on_directive(dir_node, new_node)
end
end
|
permalink
#visit_selections(new_node) ⇒ Object
[View source]
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/graphql/language/static_visitor.rb', line 46
def visit_selections(new_node)
new_node.selections.each do |selection|
case selection
when GraphQL::Language::Nodes::Field
on_field(selection, new_node)
when GraphQL::Language::Nodes::InlineFragment
on_inline_fragment(selection, new_node)
when GraphQL::Language::Nodes::FragmentSpread
on_fragment_spread(selection, new_node)
else
raise ArgumentError, "Invariant: unexpected field selection #{selection.class} (#{selection.inspect})"
end
end
end
|