debian-mirror-gitlab/lib/gitlab/graphql/docs/helper.rb

110 lines
3.3 KiB
Ruby
Raw Normal View History

2019-09-30 21:07:59 +05:30
# frozen_string_literal: true
return if Rails.env.production?
module Gitlab
module Graphql
module Docs
# Helper with functions to be used by HAML templates
# This includes graphql-docs gem helpers class.
# You can check the included module on: https://github.com/gjtorikian/graphql-docs/blob/v1.6.0/lib/graphql-docs/helpers.rb
module Helper
include GraphQLDocs::Helpers
def auto_generated_comment
<<-MD.strip_heredoc
2021-02-22 17:27:13 +05:30
---
stage: Plan
group: Project Management
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
---
2019-09-30 21:07:59 +05:30
<!---
This documentation is auto generated by a script.
Please do not edit this file directly, check compile_docs task on lib/tasks/gitlab/graphql.rake.
--->
MD
end
2021-04-17 20:07:23 +05:30
def render_name_and_description(object, level = 3)
content = []
content << "#{'#' * level} `#{object[:name]}`"
2020-11-24 15:15:51 +05:30
if object[:description].present?
2021-04-17 20:07:23 +05:30
desc = object[:description].strip
desc += '.' unless desc.ends_with?('.')
content << desc
2020-11-24 15:15:51 +05:30
end
2021-04-17 20:07:23 +05:30
content.join("\n\n")
2020-11-24 15:15:51 +05:30
end
def sorted_by_name(objects)
2021-04-17 20:07:23 +05:30
return [] unless objects.present?
2020-11-24 15:15:51 +05:30
objects.sort_by { |o| o[:name] }
2020-03-13 15:44:24 +05:30
end
2020-04-08 14:13:33 +05:30
def render_field(field)
2021-04-17 20:07:23 +05:30
row(render_name(field), render_field_type(field[:type]), render_description(field))
2020-04-08 14:13:33 +05:30
end
2020-11-24 15:15:51 +05:30
def render_enum_value(value)
2021-04-17 20:07:23 +05:30
row(render_name(value), render_description(value))
end
def row(*values)
"| #{values.join(' | ')} |"
2020-11-24 15:15:51 +05:30
end
def render_name(object)
rendered_name = "`#{object[:name]}`"
rendered_name += ' **{warning-solid}**' if object[:is_deprecated]
2020-04-08 14:13:33 +05:30
rendered_name
end
2020-11-24 15:15:51 +05:30
# Returns the object description. If the object has been deprecated,
2020-04-08 14:13:33 +05:30
# the deprecation reason will be returned in place of the description.
2020-11-24 15:15:51 +05:30
def render_description(object)
return object[:description] unless object[:is_deprecated]
2020-04-08 14:13:33 +05:30
2020-11-24 15:15:51 +05:30
"**Deprecated:** #{object[:deprecation_reason]}"
2020-04-08 14:13:33 +05:30
end
2019-09-30 21:07:59 +05:30
def render_field_type(type)
2021-04-17 20:07:23 +05:30
"[`#{type[:info]}`](##{type[:name].downcase})"
end
2019-09-30 21:07:59 +05:30
2021-04-17 20:07:23 +05:30
def render_return_type(query)
"Returns #{render_field_type(query[:type])}.\n"
2019-09-30 21:07:59 +05:30
end
# We are ignoring connections and built in types for now,
# they should be added when queries are generated.
def objects
2021-01-29 00:20:46 +05:30
object_types = graphql_object_types.select do |object_type|
2021-04-17 20:07:23 +05:30
!object_type[:name]["__"]
2019-09-30 21:07:59 +05:30
end
2021-01-29 00:20:46 +05:30
object_types.each do |type|
type[:fields] += type[:connections]
end
2019-09-30 21:07:59 +05:30
end
2020-11-24 15:15:51 +05:30
2021-04-17 20:07:23 +05:30
def queries
graphql_operation_types.find { |type| type[:name] == 'Query' }.to_h.values_at(:fields, :connections).flatten
end
2020-11-24 15:15:51 +05:30
# We ignore the built-in enum types.
def enums
graphql_enum_types.select do |enum_type|
2021-04-17 20:07:23 +05:30
!enum_type[:name].in?(%w[__DirectiveLocation __TypeKind])
2020-11-24 15:15:51 +05:30
end
end
2019-09-30 21:07:59 +05:30
end
end
end
end