# frozen_string_literal: true module PUNK class GenerateSwaggerService < Service def process path = File.join(PUNK.get.app.path, "..", "www", "swagger.json") raise InternalServerError, "swagger.json already exists" if File.exist?(path) && !PUNK.env.test? require "swagger_yard" require_relative "../helpers/swagger" SwaggerYard.register_custom_yard_tags! SwaggerYard.configure do |config| config.api_version = PUNK.version config.title = PUNK.get.app.name config.description = PUNK.get.app.description config.api_base_path = PUNK.get.app.url config.controller_path = [File.join(PUNK.get.app.path, "routes", "**", "*"), File.join(__dir__, "..", "routes", "**", "*")] config.model_path = [File.join(__dir__, "..", "models", "**", "*"), File.join(__dir__, "..", "views", "**", "*"), File.join(PUNK.get.app.path, "models", "**", "*")] end spec = SwaggerYard::OpenAPI.new blob = JSON.pretty_generate(spec.to_h) File.open(path, "w") { |f| f << blob } unless PUNK.env.test? blob end end end