Class: Gitlab::EtagCaching::Router::Graphql

Inherits:
Object
  • Object
show all
Extended by:
Helpers
Defined in:
lib/gitlab/etag_caching/router/graphql.rb

Constant Summary collapse

GRAPHQL_ETAG_RESOURCE_HEADER =
'X-GITLAB-GRAPHQL-RESOURCE-ETAG'
ROUTES =
[
  [
    %r{\Apipelines/id/\d+\z},
    'pipelines_graph',
    'continuous_integration'
  ],
  [
    %r(\Apipelines/sha/\w{#{Gitlab::Git::Commit::MIN_SHA_LENGTH},#{Gitlab::Git::Commit::MAX_SHA_LENGTH}}\z)o,
    'ci_editor',
    'pipeline_composition'
  ],
  [
    %r{\Aon_demand_scan/counts/},
    'on_demand_scans',
    'dynamic_application_security_testing'
  ],
  [
    %r{\A/projects/.+/-/environments.json\z},
    'environment_details',
    'continuous_delivery'
  ]
].map { |attrs| build_graphql_route(*attrs) }.freeze

Class Method Summary collapse

Methods included from Helpers

build_graphql_route, build_rails_route

Class Method Details

.cache_key(request) ⇒ Object



42
43
44
45
46
47
# File 'lib/gitlab/etag_caching/router/graphql.rb', line 42

def self.cache_key(request)
  [
    request.path,
    request.headers[GRAPHQL_ETAG_RESOURCE_HEADER]
  ].compact.join(':')
end

.match(request) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/gitlab/etag_caching/router/graphql.rb', line 33

def self.match(request)
  return unless request.path_info == graphql_api_path

  graphql_resource = request.headers[GRAPHQL_ETAG_RESOURCE_HEADER]
  return unless graphql_resource

  ROUTES.find { |route| route.match(graphql_resource) }
end