Skip to content

Commit d3eb191

Browse files
committed
Merge branch 'master' into read-write-only
2 parents c1b4398 + 298cd46 commit d3eb191

File tree

5 files changed

+48
-10
lines changed

5 files changed

+48
-10
lines changed

README.md

+10-4
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,18 @@ Available on [Maven Central](https://search.maven.org/#search%7Cgav%7C1%7Cg%3A%2
2828

2929
# Docker
3030

31-
Available on [Docker Hub](https://hub.docker.com/r/quen2404/openapi-diff/)
31+
Available on [Docker Hub](https://hub.docker.com/r/quen2404/openapi-diff/) as `quen2404/openapi-diff`.
3232

33-
## Build image
33+
## Build the image
34+
35+
This is only required if you want to try new changes in the Dockerfile of this project.
3436

3537
```bash
36-
docker build -t openapi-diff .
38+
docker build -t local-openapi-diff .
3739
```
3840

41+
You can replace the local image name `local-openapi-diff` by any name of your choice.
42+
3943
## Run an instance
4044

4145
In this example the `$(pwd)/src/test/resources` directory is mounted in the `/specs` directory of the container
@@ -44,9 +48,11 @@ in readonly mode (`ro`).
4448
```bash
4549
docker run -t \
4650
-v $(pwd)/src/test/resources:/specs:ro \
47-
openapi-diff /specs/path_1.yaml /specs/path_2.yaml
51+
quen2404/openapi-diff /specs/path_1.yaml /specs/path_2.yaml
4852
```
4953

54+
The remote name `quen2404/openapi-diff` can be replaced with `local-openapi-diff` or the name you gave to your local image.
55+
5056
# Usage
5157
OpenDiff can read swagger api spec from json file or http.
5258

src/main/java/com/qdesrame/openapi/diff/compare/RequestBodyDiff.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ public RequestBodyDiff(OpenApiDiff openApiDiff) {
2525
}
2626

2727
public Optional<ChangedRequestBody> diff(RequestBody left, RequestBody right, DiffContext context) {
28-
return cachedDiff(new HashSet<>(), left, right, left.get$ref(), right.get$ref(), context);
28+
String leftRef = left != null ? left.get$ref() : null,
29+
rightRef = right != null ? right.get$ref() : null;
30+
return cachedDiff(new HashSet<>(), left, right, leftRef, rightRef, context);
2931
}
3032

3133
@Override

src/main/java/com/qdesrame/openapi/diff/compare/schemadiffresult/ComposedSchemaDiffResult.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public ComposedSchemaDiffResult(OpenApiDiff openApiDiff) {
3131

3232
@Override
3333
public Optional<ChangedSchema> diff(HashSet<String> refSet, Components leftComponents, Components rightComponents, Schema left, Schema right, DiffContext context) {
34-
if(left instanceof ComposedSchema) {
34+
if (left instanceof ComposedSchema) {
3535
ComposedSchema leftComposedSchema = (ComposedSchema) left;
3636
ComposedSchema rightComposedSchema = (ComposedSchema) right;
3737
if (CollectionUtils.isNotEmpty(leftComposedSchema.getOneOf())
@@ -53,7 +53,8 @@ public Optional<ChangedSchema> diff(HashSet<String> refSet, Components leftCompo
5353
Map<String, String> rightMapping = getMapping(rightComposedSchema);
5454

5555
ChangedOneOfSchema changedOneOfSchema = new ChangedOneOfSchema(leftMapping, rightMapping, context);
56-
MapKeyDiff<String, String> mappingDiff = MapKeyDiff.diff(leftMapping, rightMapping);
56+
MapKeyDiff<String, Schema> mappingDiff = MapKeyDiff.diff(getSchema(leftComponents, leftMapping),
57+
getSchema(rightComponents, rightMapping));
5758
changedOneOfSchema.setIncreasedMapping(mappingDiff.getIncreased());
5859
changedOneOfSchema.setMissingMapping(mappingDiff.getMissing());
5960

@@ -76,6 +77,12 @@ public Optional<ChangedSchema> diff(HashSet<String> refSet, Components leftCompo
7677
}
7778
}
7879

80+
private Map<String, Schema> getSchema(Components components, Map<String, String> mapping) {
81+
Map<String, Schema> result = new HashMap<>();
82+
mapping.forEach((key, value) -> result.put(key, refPointer.resolveRef(components, new Schema(), value)));
83+
return result;
84+
}
85+
7986
private Map<String, String> getMapping(ComposedSchema composedSchema) {
8087
Map<String, String> reverseMapping = new HashMap<>();
8188
for (Schema schema : composedSchema.getOneOf()) {

src/main/java/com/qdesrame/openapi/diff/model/ChangedOneOfSchema.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.qdesrame.openapi.diff.model;
22

3+
import io.swagger.v3.oas.models.media.Schema;
34
import lombok.Getter;
45
import lombok.Setter;
56

@@ -15,8 +16,8 @@ public class ChangedOneOfSchema implements Changed {
1516
private final Map<String, String> newMapping;
1617
private final DiffContext context;
1718

18-
private Map<String, String> increasedMapping;
19-
private Map<String, String> missingMapping;
19+
private Map<String, Schema> increasedMapping;
20+
private Map<String, Schema> missingMapping;
2021
private Map<String, ChangedSchema> changedMapping;
2122

2223
public ChangedOneOfSchema(Map<String, String> oldMapping, Map<String, String> newMapping, DiffContext context) {

src/main/java/com/qdesrame/openapi/diff/output/MarkdownRender.java

+23-1
Original file line numberDiff line numberDiff line change
@@ -216,13 +216,28 @@ private String schema(ChangedSchema schema) {
216216
return schema(1, schema);
217217
}
218218

219+
private String oneOfSchema(int deepness, ChangedOneOfSchema schema, String discriminator) {
220+
StringBuilder sb = new StringBuilder("");
221+
sb.append(format("%sSwitch `%s`:\n", indent(deepness), discriminator));
222+
schema.getMissingMapping().keySet()
223+
.forEach(key -> sb.append(format("%s- Removed '%s'\n", indent(deepness), key)));
224+
schema.getIncreasedMapping().forEach((key, sub) ->
225+
sb.append(format("%s- Added '%s':\n", indent(deepness), key)).append(schema(deepness + 1, sub)));
226+
schema.getChangedMapping().forEach((key, sub) ->
227+
sb.append(format("%s- Updated `%s`:\n", indent(deepness), key))
228+
.append(schema(deepness + 1, sub)));
229+
return sb.toString();
230+
}
231+
219232
private String schema(int deepness, ChangedSchema schema) {
220233
StringBuilder sb = new StringBuilder("");
221234
if (schema.isDiscriminatorPropertyChanged()) {
222235
LOGGER.debug("Discriminator property changed");
223236
}
224237
if (schema.getChangedOneOfSchema() != null) {
225-
LOGGER.debug("One of schema changed");
238+
String discriminator = schema.getNewSchema().getDiscriminator() != null ?
239+
schema.getNewSchema().getDiscriminator().getPropertyName() : "";
240+
sb.append(oneOfSchema(deepness, schema.getChangedOneOfSchema(), discriminator));
226241
}
227242
sb.append(listDiff(deepness, "enum", schema.getChangeEnum()));
228243
sb.append(properties(deepness, "Added property", schema.getIncreasedProperties(), true));
@@ -239,6 +254,13 @@ private String schema(int deepness, ComposedSchema schema) {
239254
.map(this::resolve)
240255
.forEach(composedChild -> sb.append(schema(deepness, composedChild)));
241256
}
257+
if (schema.getOneOf() != null && schema.getOneOf() != null) {
258+
LOGGER.debug("One of schema");
259+
sb.append(format("%sOne of:\n\n", indent(deepness)));
260+
schema.getOneOf().stream()
261+
.map(this::resolve)
262+
.forEach(composedChild -> sb.append(schema(deepness + 1, composedChild)));
263+
}
242264
return sb.toString();
243265
}
244266

0 commit comments

Comments
 (0)