Module: Gitlab::Graphql::VersionFilter::IntroducedTracer

Defined in:
lib/gitlab/graphql/version_filter/introduced_tracer.rb

Overview

rubocop:disable Gitlab/ModuleWithInstanceVariables – we need to keep the original query for the fallback later

Instance Method Summary collapse

Instance Method Details

#execute_query(query:) ⇒ Object



19
20
21
22
23
24
25
26
27
28
# File 'lib/gitlab/graphql/version_filter/introduced_tracer.rb', line 19

def execute_query(query:)
  return super unless @contain_future_fields

  # Use the original query during execution so we can fallback to null for the missing fields
  query.instance_variable_set(:@document, @original_query_document)
  query.send(:prepare_ast) # rubocop:disable GitlabSecurity/PublicSend -- we need to call private method
  query.context[:contain_future_fields] = @contain_future_fields

  super
end

#parse(query_string:) ⇒ Object



8
9
10
11
12
13
14
15
16
17
# File 'lib/gitlab/graphql/version_filter/introduced_tracer.rb', line 8

def parse(query_string:)
  @original_query_document = super
  @contain_future_fields = false

  filter = Gitlab::Graphql::VersionFilter::FutureFieldFilter.new(@original_query_document.dup)

  filter.visit.tap do
    @contain_future_fields = filter.contain_future_fields
  end
end