Skip to content

Commit

Permalink
#231 Added possibility to print formatted json in swagger.json file (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
feoktant authored and kailuowang committed Nov 16, 2018
1 parent fee8a6e commit 15a0a93
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 5 deletions.
6 changes: 6 additions & 0 deletions README.md
Expand Up @@ -270,6 +270,12 @@ In build.sbt, add
swaggerFileName := "customSwagger.json"
```

#### How to output formatted json in swagger documentation file?
In build.sbt, add
```scala
swaggerPrettyJson := true
```

#### Where to find more examples?
In the [tests](/core/src/test/scala/com/iheart/playSwagger/SwaggerSpecGeneratorSpec.scala)!

Expand Down
15 changes: 10 additions & 5 deletions core/src/main/scala/com/iheart/playSwagger/SwaggerSpecRunner.scala
Expand Up @@ -2,12 +2,14 @@ package com.iheart.playSwagger

import java.nio.file.{ Files, Paths, StandardOpenOption }

import scala.util.{ Success, Failure, Try }
import play.api.libs.json.{ JsValue, Json }

import scala.util.{ Failure, Success, Try }

object SwaggerSpecRunner extends App {
implicit def cl = getClass.getClassLoader
implicit def cl: ClassLoader = getClass.getClassLoader

val (targetFile :: routesFile :: domainNameSpaceArgs :: outputTransformersArgs :: swaggerV3String :: apiVersion :: Nil) = args.toList
val targetFile :: routesFile :: domainNameSpaceArgs :: outputTransformersArgs :: swaggerV3String :: apiVersion :: swaggerPrettyJson :: Nil = args.toList
private def fileArg = Paths.get(targetFile)
private def swaggerJson = {
val swaggerV3 = java.lang.Boolean.parseBoolean(swaggerV3String)
Expand All @@ -21,11 +23,14 @@ object SwaggerSpecRunner extends App {
case Success(el) el
}
}
SwaggerSpecGenerator(
val swaggerSpec: JsValue = SwaggerSpecGenerator(
domainModelQualifier,
outputTransformers = transformers,
swaggerV3 = swaggerV3,
apiVersion = Some(apiVersion)).generate(routesFile).get.toString
apiVersion = Some(apiVersion)).generate(routesFile).get

if (swaggerPrettyJson.toBoolean) Json.prettyPrint(swaggerSpec)
else swaggerSpec.toString
}

Files.write(fileArg, swaggerJson.getBytes, StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE)
Expand Down
Expand Up @@ -15,4 +15,6 @@ trait SwaggerKeys {
val envOutputTransformer = "com.iheart.playSwagger.EnvironmentVariablesTransformer"

val swaggerAPIVersion = SettingKey[String]("swaggerAPIVersion", "Version of the API")

val swaggerPrettyJson = SettingKey[Boolean]("swaggerPrettyJson", "True, if needs to pretty print Swagger's documentation")
}
Expand Up @@ -33,6 +33,7 @@ object SwaggerPlugin extends AutoPlugin {
swaggerRoutesFile := "routes",
swaggerOutputTransformers := Seq(),
swaggerAPIVersion := version.value,
swaggerPrettyJson := false,
swagger := Def.task[File] {
(swaggerTarget.value).mkdirs()
val file = swaggerTarget.value / swaggerFileName.value
Expand All @@ -42,6 +43,7 @@ object SwaggerPlugin extends AutoPlugin {
swaggerOutputTransformers.value.mkString(",") ::
swaggerV3.value.toString ::
swaggerAPIVersion.value ::
swaggerPrettyJson.value.toString ::
Nil
val swaggerClasspath = data((fullClasspath in Runtime).value) ++ update.value.select(configurationFilter(swaggerConfig.name))
toError(runner.value.run("com.iheart.playSwagger.SwaggerSpecRunner", swaggerClasspath, args, streams.value.log))
Expand Down

0 comments on commit 15a0a93

Please sign in to comment.