Compare commits

...

7 Commits

Author SHA1 Message Date
Robert Winkler
6396b8fdb7 * Support of YAML or JSON String as input. 2015-04-17 13:25:26 +02:00
Robert Winkler
e27ba4304d * Fixed issue #8: logback.xml on the classpath
* Fixed issue #13: unknown format not supported for properties
2015-04-16 12:17:40 +02:00
Robert Winkler
4c86e73c4e * Fixed issue #8: logback.xml on the classpath
* Fixed issue #13: unknown format not supported for properties
2015-04-16 12:15:37 +02:00
Robert Winkler
9f9fa8c444 Added springfox 2015-04-15 17:03:37 +02:00
Robert Winkler
9647116572 Added springfox 2015-04-15 17:01:45 +02:00
Robert Winkler
736891fbdd Merge branch 'master' of https://github.com/RobWin/swagger2markup 2015-04-15 16:40:58 +02:00
Robert Winkler
edf9ba01bd Merge pull request #12 from RobWin/develop
Added Gitter badge
2015-04-08 08:42:29 +02:00
9 changed files with 88 additions and 46 deletions

View File

@@ -1,6 +1,6 @@
= Swagger2Markup
:author: Robert Winkler
:version: 0.2.3
:version: 0.3.0
:hardbreaks:
image:https://travis-ci.org/RobWin/swagger2markup.svg["Build Status", link="https://travis-ci.org/RobWin/swagger2markup"] image:https://coveralls.io/repos/RobWin/swagger2markup/badge.svg["Coverage Status", link="https://coveralls.io/r/RobWin/swagger2markup"] image:https://api.bintray.com/packages/robwin/maven/swagger2markup/images/download.svg[link="https://bintray.com/robwin/maven/swagger2markup/_latestVersion"] image:http://img.shields.io/badge/license-ASF2-blue.svg["Apache License 2", link="http://www.apache.org/licenses/LICENSE-2.0.txt"]
@@ -11,7 +11,7 @@ image:https://badges.gitter.im/Join%20Chat.svg[link="https://gitter.im/RobWin/sw
This project is a Swagger to Markup (AsciiDoc and Markdown) converter. The *Swagger2MarkupConverter* takes a swagger.json or swagger.yaml file as source and converts it into an AsciiDoc or Markdown document. The Swagger source file can be located locally or remotely accessible via HTTP. The Swagger2MarkupConverter supports the Swagger 1.2 and 2.0 specification. Internally it uses the _official_ https://github.com/swagger-api/swagger-parser[swagger-parser] and my https://github.com/RobWin/markup-document-builder[markup-document-builder].
The primary goal of this project is to simplify the documentation of RESTful APIs. The result is intended to be an easy-to-read, on- and offline user guide, comparable to https://developer.github.com/v3/[GitHub's API documentation].
Swagger2Markup can be used together with https://github.com/spring-projects/spring-restdocs[spring-restdocs]. See <<integration-with-spring-restdocs, Integration with spring-restdocs>>.
Swagger2Markup can be used together with https://github.com/springfox/springfox[springfox] and https://github.com/spring-projects/spring-restdocs[spring-restdocs]. See <<integration-with-spring-restdocs, Integration with spring-restdocs>>.
The project requires at least JDK 7.
@@ -38,7 +38,7 @@ The project is published in JCenter and Maven Central.
<dependency>
<groupId>io.github.robwin</groupId>
<artifactId>swagger2markup</artifactId>
<version>0.2.3</version>
<version>0.3.0</version>
</dependency>
----
@@ -50,12 +50,12 @@ repositories {
jcenter()
}
compile "io.github.robwin:swagger2markup:0.2.3"
compile "io.github.robwin:swagger2markup:0.3.0"
----
=== Using Swagger2Markup
Using the Swagger2MarkupConverter is simple. For instance, you can generate your AsciiDoc/Markdown documentation using https://github.com/spring-projects/spring-boot[Spring Boot] and https://github.com/martypitt/swagger-springmvc[swagger-springmvc] as follows.
Using the Swagger2MarkupConverter is simple. For instance, you can generate your AsciiDoc/Markdown documentation using https://github.com/spring-projects/spring-boot[Spring Boot] and https://github.com/springfox/springfox[springfox] as follows.
See demo project https://github.com/RobWin/spring-swagger2markup-demo[spring-swagger2markup-demo].
[source,java]

View File

@@ -9,5 +9,15 @@
=== Version 0.2.1
* Signed jar files and published in Maven Central
=== Version 0.2.1
* Fixed wrong dependency version to io.github.robwin:markup-document-builder
=== Version 0.2.2
* Fixed wrong dependency version to io.github.robwin:markup-document-builder
=== Version 0.2.3
* Fixed issue #7: @ApiModelProperty metadata are ignored for definitions file
=== Version 0.2.4
* Fixed issue #8: logback.xml on the classpath
* Fixed issue #13: unknown format not supported for properties
== Version 0.3.0
* Support of YAML or JSON String as input.

View File

@@ -13,7 +13,7 @@ buildscript {
}
}
description = 'swagger2markup Build'
version = '0.2.3'
version = '0.3.0'
group = 'io.github.robwin'
apply plugin: 'java'
@@ -79,12 +79,17 @@ artifacts {
}
asciidoctor {
sources {
include 'index.adoc'
}
backends = ['html5', 'pdf']
attributes = [
doctype: 'book',
toc: 'left',
toclevels: '2',
numbered: ''
numbered: '',
sectlinks: '',
sectanchors: ''
]
}

View File

@@ -0,0 +1,9 @@
:doctype: book
:toc: left
:toclevels: 2
:numbered:
:sectlinks:
:sectanchors:
include::paths.adoc[]
include::definitions.adoc[]

