Class: Gitlab::GrapeOpenapi::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/gitlab/grape_openapi/generator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Generator

Returns a new instance of Generator.



8
9
10
11
12
13
14
15
# File 'lib/gitlab/grape_openapi/generator.rb', line 8

def initialize(options = {})
  @api_classes = Array(options[:api_classes]).reject do |api_class|
    Gitlab::GrapeOpenapi.configuration.excluded_api_classes.include?(api_class.name)
  end
  @schema_registry = SchemaRegistry.new
  @request_body_registry = RequestBodyRegistry.new
  @tag_registry = TagRegistry.new
end

Instance Attribute Details

#tag_registryObject (readonly)

Returns the value of attribute tag_registry.



6
7
8
# File 'lib/gitlab/grape_openapi/generator.rb', line 6

def tag_registry
  @tag_registry
end

Instance Method Details

#generateObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/gitlab/grape_openapi/generator.rb', line 17

def generate
  initialize_tags

  {
    openapi: '3.0.0',
    info: Gitlab::GrapeOpenapi.configuration.info.to_h,
    tags: tag_registry.tags.sort_by { |t| t.fetch(:name, '') },
    servers: Gitlab::GrapeOpenapi.configuration.servers.map(&:to_h),
    paths: paths,
    components: {
      securitySchemes: security_schemes,
      schemas: schemas
    },
    security: security_schemes.keys.map { |s| { s => [] } }
  }
end

#initialize_tagsObject



40
41
42
43
44
# File 'lib/gitlab/grape_openapi/generator.rb', line 40

def initialize_tags
  @api_classes.each do |api_class|
    Converters::TagConverter.new(api_class, tag_registry).convert
  end
end

#pathsObject



46
47
48
49
# File 'lib/gitlab/grape_openapi/generator.rb', line 46

def paths
  all_routes = @api_classes.flat_map(&:routes)
  Converters::PathConverter.convert(all_routes, @schema_registry, @request_body_registry)
end

#security_schemesObject



34
35
36
37
38
# File 'lib/gitlab/grape_openapi/generator.rb', line 34

def security_schemes
  Gitlab::GrapeOpenapi.configuration.security_schemes.to_h do |scheme|
    [scheme.type, scheme.to_h]
  end
end