Module: GraphQL::StaticValidation::BaseVisitor::ContextMethods

Defined in:
lib/graphql/static_validation/base_visitor.rb

Instance Method Summary collapse

Instance Method Details

#argument_definitionGraphQL::Argument?

Returns The most-recently-entered GraphQL::Argument, if currently inside one.

Returns:

  • (GraphQL::Argument, nil)

    The most-recently-entered GraphQL::Argument, if currently inside one



180
181
182
183
184
# File 'lib/graphql/static_validation/base_visitor.rb', line 180

def argument_definition
  # Don't get the _last_ one because that's the current one.
  # Get the second-to-last one, which is the parent of the current one.
  @argument_definitions[-2]
end

#directive_definitionGraphQL::Directive?

Returns The most-recently-entered GraphQL::Directive, if currently inside one.

Returns:

  • (GraphQL::Directive, nil)

    The most-recently-entered GraphQL::Directive, if currently inside one



175
176
177
# File 'lib/graphql/static_validation/base_visitor.rb', line 175

def directive_definition
  @directive_definitions.last
end

#field_definitionGraphQL::Field?

Returns The most-recently-entered GraphQL::Field, if currently inside one.

Returns:

  • (GraphQL::Field, nil)

    The most-recently-entered GraphQL::Field, if currently inside one



170
171
172
# File 'lib/graphql/static_validation/base_visitor.rb', line 170

def field_definition
  @field_definitions.last
end

#on_argument(node, parent) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/graphql/static_validation/base_visitor.rb', line 119

def on_argument(node, parent)
  argument_defn = if (arg = @argument_definitions.last)
    arg_type = arg.type.unwrap
    if arg_type.kind.input_object?
      arg_type.arguments[node.name]
    else
      nil
    end
  elsif (directive_defn = @directive_definitions.last)
    directive_defn.arguments[node.name]
  elsif (field_defn = @field_definitions.last)
    field_defn.arguments[node.name]
  else
    nil
  end

  @argument_definitions.push(argument_defn)
  @path.push(node.name)
  super
  @argument_definitions.pop
  @path.pop
end

#on_directive(node, parent) ⇒ Object



112
113
114
115
116
117
# File 'lib/graphql/static_validation/base_visitor.rb', line 112

def on_directive(node, parent)
  directive_defn = @schema.directives[node.name]
  @directive_definitions.push(directive_defn)
  super
  @directive_definitions.pop
end

#on_field(node, parent) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/graphql/static_validation/base_visitor.rb', line 95

def on_field(node, parent)
  parent_type = @object_types.last
  field_definition = @schema.get_field(parent_type, node.name)
  @field_definitions.push(field_definition)
  if !field_definition.nil?
    next_object_type = field_definition.type.unwrap
    push_type(next_object_type)
  else
    push_type(nil)
  end
  @path.push(node.alias || node.name)
  super
  @field_definitions.pop
  @object_types.pop
  @path.pop
end

#on_fragment_definition(node, parent) ⇒ Object



81
82
83
84
85
86
# File 'lib/graphql/static_validation/base_visitor.rb', line 81

def on_fragment_definition(node, parent)
  on_fragment_with_type(node) do
    @path.push("fragment #{node.name}")
    super
  end
end

#on_fragment_spread(node, parent) ⇒ Object



142
143
144
145
146
# File 'lib/graphql/static_validation/base_visitor.rb', line 142

def on_fragment_spread(node, parent)
  @path.push("... #{node.name}")
  super
  @path.pop
end

#on_inline_fragment(node, parent) ⇒ Object



88
89
90
91
92
93
# File 'lib/graphql/static_validation/base_visitor.rb', line 88

def on_inline_fragment(node, parent)
  on_fragment_with_type(node) do
    @path.push("...#{node.type ? " on #{node.type.to_query_string}" : ""}")
    super
  end
end

#on_input_object(node, parent) ⇒ Object



148
149
150
151
152
153
154
155
156
157
# File 'lib/graphql/static_validation/base_visitor.rb', line 148

def on_input_object(node, parent)
  arg_defn = @argument_definitions.last
  if arg_defn && arg_defn.type.list?
    @path.push(parent.children.index(node))
    super
    @path.pop
  else
    super
  end
end

#on_operation_definition(node, parent) ⇒ Object



72
73
74
75
76
77
78
79
# File 'lib/graphql/static_validation/base_visitor.rb', line 72

def on_operation_definition(node, parent)
  object_type = @schema.root_type_for_operation(node.operation_type)
  push_type(object_type)
  @path.push("#{node.operation_type}#{node.name ? " #{node.name}" : ""}")
  super
  @object_types.pop
  @path.pop
end

#parent_type_definitionGraphQL::BaseType

Returns The type which the current type came from.

Returns:



165
166
167
# File 'lib/graphql/static_validation/base_visitor.rb', line 165

def parent_type_definition
  @object_types[-2]
end

#type_definitionGraphQL::BaseType

Returns The current object type.

Returns:



160
161
162
# File 'lib/graphql/static_validation/base_visitor.rb', line 160

def type_definition
  @object_types.last
end