class Swagger::Grape::Template

Public Class Methods

extract_all_types(types, all_types = []) click to toggle source
# File lib/ruby-swagger/grape/grape_template.rb, line 44
def self.extract_all_types(types, all_types = [])
  return all_types.uniq if types.length == 0

  new_types = []

  types.each do |type|
    all_types << type.to_s unless all_types.include?(type.to_s)

    grape_type = Swagger::Grape::Type.new(type)

    grape_type.sub_types.each do |new_type|
      unless all_types.include?(new_type.to_s)
        new_types << new_type.to_s
        all_types << new_type.to_s
      end
    end
  end

  extract_all_types(new_types, all_types)
end
generate(base_class) click to toggle source
# File lib/ruby-swagger/grape/grape_template.rb, line 11
def self.generate(base_class)
  swagger_doc = Swagger::Template.generate

  routes = Swagger::Grape::Routes.new(base_class.routes)

  swagger_doc.paths = routes.to_swagger
  swagger_doc.definitions = Swagger::Data::Definitions.new

  extract_all_types(routes.types).sort.each do |type|
    grape_type = Swagger::Grape::Type.new(type)

    swagger_doc.definitions.add_definition(type.to_s, grape_type.to_swagger(false))
  end

  if routes.scopes.present?
    scheme = Swagger::Data::SecurityScheme.new
    scheme.type = 'oauth2'
    scheme.flow = 'accessCode'
    scheme.authorizationUrl = 'https://'
    scheme.tokenUrl = 'https://'
    scopes = {}
    routes.scopes.uniq.each do |scope|
      scopes[scope] = ''
    end
    scheme.scopes = scopes

    swagger_doc.securityDefinitions = Swagger::Data::SecurityDefinitions.new
    swagger_doc.securityDefinitions.add_param('oauth2', scheme)
  end

  swagger_doc
end