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



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

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



158
159
160
# File 'lib/graphql/static_validation/base_visitor.rb', line 158

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



153
154
155
# File 'lib/graphql/static_validation/base_visitor.rb', line 153

def field_definition
  @field_definitions.last
end

#on_argument(node, parent) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/graphql/static_validation/base_visitor.rb', line 102

def on_argument(node, parent)
  argument_defn = if (arg = @argument_definitions.last)
    arg_type = arg.type.unwrap
    if arg_type.kind.input_object?
      @context.warden.get_argument(arg_type, node.name)
    else
      nil
    end
  elsif (directive_defn = @directive_definitions.last)
    @context.warden.get_argument(directive_defn, node.name)
  elsif (field_defn = @field_definitions.last)
    @context.warden.get_argument(field_defn, 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



95
96
97
98
99
100
# File 'lib/graphql/static_validation/base_visitor.rb', line 95

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

#on_field(node, parent) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/graphql/static_validation/base_visitor.rb', line 78

def on_field(node, parent)
  parent_type = @object_types.last
  field_definition = @schema.get_field(parent_type, node.name, @context.query.context)
  @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



64
65
66
67
68
69
# File 'lib/graphql/static_validation/base_visitor.rb', line 64

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



125
126
127
128
129
# File 'lib/graphql/static_validation/base_visitor.rb', line 125

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

#on_inline_fragment(node, parent) ⇒ Object



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

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



131
132
133
134
135
136
137
138
139
140
# File 'lib/graphql/static_validation/base_visitor.rb', line 131

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



55
56
57
58
59
60
61
62
# File 'lib/graphql/static_validation/base_visitor.rb', line 55

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:

  • (GraphQL::BaseType)

    The type which the current type came from



148
149
150
# File 'lib/graphql/static_validation/base_visitor.rb', line 148

def parent_type_definition
  @object_types[-2]
end

#type_definitionGraphQL::BaseType

Returns The current object type.

Returns:

  • (GraphQL::BaseType)

    The current object type



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

def type_definition
  @object_types.last
end