sober_swag 0.3.0 → 0.4.0
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/.github/workflows/ruby.yml +7 -4
- data/Gemfile.lock +1 -1
- data/example/Gemfile.lock +1 -1
- data/lib/sober_swag/compiler/type.rb +60 -47
- data/lib/sober_swag/nodes/base.rb +4 -0
- data/lib/sober_swag/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: 58d8be36679e1f9e29622e05aded075a325ab9fef563b4853c4715a1b4250a86
|
4
|
+
data.tar.gz: 7e33fec98c8bf330e7e49af5326a234447154c35f5813d17e3c134e7f41dfa71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e9cc9c095545c83b9411bc69cc3c459e017b72b220c8b79dbbfc4a1a303d3bf864d2c984a1290e13b42a999d8d19d03e6a78a66c4992102c31451ea538305de
|
7
|
+
data.tar.gz: 52ecf6c37d3dad5893c9626fd833ba2ae4ff52ddf03895719bb40784aacc63bac0db6c282cd521786902ffad76425c0f5f89d9093412ba166374bbaee796762b
|
data/.github/workflows/ruby.yml
CHANGED
@@ -17,6 +17,9 @@ jobs:
|
|
17
17
|
test:
|
18
18
|
|
19
19
|
runs-on: ubuntu-latest
|
20
|
+
strategy:
|
21
|
+
matrix:
|
22
|
+
ruby: [ '2.5', '2.6', '2.7' ]
|
20
23
|
|
21
24
|
steps:
|
22
25
|
- uses: actions/checkout@v2
|
@@ -30,9 +33,9 @@ jobs:
|
|
30
33
|
- uses: actions/cache@v2
|
31
34
|
with:
|
32
35
|
path: vendor/bundle
|
33
|
-
key: ${{ runner.os }}-gem-deps-${{ hashFiles('**/Gemfile.lock') }}
|
36
|
+
key: ${{ runner.os }}-${{ matrix.ruby }}-gem-deps-${{ hashFiles('**/Gemfile.lock') }}
|
34
37
|
restore-keys: |
|
35
|
-
${{ runner.os }}-gem-deps-
|
38
|
+
${{ runner.os }}-${{ matrix.ruby }}-gem-deps-
|
36
39
|
- name: Install dependencies
|
37
40
|
run: |
|
38
41
|
bundle config path vendor/bundle
|
@@ -48,9 +51,9 @@ jobs:
|
|
48
51
|
- uses: actions/cache@v2
|
49
52
|
with:
|
50
53
|
path: example/vendor/bundle
|
51
|
-
key: ${{ runner.os }}-example-deps-${{ hashFiles('example/**/Gemfile.lock') }}
|
54
|
+
key: ${{ runner.os }}-${{ matrix.ruby }}-example-deps-${{ hashFiles('example/**/Gemfile.lock') }}
|
52
55
|
restore-keys: |
|
53
|
-
${{ runner.os }}-example-deps-
|
56
|
+
${{ runner.os }}-${{ matrix.ruby }}-example-deps-
|
54
57
|
- name: Install example dependencies for example
|
55
58
|
working-directory: example
|
56
59
|
run: |
|
data/Gemfile.lock
CHANGED
data/example/Gemfile.lock
CHANGED
@@ -150,14 +150,17 @@ module SoberSwag
|
|
150
150
|
|
151
151
|
def rewrite_sums(object) # rubocop:disable Metrics/MethodLength
|
152
152
|
case object
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
153
|
+
when Nodes::Sum
|
154
|
+
lhs, rhs = object.deconstruct
|
155
|
+
if lhs.is_a?(Nodes::OneOf) && rhs.is_a?(Nodes::OneOf)
|
156
|
+
Nodes::OneOf.new(lhs.deconstruct + rhs.deconstruct)
|
157
|
+
elsif lhs.is_a?(Nodes::OneOf)
|
158
|
+
Nodes::OneOf.new([*lhs.deconstruct, rhs])
|
159
|
+
elsif rhs.is_a?(Nodes::OneOf)
|
160
|
+
Nodes::OneOf.new([lhs, *rhs.deconstruct])
|
161
|
+
else
|
162
|
+
Nodes::OneOf.new([lhs, rhs])
|
163
|
+
end
|
161
164
|
else
|
162
165
|
object
|
163
166
|
end
|
@@ -165,59 +168,69 @@ module SoberSwag
|
|
165
168
|
|
166
169
|
def flatten_one_ofs(object)
|
167
170
|
case object
|
168
|
-
|
169
|
-
Nodes::OneOf.new(
|
170
|
-
|
171
|
+
when Nodes::OneOf
|
172
|
+
Nodes::OneOf.new(object.deconstruct.uniq)
|
173
|
+
else
|
171
174
|
object
|
172
175
|
end
|
173
176
|
end
|
174
177
|
|
175
|
-
def to_object_schema(object) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity
|
178
|
+
def to_object_schema(object) # rubocop:disable Metrics/MethodLength, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
176
179
|
case object
|
177
|
-
|
180
|
+
when Nodes::List
|
178
181
|
{
|
179
182
|
type: :array,
|
180
|
-
items:
|
183
|
+
items: object.deconstruct.first
|
181
184
|
}
|
182
|
-
|
185
|
+
when Nodes::Enum
|
183
186
|
{
|
184
187
|
type: :string,
|
185
|
-
enum:
|
188
|
+
enum: object.deconstruct.first
|
186
189
|
}
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
190
|
+
when Nodes::OneOf
|
191
|
+
if object.deconstruct.include?({ type: 'null' })
|
192
|
+
rejected = object.deconstruct.reject { |e| e[:type] == 'null' }
|
193
|
+
if rejected.length == 1
|
194
|
+
rejected.first.merge(nullable: true)
|
195
|
+
else
|
196
|
+
{ oneOf: rejected, nullable: true }
|
197
|
+
end
|
198
|
+
else
|
199
|
+
{ oneOf: object.deconstruct }
|
200
|
+
end
|
201
|
+
when Nodes::Object
|
202
|
+
# openAPI requires that you give a list of required attributes
|
203
|
+
# (which IMO is the *totally* wrong thing to do but whatever)
|
204
|
+
# so we must do this garbage
|
205
|
+
required = object.deconstruct.filter { |(_, b)| b[:required] }.map(&:first)
|
206
|
+
{
|
207
|
+
type: :object,
|
208
|
+
properties: object.deconstruct.map { |(a, b)|
|
209
|
+
[a, b.reject { |k, _| k == :required }]
|
210
|
+
}.to_h,
|
211
|
+
required: required
|
212
|
+
}
|
213
|
+
when Nodes::Attribute
|
214
|
+
name, req, value = object.deconstruct
|
215
|
+
if req
|
216
|
+
[name, value.merge(required: true)]
|
217
|
+
else
|
218
|
+
[name, value]
|
219
|
+
end
|
211
220
|
# can't match on value directly as ruby uses `===` to match,
|
212
221
|
# and classes use `===` to mean `is an instance of`, as
|
213
222
|
# opposed to direct equality lmao
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
223
|
+
when Nodes::Primitive
|
224
|
+
value = object.value
|
225
|
+
metadata = object.metadata
|
226
|
+
if self.class.primitive?(value)
|
227
|
+
md = self.class.primitive_def(value)
|
228
|
+
METADATA_KEYS.select(&metadata.method(:key?)).reduce(md) do |definition, key|
|
229
|
+
definition.merge(key => metadata[key])
|
230
|
+
end
|
231
|
+
else
|
232
|
+
{ '$ref': self.class.get_ref(value) }
|
233
|
+
end
|
221
234
|
else
|
222
235
|
raise ArgumentError, "Got confusing node #{object} (#{object.class})"
|
223
236
|
end
|
data/lib/sober_swag/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sober_swag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anthony Super
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -295,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
295
295
|
- !ruby/object:Gem::Version
|
296
296
|
version: '0'
|
297
297
|
requirements: []
|
298
|
-
rubygems_version: 3.
|
298
|
+
rubygems_version: 3.0.3
|
299
299
|
signing_key:
|
300
300
|
specification_version: 4
|
301
301
|
summary: Generate swagger types from dry-types
|