sober_swag 0.7.0 → 0.12.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: a005a30f258a97e03e6a8c69429a3bf3d8f35477ffe0dbe7ba4afb030e36986d
4
- data.tar.gz: 0d9aaed05874fec05ebccbe4b987a9c0d46eaeb3fefe9633b34340a28f956c75
3
+ metadata.gz: fa0e0e510ec9344738f12f01098f1d34557ac41c83dc966b4368b1407496b868
4
+ data.tar.gz: 50f62bed3de241407e3d16caaae632dc8af21781477ac7e212a60af71780c932
5
5
  SHA512:
6
- metadata.gz: 10659925df20f3eeab802f8c8648c5f589a509d247d9017076893f67501dc4ba1f97e1c3f21958dcedc1e1aff950d8375e74825f038e1e360c984e01a4656c61
7
- data.tar.gz: be74588c605a26165363e88ab95dbfcb4a83cb4d169a224544b74389c69049a769bcde8fb14e6338f7fac92419a317fd9a2332352e7a420be95060c20523e666
6
+ metadata.gz: 04ad84a03ee992677593aeea1342ddbb1fb693d7f67ae6c9e3b31b8d5050aeda86d71f65390d906ade4d30e458cdb7717d3ef02d93f3e966a92e4fac63240e8e
7
+ data.tar.gz: 535711fae0cc27c5122f5873cf64901e571631d9d87ecc04d44420deb99ff173bf83c0b36cdd34ce44aa6a697cec643098a8784be2487c2f9619ea78b52b2754
@@ -13,9 +13,16 @@ module SoberSwag
13
13
  # The name to use for this type in external documentation.
14
14
  def identifier(arg = nil)
15
15
  @identifier = arg if arg
16
+
16
17
  @identifier || name.to_s.gsub('::', '.')
17
18
  end
18
19
 
20
+ def meta(*args)
21
+ super(*args).tap do |result|
22
+ result.identifier(identifier) if result.is_a?(Class) # pass on identifier
23
+ end
24
+ end
25
+
19
26
  def primitive(sym)
20
27
  SoberSwag::Types.const_get(sym)
21
28
  end
@@ -77,7 +77,6 @@ module SoberSwag
77
77
  begin
78
78
  views.reduce(base_serializer) do |base, view|
79
79
  view_serializer = view.serializer
80
- view_serializer.identifier("#{identifier}.#{view.name.to_s.classify}") if identifier
81
80
  SoberSwag::Serializer::Conditional.new(
82
81
  proc do |object, options|
83
82
  if options[:view].to_s == view.name.to_s
@@ -93,6 +92,10 @@ module SoberSwag
93
92
  end
94
93
  end
95
94
 
95
+ def to_s
96
+ "<SoberSwag::OutputObject(#{identifier})>"
97
+ end
98
+
96
99
  def base_serializer
97
100
  @base_serializer ||= SoberSwag::Serializer::FieldList.new(fields).tap do |s|
98
101
  s.identifier(identifier)
@@ -18,7 +18,11 @@ module SoberSwag
18
18
  end
19
19
 
20
20
  def view(name, &block)
21
- @views << View.define(name, fields, &block)
21
+ view = View.define(name, fields, &block)
22
+
23
+ view.identifier("#{@identifier}.#{name.to_s.classify}") if identifier
24
+
25
+ @views << view
22
26
  end
23
27
 
24
28
  def identifier(arg = nil)
@@ -3,7 +3,7 @@ module SoberSwag
3
3
  ##
4
4
  # DSL for defining a view.
5
5
  # Used in `view` blocks within {SoberSwag::OutputObject.define}.
6
- class View
6
+ class View < SoberSwag::Serializer::Base
7
7
  def self.define(name, base_fields, &block)
8
8
  new(name, base_fields).tap do |view|
9
9
  view.instance_eval(&block)
@@ -41,12 +41,16 @@ module SoberSwag
41
41
  @fields << field
42
42
  end
43
43
 
44
+ def to_s
45
+ "<SoberSwag::OutputObject::View(#{identifier})>"
46
+ end
47
+
44
48
  ##
45
49
  # Get the serializer defined by this view.
46
50
  # WARNING: Don't add more fields after you call this.
47
51
  def serializer
48
52
  @serializer ||=
49
- SoberSwag::Serializer::FieldList.new(fields)
53
+ SoberSwag::Serializer::FieldList.new(fields).tap { |s| s.identifier(identifier) }
50
54
  end
51
55
  end
52
56
  end
@@ -29,13 +29,6 @@ module SoberSwag
29
29
  def type
30
30
  @base.type
31
31
  end
32
-
33
- ##
34
- # I have no freaking clue if ruby optimizes proc composition,
35
- # but we at least save some node traversals here
36
- def via_map(&block)
37
- SoberSwag::Serializer::Mapped.new(@base, @map_f >> block)
38
- end
39
32
  end
40
33
  end
41
34
  end
@@ -6,25 +6,35 @@ module SoberSwag
6
6
  class Meta < Base
7
7
  def initialize(base, meta)
8
8
  @base = base
9
- @meta = meta
9
+ @metadata = meta
10
+ @identifier = @base.identifier
10
11
  end
11
12
 
12
- attr_reader :base, :meta
13
+ attr_reader :base, :metadata
13
14
 
14
15
  def serialize(args, opts = {})
15
16
  base.serialize(args, opts)
16
17
  end
17
18
 
19
+ def meta(hash)
20
+ self.class.new(base, metadata.merge(hash))
21
+ end
22
+
18
23
  def lazy_type
19
- @base.lazy_type.meta(**meta)
24
+ @lazy_type ||= @base.lazy_type.meta(**metadata)
20
25
  end
21
26
 
22
27
  def type
23
- @base.type.meta(**meta)
28
+ @type ||= @base.type.meta(**metadata)
24
29
  end
25
30
 
26
31
  def finalize_lazy_type!
27
32
  @base.finalize_lazy_type!
33
+ # Using .meta on dry-struct returns a *new type* that wraps the old one.
34
+ # As such, we need to be a bit clever about when we tack on the identifier
35
+ # for this type.
36
+ lazy_type.identifier(@base.lazy_type.identifier)
37
+ type.identifier(@base.type.identifier)
28
38
  end
29
39
 
30
40
  def lazy_type?
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SoberSwag
4
- VERSION = '0.7.0'
4
+ VERSION = '0.12.0'
5
5
  end
@@ -36,6 +36,7 @@ Gem::Specification.new do |spec|
36
36
 
37
37
  spec.add_development_dependency 'bundler', '~> 2.0'
38
38
  spec.add_development_dependency 'pry'
39
+ spec.add_development_dependency 'pry-byebug'
39
40
  spec.add_development_dependency 'rake', '~> 13.0'
40
41
  spec.add_development_dependency 'rspec', '~> 3.0'
41
42
  spec.add_development_dependency 'rubocop'
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.7.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Super
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-11 00:00:00.000000000 Z
11
+ date: 2020-08-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry-byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rake
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -279,7 +293,7 @@ licenses:
279
293
  metadata:
280
294
  allowed_push_host: https://rubygems.org
281
295
  homepage_uri: https://github.com/SonderMindOrg/sober_swag
282
- post_install_message:
296
+ post_install_message:
283
297
  rdoc_options: []
284
298
  require_paths:
285
299
  - lib
@@ -295,7 +309,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
295
309
  version: '0'
296
310
  requirements: []
297
311
  rubygems_version: 3.0.3
298
- signing_key:
312
+ signing_key:
299
313
  specification_version: 4
300
314
  summary: Generate swagger types from dry-types
301
315
  test_files: []