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

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2019-01-30 22:00:30 +0300
committerLin Jen-Shin <godfat@godfat.org>2019-02-14 10:52:17 +0300
commit91e9e50a1153021257abaa528498d7a82cc3350f (patch)
tree654dd11658da179f0bd4bd0eea5e4d63718c99b1 /app/graphql/resolvers/merge_requests_resolver.rb
parent1322146bbf5c76403db10969f1af6540717b1cdf (diff)
Add field mergeRequests for project in GraphQL
And fix the tests so that it won't run into circular paths.
Diffstat (limited to 'app/graphql/resolvers/merge_requests_resolver.rb')
-rw-r--r--app/graphql/resolvers/merge_requests_resolver.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/app/graphql/resolvers/merge_requests_resolver.rb b/app/graphql/resolvers/merge_requests_resolver.rb
new file mode 100644
index 00000000000..15055db633a
--- /dev/null
+++ b/app/graphql/resolvers/merge_requests_resolver.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+module Resolvers
+ class MergeRequestsResolver < BaseResolver
+ argument :iid, GraphQL::ID_TYPE,
+ required: false,
+ description: 'The IID of the merge request, e.g., "1"'
+
+ argument :iids, [GraphQL::ID_TYPE],
+ required: false,
+ description: 'The list of IIDs of issues, e.g., [1, 2]'
+
+ type Types::MergeRequestType, null: true
+
+ alias_method :project, :object
+
+ def resolve(**args)
+ return unless project.present?
+
+ args[:iids] ||= [args[:iid]]
+
+ args[:iids].map(&method(:batch_load))
+ .select(&:itself) # .compact doesn't work on BatchLoader
+ end
+
+ # rubocop: disable CodeReuse/ActiveRecord
+ def batch_load(iid)
+ BatchLoader.for(iid.to_s).batch(key: project) do |iids, loader, args|
+ args[:key].merge_requests.where(iid: iids).each do |mr|
+ loader.call(mr.iid.to_s, mr)
+ end
+ end
+ end
+ # rubocop: enable CodeReuse/ActiveRecord
+ end
+end