apia-open_api 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -8
- data/lib/apia/open_api/objects/response.rb +21 -6
- data/lib/apia/open_api/objects/schema.rb +10 -3
- data/lib/apia/open_api/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7c3d54619c699cf9edca73ebc76e68819c2656f0259adbd6d5e411d4e415ca6
|
4
|
+
data.tar.gz: f31e758e511dd57af96896cd9ca956e6455c29747fc8389d5bda59a6c5938f3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f96b6eca24cc4d97d4e248892adf62bce141c4d4cce4697c8141cd1b844465d7ce9ef33036daddee81bf908dd41b4cc1bcad2b4436bc2cd1aef431e8fba8602
|
7
|
+
data.tar.gz: 1754bd390af23a0c88658c9a58b7c367f1743df4021a2f47c186720b3b3ff8235be743adaf62d0a3613502ae22267264f6aea71ae44ab716ba5ca8b86257345d
|
data/README.md
CHANGED
@@ -2,17 +2,13 @@
|
|
2
2
|
|
3
3
|
This gem can generate an [OpenAPI](https://www.openapis.org/) compatible schema from an API implemented using [Apia](https://github.com/krystal/apia).
|
4
4
|
|
5
|
-
|
5
|
+
This gem is in the early phases of development and breaking changes may be introduced whilst the gem is in the 0.1.x version range.
|
6
6
|
|
7
|
-
|
7
|
+
## Installation
|
8
8
|
|
9
9
|
Install the gem and add to the application's Gemfile by executing:
|
10
10
|
|
11
|
-
$ bundle add
|
12
|
-
|
13
|
-
If bundler is not being used to manage dependencies, install the gem by executing:
|
14
|
-
|
15
|
-
$ gem install UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG
|
11
|
+
$ bundle add apia-open_api
|
16
12
|
|
17
13
|
## Usage
|
18
14
|
|
@@ -85,7 +81,7 @@ You can also run `bin/console` for an interactive prompt that will allow you to
|
|
85
81
|
|
86
82
|
## Releasing a new version
|
87
83
|
|
88
|
-
|
84
|
+
[Release Please](https://github.com/googleapis/release-please) is configured. The [convential commits](https://www.conventionalcommits.org/en/v1.0.0/) format should be used and upon merging to main, Release Please will open a new PR following semver rules. When that Release Please PR is merged, a new version will be published to RubyGems.
|
89
85
|
|
90
86
|
## Contributing
|
91
87
|
|
@@ -283,16 +283,31 @@ module Apia
|
|
283
283
|
component_schema
|
284
284
|
end
|
285
285
|
|
286
|
+
# We want to declare the code in the error response as an enum, with only
|
287
|
+
# one possible value, as this makes it explicit to the client what the
|
288
|
+
# value will be.
|
289
|
+
#
|
290
|
+
# However, the code field is not defined as an Enum scalar within Apia,
|
291
|
+
# so we generate an Enum definition "on the fly" here.
|
292
|
+
#
|
293
|
+
# This means we can add a schema for the enum and a related $ref, which
|
294
|
+
# helps prompt client generators to generate an explicit enum type for the code.
|
295
|
+
# Otherwise if we generate the enum 'inline' in the response, some client generators
|
296
|
+
# will not generate an enum type for the code.
|
286
297
|
def generate_schema_properties_for_definition(definition)
|
287
|
-
|
298
|
+
id = generate_id_from_definition(definition)
|
299
|
+
detail_ref = generate_schema_ref(definition, id: id)
|
300
|
+
|
301
|
+
code_enum_id = "#{id}Enum"
|
302
|
+
code_enum_field_definition = Definitions::Field.new(:enum, id: code_enum_id)
|
303
|
+
code_enum_field_definition.type = Class.new(Apia::Enum) { value(definition.code) }
|
304
|
+
code_ref = generate_schema_ref(code_enum_field_definition, id: code_enum_id)
|
305
|
+
|
288
306
|
{
|
289
307
|
properties: {
|
290
|
-
code:
|
291
|
-
type: "string",
|
292
|
-
enum: [definition.code]
|
293
|
-
},
|
308
|
+
code: code_ref,
|
294
309
|
description: { type: "string" },
|
295
|
-
detail:
|
310
|
+
detail: detail_ref
|
296
311
|
}
|
297
312
|
}
|
298
313
|
end
|
@@ -40,7 +40,7 @@ module Apia
|
|
40
40
|
@definition = definition
|
41
41
|
@schema = schema
|
42
42
|
@id = id
|
43
|
-
@endpoint = endpoint
|
43
|
+
@endpoint = endpoint # endpoint gets specified when we are dealing with a partial response
|
44
44
|
@path = path
|
45
45
|
@children = []
|
46
46
|
end
|
@@ -130,6 +130,10 @@ module Apia
|
|
130
130
|
schema[:properties][child.name.to_s] = generate_scalar_schema(child)
|
131
131
|
end
|
132
132
|
|
133
|
+
if child.try(:null?)
|
134
|
+
schema[:properties][child.name.to_s][:nullable] = true
|
135
|
+
end
|
136
|
+
|
133
137
|
if child.try(:required?)
|
134
138
|
schema[:required] ||= []
|
135
139
|
schema[:required] << child.name.to_s
|
@@ -141,7 +145,7 @@ module Apia
|
|
141
145
|
schema[:type] = "object"
|
142
146
|
schema[:properties] ||= {}
|
143
147
|
if all_properties_included
|
144
|
-
|
148
|
+
ref = generate_schema_ref(child)
|
145
149
|
else
|
146
150
|
child_path = @path.nil? ? nil : @path + [child]
|
147
151
|
|
@@ -149,13 +153,16 @@ module Apia
|
|
149
153
|
# very long IDs, so we truncate them to avoid hitting the 100 character
|
150
154
|
# filename limit imposed by the rubygems gem builder.
|
151
155
|
truncated_id = @id.match(/^(.*?)\d*?(Response|Part).*$/)[1]
|
152
|
-
|
156
|
+
ref = generate_schema_ref(
|
153
157
|
child,
|
154
158
|
id: "#{truncated_id}Part_#{child.name}".camelize,
|
155
159
|
endpoint: @endpoint,
|
156
160
|
path: child_path
|
157
161
|
)
|
158
162
|
end
|
163
|
+
|
164
|
+
# Using allOf is a workaround to allow us to set a ref as `nullable` in OpenAPI 3.0
|
165
|
+
schema[:properties][child.name.to_s] = { allOf: [ref] }
|
159
166
|
end
|
160
167
|
|
161
168
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apia-open_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Sturgess
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -70,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
requirements: []
|
73
|
-
rubygems_version: 3.4.
|
73
|
+
rubygems_version: 3.4.19
|
74
74
|
signing_key:
|
75
75
|
specification_version: 4
|
76
76
|
summary: Apia OpenAPI spec generator
|