View File

@@ -2431,7 +2431,7 @@ Schemes: HTTP</p>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2015-04-15 16:23:53 MESZ
Last updated 2015-04-16 12:10:07 MESZ
</div>
</div>
</body>

View File

@@ -1,6 +1,10 @@
package io.github.robwin.swagger2markup;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wordnik.swagger.models.Swagger;
import com.wordnik.swagger.util.Json;
import com.wordnik.swagger.util.Yaml;
import io.github.robwin.markup.builder.MarkupLanguage;
import io.github.robwin.swagger2markup.builder.document.DefinitionsDocument;
import io.github.robwin.swagger2markup.builder.document.PathsDocument;
@@ -41,12 +45,12 @@ public class Swagger2MarkupConverter {
/**
* Creates a Swagger2MarkupConverter.Builder using a given Swagger source.
*
* @param swaggerSource the Swagger source. Can be a HTTP url or a path to a local file.
* @param swaggerLocation the Swagger location. Can be a HTTP url or a path to a local file.
* @return a Swagger2MarkupConverter
*/
public static Builder from(String swaggerSource){
Validate.notEmpty(swaggerSource, "swaggerSource must not be empty!");
return new Builder(swaggerSource);
public static Builder from(String swaggerLocation){
Validate.notEmpty(swaggerLocation, "swaggerLocation must not be empty!");
return new Builder(swaggerLocation);
}
/**
@@ -60,6 +64,30 @@ public class Swagger2MarkupConverter {
return new Builder(swagger);
}
/**
* Creates a Swagger2MarkupConverter.Builder from a given Swagger YAML or JSON String.
*
* @param swagger the Swagger YAML or JSON String.
* @return a Swagger2MarkupConverter
*/
public static Builder fromString(String swagger) throws IOException {
Validate.notEmpty(swagger, "swagger must not be null!");
ObjectMapper mapper;
if(swagger.trim().startsWith("{")) {
mapper = Json.mapper();
}else {
mapper = Yaml.mapper();
}
JsonNode rootNode = mapper.readTree(swagger);
// must have swagger node set
JsonNode swaggerNode = rootNode.get("swagger");
if(swaggerNode == null)
throw new IllegalArgumentException("Swagger String is in the wrong format");
return new Builder(mapper.convertValue(rootNode, Swagger.class));
}
/**
* Builds the document with the given markup language and stores
* the files in the given folder.
@@ -112,10 +140,10 @@ public class Swagger2MarkupConverter {
/**
* Creates a Builder using a given Swagger source.
*
* @param swaggerSource the Swagger source. Can be a HTTP url or a path to a local file.
* @param swaggerLocation the Swagger location. Can be a HTTP url or a path to a local file.
*/
Builder(String swaggerSource){
swagger = new SwaggerParser().read(swaggerSource);
Builder(String swaggerLocation){
swagger = new SwaggerParser().read(swaggerLocation);
}
/**
@@ -127,8 +155,6 @@ public class Swagger2MarkupConverter {
this.swagger = swagger;
}
public Swagger2MarkupConverter build(){
return new Swagger2MarkupConverter(markupLanguage, swagger, examplesFolderPath, schemasFolderPath);
}

View File

@@ -107,19 +107,21 @@ public class DefinitionsDocument extends MarkupDocument {
List<String> headerAndContent = new ArrayList<>();
List<String> header = Arrays.asList(NAME_COLUMN, DESCRIPTION_COLUMN, SCHEMA_COLUMN, REQUIRED_COLUMN);
headerAndContent.add(StringUtils.join(header, DELIMITER));
for (Map.Entry<String, Property> propertyEntry : properties.entrySet()) {
Property property = propertyEntry.getValue();
String description = "";
if(property instanceof AbstractProperty){
if(StringUtils.isNotBlank(property.getDescription())){
description = property.getDescription();
if(MapUtils.isNotEmpty(properties)){
for (Map.Entry<String, Property> propertyEntry : properties.entrySet()) {
Property property = propertyEntry.getValue();
String description = "";
if(property instanceof AbstractProperty){
if(StringUtils.isNotBlank(property.getDescription())){
description = property.getDescription();
}
}
String type = PropertyUtils.getType(property, markupLanguage);
List<String> content = Arrays.asList(propertyEntry.getKey(), description, type, Boolean.toString(property.getRequired()));
headerAndContent.add(StringUtils.join(content, DELIMITER));
}
String type = PropertyUtils.getType(property, markupLanguage);
List<String> content = Arrays.asList(propertyEntry.getKey(), description, type, Boolean.toString(property.getRequired()));
headerAndContent.add(StringUtils.join(content, DELIMITER));
this.markupDocBuilder.tableWithHeaderRow(headerAndContent);
}
this.markupDocBuilder.tableWithHeaderRow(headerAndContent);
}
private void definitionSchema(String definitionName) throws IOException {

View File

@@ -135,11 +135,13 @@ public class PathsDocument extends MarkupDocument {
this.markupDocBuilder.sectionTitleLevel1(PATHS);
for (Map.Entry<String, Path> entry : paths.entrySet()) {
Path path = entry.getValue();
path("GET", entry.getKey(), path.getGet());
path("PUT", entry.getKey(), path.getPut());
path("DELETE", entry.getKey(), path.getDelete());
path("POST", entry.getKey(), path.getPost());
path("PATCH", entry.getKey(), path.getPatch());
if(path != null) {
path("GET", entry.getKey(), path.getGet());
path("PUT", entry.getKey(), path.getPut());
path("DELETE", entry.getKey(), path.getDelete());
path("POST", entry.getKey(), path.getPost());
path("PATCH", entry.getKey(), path.getPatch());
}
}
}
}

View File

@@ -1,12 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</configuration>