sober_swag 0.6.0 → 0.11.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: cdf3896754f6acf3bef2df51e947439be3822d3635eb924d6029ab3157b13bd9
4
- data.tar.gz: 75846c0b78e4e8dc9fc550af50aeb2bb73f3c1200e8c50af6c07092d2dd8c277
3
+ metadata.gz: c07baa6165df700b23c0f8a0c9bd1a1dcb841d79b07995479b0c1e19a69928d7
4
+ data.tar.gz: 523a0eabeb954497f531485962b0f058dc9a32ec398df899162c66e5d985d01e
5
5
  SHA512:
6
- metadata.gz: ae7076a9dcabcf2a99b642f967782195d1680ff13b6fd251123abdec15ec2eab18435ec1897fe212a060779b1bdffb8061bcb4b2eb89884713230ca0c70ecc27
7
- data.tar.gz: 5f3fb9ee3c31feb8ede072171e5f0f2f5108061d7f09c44e4f4d88d929c001519734fce64b4c261ea4d8e63d9aa1862fdf374cdddd00da2b58d9cf75fc367320
6
+ metadata.gz: 0ccf5c1f96d1647e42e082bfdd05c0a0ba3ff9d6d0bbe9139f9349bd17c917e854057af26a073c84aeeb54ac065c8c9f297d99d8063a0bccf032f77217c900bd
7
+ data.tar.gz: f01787f76223c896154312b43862ac1276154715c9b8234a761c84dc046a1f5ab7f82e387c821805bf2f3b22ed99452bd834336dfdfc8f15350345efcc575de8
@@ -34,6 +34,15 @@ class LinkedList < SoberSwag::InputObject
34
34
  attribute? :next, LinkedList
35
35
  end
36
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
+
37
46
  # (If you use this, don't forget to add pry to your Gemfile!)
38
47
  require 'pry'
39
48
  Pry.start
@@ -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,21 +6,30 @@ 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
+
23
+ ##
24
+ # Delegates to `base`, adds metadata, pumbs identifiers
18
25
  def lazy_type
19
- @base.lazy_type.meta(**meta)
26
+ @base.lazy_type.meta(**metadata).tap { |t| t.identifier(@base.identifier) }
20
27
  end
21
28
 
29
+ ##
30
+ # Delegates to `base`, adds metadata, plumbs identifiers
22
31
  def type
23
- @base.type.meta(**meta)
32
+ @base.type.meta(**metadata).tap { |t| t.identifier(@base.identifier) }
24
33
  end
25
34
 
26
35
  def finalize_lazy_type!
@@ -9,8 +9,12 @@ module SoberSwag
9
9
  Rails.application.routes.routes.map { |route|
10
10
  route.defaults[:controller]
11
11
  }.to_set.reject(&:nil?).map { |controller|
12
- "#{controller}_controller".classify.constantize
13
- }.filter { |controller| controller.ancestors.include?(SoberSwag::Controller) }
12
+ begin
13
+ "#{controller}_controller".classify.constantize
14
+ rescue StandardError
15
+ nil
16
+ end
17
+ }.compact.filter { |controller| controller.ancestors.include?(SoberSwag::Controller) }
14
18
  end
15
19
 
16
20
  ##
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SoberSwag
4
- VERSION = '0.6.0'
4
+ VERSION = '0.11.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.6.0
4
+ version: 0.11.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-05 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: []