module Apigen::Formats::OpenAPI::V3
OpenAPI
3 generator.
Public Class Methods
generate(api)
click to toggle source
# File lib/apigen/formats/openapi.rb, line 15 def generate(api) # TODO: Allow overriding any of the hardcoded elements. { 'openapi' => '3.0.0', 'info' => { 'version' => '1.0.0', 'title' => 'API', 'description' => api.description, 'termsOfService' => '', 'contact' => { 'name' => '' }, 'license' => { 'name' => '' } }, 'servers' => [ { 'url' => 'http://localhost' } ], 'paths' => paths(api), 'components' => { 'schemas' => definitions(api) } }.to_yaml end
Private Class Methods
input(api, property)
click to toggle source
# File lib/apigen/formats/openapi.rb, line 89 def input(api, property) parameter = { 'required' => true, 'content' => { 'application/json' => { 'schema' => schema(api, property.type) } } } add_description(parameter, property.description) add_example(parameter, property.example) parameter end
model_ref(type)
click to toggle source
# File lib/apigen/formats/openapi.rb, line 117 def model_ref(type) "#/components/schemas/#{type}" end
path_parameter(api, name, property)
click to toggle source
# File lib/apigen/formats/openapi.rb, line 65 def path_parameter(api, name, property) parameter = { 'in' => 'path', 'name' => name.to_s, 'required' => true, 'schema' => schema(api, property.type) } add_description(parameter, property.description) add_example(parameter, property.example) parameter end
paths(api)
click to toggle source
# File lib/apigen/formats/openapi.rb, line 45 def paths(api) hash = {} api.endpoints.each do |endpoint| parameters = [] parameters.concat(endpoint.path_parameters.properties.map { |name, property| path_parameter(api, name, property) }) parameters.concat(endpoint.query_parameters.properties.map { |name, property| query_parameter(api, name, property) }) responses = endpoint.outputs.map { |output| response(api, output) }.to_h operation = { 'operationId' => endpoint.name.to_s, 'parameters' => parameters, 'responses' => responses } add_description(operation, endpoint.description) operation['requestBody'] = input(api, endpoint.input) if endpoint.input hash[endpoint.path] ||= {} hash[endpoint.path][endpoint.method.to_s] = operation end hash end
query_parameter(api, name, property)
click to toggle source
# File lib/apigen/formats/openapi.rb, line 77 def query_parameter(api, name, property) parameter = { 'in' => 'query', 'name' => name.to_s, 'required' => property.required?, 'schema' => schema(api, property.type) } add_description(parameter, property.description) add_example(parameter, property.example) parameter end
response(api, output)
click to toggle source
# File lib/apigen/formats/openapi.rb, line 103 def response(api, output) response = {} add_description(response, output.description) add_example(response, output.example) if output.type != Apigen::PrimaryType.new(:void) response['content'] = { 'application/json' => { 'schema' => schema(api, output.type) } } end [output.status.to_s, response] end
supports_discriminator?()
click to toggle source
# File lib/apigen/formats/openapi.rb, line 121 def supports_discriminator? true end