From 744f6ed12bf1ce543b4c903d27cfd8362e91795d Mon Sep 17 00:00:00 2001
From: Phil Hughes <me@iamphill.com>
Date: Thu, 13 Dec 2018 10:12:13 +0000
Subject: [PATCH] Enable GraphQL API endpoint

---
 app/controllers/graphql_controller.rb     | 2 +-
 app/views/shared/issuable/_form.html.haml | 2 +-
 config/routes/api.rb                      | 2 +-
 lib/constraints/feature_constrainer.rb    | 8 ++++----
 lib/gitlab/graphql.rb                     | 4 ++++
 5 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/app/controllers/graphql_controller.rb b/app/controllers/graphql_controller.rb
index 40f45b61fb9..3ef03bc9622 100644
--- a/app/controllers/graphql_controller.rb
+++ b/app/controllers/graphql_controller.rb
@@ -43,6 +43,6 @@ class GraphqlController < ApplicationController
   end
 
   def check_graphql_feature_flag!
-    render_404 unless Feature.enabled?(:graphql, default_enabled: true)
+    render_404 unless Gitlab::Graphql.enabled?
   end
 end
diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml
index 81624fb1609..c6a391ae563 100644
--- a/app/views/shared/issuable/_form.html.haml
+++ b/app/views/shared/issuable/_form.html.haml
@@ -17,7 +17,7 @@
 
   = render 'shared/issuable/form/template_selector', issuable: issuable
   = render 'shared/issuable/form/title', issuable: issuable, form: form, has_wip_commits: commits && commits.detect(&:work_in_progress?)
-- if Feature.enabled?(:graphql, default_enabled: true)
+- if Gitlab::Graphql.enabled?
   #js-suggestions{ data: { project_path: @project.full_path } }
 
 = render 'shared/form_elements/description', model: issuable, form: form, project: project
diff --git a/config/routes/api.rb b/config/routes/api.rb
index b1aebf4d606..5398e726398 100644
--- a/config/routes/api.rb
+++ b/config/routes/api.rb
@@ -1,4 +1,4 @@
-constraints(::Constraints::FeatureConstrainer.new(:graphql)) do
+constraints(::Constraints::FeatureConstrainer.new(:graphql, nil, true)) do
   post '/api/graphql', to: 'graphql#execute'
   mount GraphiQL::Rails::Engine, at: '/-/graphql-explorer', graphql_path: '/api/graphql'
 end
diff --git a/lib/constraints/feature_constrainer.rb b/lib/constraints/feature_constrainer.rb
index ca4376a9d38..5f8d97c8cdc 100644
--- a/lib/constraints/feature_constrainer.rb
+++ b/lib/constraints/feature_constrainer.rb
@@ -2,14 +2,14 @@
 
 module Constraints
   class FeatureConstrainer
-    attr_reader :feature
+    attr_reader :feature, :thing, :default_enabled
 
-    def initialize(feature)
-      @feature = feature
+    def initialize(feature, thing, default_enabled)
+      @feature, @thing, @default_enabled = feature, thing, default_enabled
     end
 
     def matches?(_request)
-      Feature.enabled?(feature)
+      Feature.enabled?(feature, @thing, default_enabled: true)
     end
   end
 end
diff --git a/lib/gitlab/graphql.rb b/lib/gitlab/graphql.rb
index 74c04e5380e..8a59e83974f 100644
--- a/lib/gitlab/graphql.rb
+++ b/lib/gitlab/graphql.rb
@@ -3,5 +3,9 @@
 module Gitlab
   module Graphql
     StandardGraphqlError = Class.new(StandardError)
+
+    def self.enabled?
+      Feature.enabled?(:graphql, default_enabled: true)
+    end
   end
 end
-- 
2.30.9