Sha256: afbd97d05f84492e5cf50e51af7c742d78b7acc3cc56ca4229f24f95255e37b9

Contents?: true

Size: 1.91 KB

Versions: 4

Compression:

Stored size: 1.91 KB

Contents

module Symphonia
  class ApiController < ApplicationController
    include ::Swagger::Blocks
    # https://github.com/fotinakis/swagger-blocks
    swagger_component do
      security_scheme "token" do
        key :type, "apiKey"
        key :name, "key"
        key :in, "header"
      end
    end

    swagger_root openapi: "3.0.0" do
      info do
        key :version, '2.0.0'
        key :title, "API"
        key :description, ""
        contact do
          key :name, 'Lukas Pokorny'
          key :email, 'pokorny@luk4s.cz'
        end
        license do
          key :name, 'GPLv3'
        end
      end

      security do
        key :token, []
      end

      tag name: "admin" do
        key :description, "endpoints required `admin`"
      end
      tag name: "User" do
      end
    end

    # A list of all classes that have swagger_* declarations.
    SWAGGERED_CLASSES = [
      UsersController,
      User,
      Swagger::ErrorModel,
    ]
    def self.for_documentation
      SWAGGERED_CLASSES + Symphonia::ApiController::SWAGGERED_CLASSES
    end

    # @param [String] name of tag
    # @param [String] description
    def self.add_tag(name:, description:)
      swagger_root_node.tag name: name, description: description
    end

    # @return [Swagger::Blocks::Nodes::RootNode]
    def self.swagger_root_node
      node = Symphonia::ApiController.send(:_swagger_nodes)
      node[:root_node]
    end

    # @param [String] text
    def self.api_title=(text)
      swagger_root_node.data[:info].data[:title] = text
    end

    # @param [String] text
    def self.api_description=(text)
      swagger_root_node.data[:info].data[:description] = text
    end

    def index
      json = ::Swagger::Blocks.build_root_json(self.class.for_documentation + [self.class])
      respond_to do |format|
        format.yaml { render plain: json.deep_stringify_keys.to_yaml }
        format.json { render json: json }
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
symphonia-3.2.4 app/controllers/symphonia/api_controller.rb
symphonia-3.2.3 app/controllers/symphonia/api_controller.rb
symphonia-3.2.2 app/controllers/symphonia/api_controller.rb
symphonia-3.2.1 app/controllers/symphonia/api_controller.rb