Welcome to mirror list, hosted at ThFree Co, Russian Federation.

router.rb « etag_caching « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 684afc6762a043a01659645c5f13ce8fc9c6655a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# frozen_string_literal: true

module Gitlab
  module EtagCaching
    module Router
      Route = Struct.new(:router, :regexp, :name, :feature_category, :caller_id) do
        delegate :match, to: :regexp
        delegate :cache_key, to: :router
      end

      module Helpers
        def build_route(attrs)
          EtagCaching::Router::Route.new(self, *attrs)
        end

        def build_rails_route(attrs)
          regexp, name, controller, action_name = *attrs
          EtagCaching::Router::Route.new(
            self,
            regexp,
            name,
            controller.feature_category_for_action(action_name).to_s,
            controller.endpoint_id_for_action(action_name).to_s
          )
        end
      end

      # Performing Rails routing match before GraphQL would be more expensive
      # for the GraphQL requests because we need to traverse all of the RESTful
      # route definitions before falling back to GraphQL.
      def self.match(request)
        Router::Graphql.match(request) || Router::Rails.match(request)
      end
    end
  end
end