diff options
Diffstat (limited to 'lib/gitlab/graphql/docs/helper.rb')
-rw-r--r-- | lib/gitlab/graphql/docs/helper.rb | 53 |
1 files changed, 26 insertions, 27 deletions
diff --git a/lib/gitlab/graphql/docs/helper.rb b/lib/gitlab/graphql/docs/helper.rb index ad9e08e189c..e9ff85d9ca9 100644 --- a/lib/gitlab/graphql/docs/helper.rb +++ b/lib/gitlab/graphql/docs/helper.rb @@ -27,33 +27,36 @@ module Gitlab MD end - def render_name_and_description(object) - content = "### #{object[:name]}\n" + def render_name_and_description(object, level = 3) + content = [] + + content << "#{'#' * level} `#{object[:name]}`" if object[:description].present? - content += "\n#{object[:description]}.\n" + desc = object[:description].strip + desc += '.' unless desc.ends_with?('.') + content << desc end - content + content.join("\n\n") end def sorted_by_name(objects) + return [] unless objects.present? + objects.sort_by { |o| o[:name] } end def render_field(field) - '| %s | %s | %s |' % [ - render_name(field), - render_field_type(field[:type][:info]), - render_description(field) - ] + row(render_name(field), render_field_type(field[:type]), render_description(field)) end def render_enum_value(value) - '| %s | %s |' % [ - render_name(value), - render_description(value) - ] + row(render_name(value), render_description(value)) + end + + def row(*values) + "| #{values.join(' | ')} |" end def render_name(object) @@ -70,27 +73,19 @@ module Gitlab "**Deprecated:** #{object[:deprecation_reason]}" end - # Some fields types are arrays of other types and are displayed - # on docs wrapped in square brackets, for example: [String!]. - # This makes GitLab docs renderer thinks they are links so here - # we change them to be rendered as: String! => Array. def render_field_type(type) - array_type = type[/\[(.+)\]/, 1] + "[`#{type[:info]}`](##{type[:name].downcase})" + end - if array_type - "#{array_type} => Array" - else - type - end + def render_return_type(query) + "Returns #{render_field_type(query[:type])}.\n" end # We are ignoring connections and built in types for now, # they should be added when queries are generated. def objects object_types = graphql_object_types.select do |object_type| - !object_type[:name]["Connection"] && - !object_type[:name]["Edge"] && - !object_type[:name]["__"] + !object_type[:name]["__"] end object_types.each do |type| @@ -98,10 +93,14 @@ module Gitlab end end + def queries + graphql_operation_types.find { |type| type[:name] == 'Query' }.to_h.values_at(:fields, :connections).flatten + end + # We ignore the built-in enum types. def enums graphql_enum_types.select do |enum_type| - !enum_type[:name].in?(%w(__DirectiveLocation __TypeKind)) + !enum_type[:name].in?(%w[__DirectiveLocation __TypeKind]) end end end |