class Gitlab::Triage::GraphqlQueries::QueryBuilder

Constants

BASE_QUERY

Attributes

conditions[R]
graphql_only[R]
resource_type[R]
source_type[R]

Public Class Methods

new(source_type, resource_type, conditions, graphql_only: false) click to toggle source
# File lib/gitlab/triage/graphql_queries/query_builder.rb, line 9
def initialize(source_type, resource_type, conditions, graphql_only: false)
  @source_type = source_type.to_s.singularize
  @resource_type = resource_type
  @conditions = conditions
  @graphql_only = graphql_only
end

Public Instance Methods

query() click to toggle source
# File lib/gitlab/triage/graphql_queries/query_builder.rb, line 20
def query
  return if resource_fields.empty?

  format(
    BASE_QUERY,
    source_type: source_type,
    resource_type: resource_type.to_s.camelize(:lower),
    resource_fields: resource_fields.join(' '),
    resource_query: resource_query,
    iids_declaration: graphql_only ? nil : ', $iids: [String!]',
    iids_query: graphql_only ? nil : ', iids: $iids'
  )
end
resource_path() click to toggle source
# File lib/gitlab/triage/graphql_queries/query_builder.rb, line 16
def resource_path
  [source_type, resource_type]
end

Private Instance Methods

issues_resource_query(condition, condition_params) click to toggle source
# File lib/gitlab/triage/graphql_queries/query_builder.rb, line 108
def issues_resource_query(condition, condition_params)
  case condition.to_s
  when 'forbidden_labels'
    QueryParamBuilders::LabelsParamBuilder.new('labelName', condition_params, negated: true)
  when 'labels'
    QueryParamBuilders::LabelsParamBuilder.new('labelName', condition_params)
  end
end
merge_requests_resource_query(condition, condition_params) click to toggle source
# File lib/gitlab/triage/graphql_queries/query_builder.rb, line 95
def merge_requests_resource_query(condition, condition_params)
  case condition.to_s
  when 'forbidden_labels'
    QueryParamBuilders::LabelsParamBuilder.new('labels', condition_params, negated: true)
  when 'labels'
    QueryParamBuilders::LabelsParamBuilder.new('labels', condition_params)
  when 'source_branch'
    QueryParamBuilders::BaseParamBuilder.new('sourceBranch', condition_params)
  when 'target_branch'
    QueryParamBuilders::BaseParamBuilder.new('targetBranch', condition_params)
  end
end
resource_fields() click to toggle source
# File lib/gitlab/triage/graphql_queries/query_builder.rb, line 57
def resource_fields
  fields = []

  fields << 'userNotesCount' if conditions.dig(:discussions, :attribute).to_s == 'notes'
  fields << 'userDiscussionsCount' if conditions.dig(:discussions, :attribute).to_s == 'threads'

  if graphql_only
    fields << 'labels { nodes { title } }'
    fields << 'author { id name username }'
    fields << 'assignees { nodes { id name username } }' if conditions.key?(:assignee_member)
    fields << 'upvotes' if conditions.dig(:upvotes, :attribute).to_s == 'upvotes'
    fields << 'downvotes' if conditions.dig(:upvotes, :attribute).to_s == 'downvotes'
    fields << 'mergedAt' if resource_type == 'merge_requests'
  end

  fields
end
resource_query() click to toggle source
# File lib/gitlab/triage/graphql_queries/query_builder.rb, line 75
def resource_query
  condition_queries = []

  condition_queries << QueryParamBuilders::BaseParamBuilder.new('includeSubgroups', true, with_quotes: false) if source_type == 'group'

  conditions.each do |condition, condition_params|
    condition_queries << QueryParamBuilders::DateParamBuilder.new(condition_params) if condition.to_s == 'date'
    condition_queries << QueryParamBuilders::BaseParamBuilder.new('milestoneTitle', condition_params) if condition.to_s == 'milestone'
    condition_queries << QueryParamBuilders::BaseParamBuilder.new('state', condition_params, with_quotes: false) if condition.to_s == 'state'

    condition_queries << merge_requests_resource_query(condition, condition_params) if resource_type == 'merge_requests'
    condition_queries << issues_resource_query(condition, condition_params) if resource_type == 'issues'
  end

  condition_queries
    .compact
    .map(&:build_param)
    .join
end