sober_swag 0.12.0 → 0.13.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa0e0e510ec9344738f12f01098f1d34557ac41c83dc966b4368b1407496b868
4
- data.tar.gz: 50f62bed3de241407e3d16caaae632dc8af21781477ac7e212a60af71780c932
3
+ metadata.gz: 9e65d79013d299407a6fbe6c610bf1ca4c6b24be6b2e944de39faf0bc80204d1
4
+ data.tar.gz: 69e079b589f72e3ff06d5b08bfff72064341cbc916311166dcfd4b9e8172b5da
5
5
  SHA512:
6
- metadata.gz: 04ad84a03ee992677593aeea1342ddbb1fb693d7f67ae6c9e3b31b8d5050aeda86d71f65390d906ade4d30e458cdb7717d3ef02d93f3e966a92e4fac63240e8e
7
- data.tar.gz: 535711fae0cc27c5122f5873cf64901e571631d9d87ecc04d44420deb99ff173bf83c0b36cdd34ce44aa6a697cec643098a8784be2487c2f9619ea78b52b2754
6
+ metadata.gz: 342f90b5d974c97149b4449e5ae20b7d2551190a4ded32bfef1e62ea82b5b7e03c75103fefdb48390cf0cfbe9bc58b37f4118bcca3fded7b5f951b8470195ad0
7
+ data.tar.gz: 3877ec4ef5cd9823e6e43a9c192a7aae89bf51913c9481018fef38206e7bbb36e2907cad3613098907d0c394c52119b7488263bad645a25d9d28452ea55cc75e
@@ -126,7 +126,9 @@ module SoberSwag
126
126
 
127
127
  case type
128
128
  when Class
129
- { :$ref => self.class.get_ref(type) }
129
+ # refs have to be standalone
130
+ # so to not interefere with our other stuff, do this horrible garbage
131
+ { oneOf: [{ '$ref'.to_sym => self.class.get_ref(type) }] }
130
132
  when Dry::Types::Constrained
131
133
  self.class.new(type.type).schema_stub
132
134
  when Dry::Types::Array::Member
@@ -220,19 +222,20 @@ module SoberSwag
220
222
  else
221
223
  [name, value]
222
224
  end
223
- # can't match on value directly as ruby uses `===` to match,
224
- # and classes use `===` to mean `is an instance of`, as
225
- # opposed to direct equality lmao
226
225
  when Nodes::Primitive
227
226
  value = object.value
228
227
  metadata = object.metadata
229
- if self.class.primitive?(value)
230
- md = self.class.primitive_def(value)
231
- METADATA_KEYS.select(&metadata.method(:key?)).reduce(md) do |definition, key|
232
- definition.merge(key => metadata[key])
228
+ type_def =
229
+ if self.class.primitive?(value)
230
+ self.class.primitive_def(value)
231
+ else
232
+ metadata.merge!(value.meta)
233
+ # refs have to be on their own, this is the stupid workaround
234
+ # so you can add descriptions and stuff
235
+ { oneOf: [{ '$ref'.to_sym => self.class.get_ref(value) }] }
233
236
  end
234
- else
235
- { '$ref': self.class.get_ref(value) }
237
+ METADATA_KEYS.select(&metadata.method(:key?)).reduce(type_def) do |definition, key|
238
+ definition.merge(key => metadata[key])
236
239
  end
237
240
  else
238
241
  raise ArgumentError, "Got confusing node #{object} (#{object.class})"
@@ -46,8 +46,9 @@ module SoberSwag
46
46
  when Dry::Types::Constrained
47
47
  bind(Parser.new(@node.type))
48
48
  when Dry::Types::Nominal
49
+ old_meta = @node.primitive.respond_to?(:meta) ? @node.primitive.meta : {}
49
50
  # start off with the moral equivalent of NodeTree[String]
50
- Nodes::Primitive.new(@node.primitive, @node.meta)
51
+ Nodes::Primitive.new(@node.primitive, old_meta.merge(@node.meta))
51
52
  else
52
53
  # Inside of this case we have a class that is some user-defined type
53
54
  # We put it in our array of found types, and consider it a primitive
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SoberSwag
4
- VERSION = '0.12.0'
4
+ VERSION = '0.13.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sober_swag
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Super
@@ -183,7 +183,6 @@ files:
183
183
  - LICENSE.txt
184
184
  - README.md
185
185
  - Rakefile
186
- - bin/console
187
186
  - bin/setup
188
187
  - docs/serializers.md
189
188
  - example/.gitignore
data/bin/console DELETED
@@ -1,48 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'bundler/setup'
5
- require 'sober_swag'
6
-
7
- # You can add fixtures and/or initialization code here to make experimenting
8
- # with your gem easier. You can also use a different console, if you like.
9
- module Types
10
- include Dry.Types()
11
- end
12
-
13
- Bio = SoberSwag.input_object do
14
- attribute :name, primitive(:String).meta(description: 'A very basic bio name')
15
- end
16
-
17
- Person = SoberSwag.input_object do
18
- attribute :name, primitive(:String).meta(description: 'The full name description')
19
- attribute :age, param(:Integer).constrained(gt: 0).optional.meta(description: 'My cool age')
20
- attribute? :mood, Types::String
21
- end
22
-
23
- ##
24
- # Demonstration of subclass-style.
25
- class PersonSearch < SoberSwag::InputObject
26
- attribute? :name, Types::String
27
- attribute? :age, Types::Integer
28
- end
29
-
30
- ##
31
- # Demonstration of subclass-style *and* recursion in structs.
32
- class LinkedList < SoberSwag::InputObject
33
- attribute :value, Types::String
34
- attribute? :next, LinkedList
35
- end
36
-
37
- Foo = SoberSwag::OutputObject.define do
38
- field :name, primitive(:String)
39
- field :age, primitive(:String)
40
-
41
- view :foo do
42
- field :bar, primitive(:String).optional
43
- end
44
- end
45
-
46
- # (If you use this, don't forget to add pry to your Gemfile!)
47
- require 'pry'
48
- Pry.start