sober_swag 0.18.0 → 0.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +15 -0
  3. data/.github/workflows/benchmark.yml +39 -0
  4. data/.github/workflows/lint.yml +2 -4
  5. data/.github/workflows/ruby.yml +1 -1
  6. data/.gitignore +3 -0
  7. data/.rubocop.yml +6 -1
  8. data/.yardopts +7 -0
  9. data/CHANGELOG.md +22 -0
  10. data/Gemfile +12 -0
  11. data/README.md +1 -1
  12. data/bench/benchmark.rb +34 -0
  13. data/bench/benchmarks/basic_field_serializer.rb +21 -0
  14. data/bench/benchmarks/view_selection.rb +47 -0
  15. data/bin/console +30 -10
  16. data/docs/reporting.md +190 -0
  17. data/docs/serializers.md +4 -1
  18. data/example/Gemfile +2 -2
  19. data/example/Gemfile.lock +116 -123
  20. data/example/app/controllers/application_controller.rb +4 -0
  21. data/example/app/controllers/people_controller.rb +44 -28
  22. data/example/app/output_objects/identified_output.rb +7 -0
  23. data/example/app/output_objects/person_output_object.rb +37 -11
  24. data/example/app/output_objects/post_output_object.rb +0 -4
  25. data/example/app/output_objects/reporting_post_output.rb +18 -0
  26. data/example/bin/rspec +29 -0
  27. data/example/config/environments/production.rb +1 -1
  28. data/example/spec/requests/people/create_spec.rb +3 -2
  29. data/example/spec/requests/people/index_spec.rb +1 -1
  30. data/lib/sober_swag/compiler/path.rb +45 -4
  31. data/lib/sober_swag/compiler/paths.rb +20 -0
  32. data/lib/sober_swag/compiler/primitive.rb +17 -0
  33. data/lib/sober_swag/compiler/type.rb +105 -22
  34. data/lib/sober_swag/compiler.rb +87 -15
  35. data/lib/sober_swag/controller/route.rb +147 -28
  36. data/lib/sober_swag/controller.rb +57 -17
  37. data/lib/sober_swag/input_object.rb +124 -7
  38. data/lib/sober_swag/nodes/array.rb +19 -0
  39. data/lib/sober_swag/nodes/attribute.rb +45 -4
  40. data/lib/sober_swag/nodes/base.rb +27 -7
  41. data/lib/sober_swag/nodes/binary.rb +30 -13
  42. data/lib/sober_swag/nodes/enum.rb +16 -1
  43. data/lib/sober_swag/nodes/list.rb +20 -0
  44. data/lib/sober_swag/nodes/nullable_primitive.rb +3 -0
  45. data/lib/sober_swag/nodes/object.rb +4 -1
  46. data/lib/sober_swag/nodes/one_of.rb +11 -3
  47. data/lib/sober_swag/nodes/primitive.rb +34 -2
  48. data/lib/sober_swag/nodes/sum.rb +8 -0
  49. data/lib/sober_swag/output_object/definition.rb +57 -1
  50. data/lib/sober_swag/output_object/field.rb +31 -11
  51. data/lib/sober_swag/output_object/field_syntax.rb +19 -3
  52. data/lib/sober_swag/output_object/view.rb +46 -1
  53. data/lib/sober_swag/output_object.rb +40 -19
  54. data/lib/sober_swag/parser.rb +7 -1
  55. data/lib/sober_swag/reporting/compiler.rb +39 -0
  56. data/lib/sober_swag/reporting/input/base.rb +11 -0
  57. data/lib/sober_swag/reporting/input/bool.rb +19 -0
  58. data/lib/sober_swag/reporting/input/converting/bool.rb +24 -0
  59. data/lib/sober_swag/reporting/input/converting/date.rb +30 -0
  60. data/lib/sober_swag/reporting/input/converting/date_time.rb +28 -0
  61. data/lib/sober_swag/reporting/input/converting/decimal.rb +24 -0
  62. data/lib/sober_swag/reporting/input/converting/integer.rb +19 -0
  63. data/lib/sober_swag/reporting/input/converting.rb +16 -0
  64. data/lib/sober_swag/reporting/input/defer.rb +29 -0
  65. data/lib/sober_swag/reporting/input/described.rb +38 -0
  66. data/lib/sober_swag/reporting/input/dictionary.rb +37 -0
  67. data/lib/sober_swag/reporting/input/either.rb +51 -0
  68. data/lib/sober_swag/reporting/input/enum.rb +44 -0
  69. data/lib/sober_swag/reporting/input/format.rb +39 -0
  70. data/lib/sober_swag/reporting/input/interface.rb +87 -0
  71. data/lib/sober_swag/reporting/input/list.rb +44 -0
  72. data/lib/sober_swag/reporting/input/mapped.rb +36 -0
  73. data/lib/sober_swag/reporting/input/merge_objects.rb +72 -0
  74. data/lib/sober_swag/reporting/input/null.rb +34 -0
  75. data/lib/sober_swag/reporting/input/number.rb +19 -0
  76. data/lib/sober_swag/reporting/input/object/property.rb +53 -0
  77. data/lib/sober_swag/reporting/input/object.rb +100 -0
  78. data/lib/sober_swag/reporting/input/pattern.rb +46 -0
  79. data/lib/sober_swag/reporting/input/referenced.rb +38 -0
  80. data/lib/sober_swag/reporting/input/struct.rb +271 -0
  81. data/lib/sober_swag/reporting/input/text.rb +42 -0
  82. data/lib/sober_swag/reporting/input.rb +54 -0
  83. data/lib/sober_swag/reporting/invalid_schema_error.rb +21 -0
  84. data/lib/sober_swag/reporting/output/base.rb +25 -0
  85. data/lib/sober_swag/reporting/output/bool.rb +25 -0
  86. data/lib/sober_swag/reporting/output/defer.rb +69 -0
  87. data/lib/sober_swag/reporting/output/described.rb +42 -0
  88. data/lib/sober_swag/reporting/output/dictionary.rb +46 -0
  89. data/lib/sober_swag/reporting/output/interface.rb +83 -0
  90. data/lib/sober_swag/reporting/output/list.rb +54 -0
  91. data/lib/sober_swag/reporting/output/merge_objects.rb +97 -0
  92. data/lib/sober_swag/reporting/output/null.rb +25 -0
  93. data/lib/sober_swag/reporting/output/number.rb +25 -0
  94. data/lib/sober_swag/reporting/output/object/property.rb +45 -0
  95. data/lib/sober_swag/reporting/output/object.rb +54 -0
  96. data/lib/sober_swag/reporting/output/partitioned.rb +77 -0
  97. data/lib/sober_swag/reporting/output/pattern.rb +50 -0
  98. data/lib/sober_swag/reporting/output/referenced.rb +42 -0
  99. data/lib/sober_swag/reporting/output/struct.rb +262 -0
  100. data/lib/sober_swag/reporting/output/text.rb +25 -0
  101. data/lib/sober_swag/reporting/output/via_map.rb +67 -0
  102. data/lib/sober_swag/reporting/output/viewed.rb +72 -0
  103. data/lib/sober_swag/reporting/output.rb +54 -0
  104. data/lib/sober_swag/reporting/report/base.rb +57 -0
  105. data/lib/sober_swag/reporting/report/either.rb +36 -0
  106. data/lib/sober_swag/reporting/report/error.rb +15 -0
  107. data/lib/sober_swag/reporting/report/list.rb +28 -0
  108. data/lib/sober_swag/reporting/report/merged_object.rb +25 -0
  109. data/lib/sober_swag/reporting/report/object.rb +29 -0
  110. data/lib/sober_swag/reporting/report/output.rb +14 -0
  111. data/lib/sober_swag/reporting/report/value.rb +28 -0
  112. data/lib/sober_swag/reporting/report.rb +16 -0
  113. data/lib/sober_swag/reporting.rb +11 -0
  114. data/lib/sober_swag/serializer/array.rb +27 -3
  115. data/lib/sober_swag/serializer/base.rb +75 -25
  116. data/lib/sober_swag/serializer/conditional.rb +33 -1
  117. data/lib/sober_swag/serializer/field_list.rb +23 -5
  118. data/lib/sober_swag/serializer/hash.rb +53 -0
  119. data/lib/sober_swag/serializer/mapped.rb +10 -1
  120. data/lib/sober_swag/serializer/optional.rb +18 -1
  121. data/lib/sober_swag/serializer/primitive.rb +3 -0
  122. data/lib/sober_swag/serializer.rb +1 -0
  123. data/lib/sober_swag/server.rb +27 -11
  124. data/lib/sober_swag/type/named.rb +14 -0
  125. data/lib/sober_swag/types/comma_array.rb +4 -0
  126. data/lib/sober_swag/version.rb +1 -1
  127. data/lib/sober_swag.rb +7 -1
  128. metadata +72 -2
data/lib/sober_swag.rb CHANGED
@@ -9,8 +9,10 @@ require 'sober_swag/version'
9
9
  require 'active_support/inflector'
10
10
 
11
11
  ##
12
- # Root namespace
12
+ # Root namespace for the SoberSwag Module.
13
13
  module SoberSwag
14
+ ##
15
+ # Root Error Class for SoberSwag errors.
14
16
  class Error < StandardError; end
15
17
 
16
18
  autoload :Parser, 'sober_swag/parser'
@@ -22,11 +24,15 @@ module SoberSwag
22
24
  autoload :InputObject, 'sober_swag/input_object'
23
25
  autoload :Server, 'sober_swag/server'
24
26
  autoload :Type, 'sober_swag/type'
27
+ autoload :Reporting, 'sober_swag/reporting'
25
28
 
26
29
  ##
27
30
  # Define a struct of something.
28
31
  # Useful to prevent weirdness from autoloading.
32
+ #
29
33
  # @param parent [Class] the base class for the struct (default of {SoberSwag::Struct})
34
+ # @yieldself [SoberSwag::InputObject]
35
+ # @return [Class] the input object class generated
30
36
  def self.input_object(parent = nil, &block)
31
37
  Class.new(parent || SoberSwag::InputObject, &block)
32
38
  end
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.18.0
4
+ version: 0.22.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: 2021-03-02 00:00:00.000000000 Z
11
+ date: 2021-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -172,6 +172,8 @@ extensions: []
172
172
  extra_rdoc_files: []
173
173
  files:
174
174
  - ".github/config/rubocop_linter_action.yml"
175
+ - ".github/dependabot.yml"
176
+ - ".github/workflows/benchmark.yml"
175
177
  - ".github/workflows/lint.yml"
176
178
  - ".github/workflows/ruby.yml"
177
179
  - ".gitignore"
@@ -179,14 +181,19 @@ files:
179
181
  - ".rubocop.yml"
180
182
  - ".ruby-version"
181
183
  - ".travis.yml"
184
+ - ".yardopts"
182
185
  - CHANGELOG.md
183
186
  - Gemfile
184
187
  - LICENSE.txt
185
188
  - README.md
186
189
  - Rakefile
190
+ - bench/benchmark.rb
191
+ - bench/benchmarks/basic_field_serializer.rb
192
+ - bench/benchmarks/view_selection.rb
187
193
  - bin/console
188
194
  - bin/rspec
189
195
  - bin/setup
196
+ - docs/reporting.md
190
197
  - docs/serializers.md
191
198
  - example/.gitignore
192
199
  - example/.rspec
@@ -204,12 +211,15 @@ files:
204
211
  - example/app/models/concerns/.keep
205
212
  - example/app/models/person.rb
206
213
  - example/app/models/post.rb
214
+ - example/app/output_objects/identified_output.rb
207
215
  - example/app/output_objects/person_errors_output_object.rb
208
216
  - example/app/output_objects/person_output_object.rb
209
217
  - example/app/output_objects/post_output_object.rb
218
+ - example/app/output_objects/reporting_post_output.rb
210
219
  - example/bin/bundle
211
220
  - example/bin/rails
212
221
  - example/bin/rake
222
+ - example/bin/rspec
213
223
  - example/bin/setup
214
224
  - example/bin/spring
215
225
  - example/config.ru
@@ -277,11 +287,71 @@ files:
277
287
  - lib/sober_swag/output_object/field_syntax.rb
278
288
  - lib/sober_swag/output_object/view.rb
279
289
  - lib/sober_swag/parser.rb
290
+ - lib/sober_swag/reporting.rb
291
+ - lib/sober_swag/reporting/compiler.rb
292
+ - lib/sober_swag/reporting/input.rb
293
+ - lib/sober_swag/reporting/input/base.rb
294
+ - lib/sober_swag/reporting/input/bool.rb
295
+ - lib/sober_swag/reporting/input/converting.rb
296
+ - lib/sober_swag/reporting/input/converting/bool.rb
297
+ - lib/sober_swag/reporting/input/converting/date.rb
298
+ - lib/sober_swag/reporting/input/converting/date_time.rb
299
+ - lib/sober_swag/reporting/input/converting/decimal.rb
300
+ - lib/sober_swag/reporting/input/converting/integer.rb
301
+ - lib/sober_swag/reporting/input/defer.rb
302
+ - lib/sober_swag/reporting/input/described.rb
303
+ - lib/sober_swag/reporting/input/dictionary.rb
304
+ - lib/sober_swag/reporting/input/either.rb
305
+ - lib/sober_swag/reporting/input/enum.rb
306
+ - lib/sober_swag/reporting/input/format.rb
307
+ - lib/sober_swag/reporting/input/interface.rb
308
+ - lib/sober_swag/reporting/input/list.rb
309
+ - lib/sober_swag/reporting/input/mapped.rb
310
+ - lib/sober_swag/reporting/input/merge_objects.rb
311
+ - lib/sober_swag/reporting/input/null.rb
312
+ - lib/sober_swag/reporting/input/number.rb
313
+ - lib/sober_swag/reporting/input/object.rb
314
+ - lib/sober_swag/reporting/input/object/property.rb
315
+ - lib/sober_swag/reporting/input/pattern.rb
316
+ - lib/sober_swag/reporting/input/referenced.rb
317
+ - lib/sober_swag/reporting/input/struct.rb
318
+ - lib/sober_swag/reporting/input/text.rb
319
+ - lib/sober_swag/reporting/invalid_schema_error.rb
320
+ - lib/sober_swag/reporting/output.rb
321
+ - lib/sober_swag/reporting/output/base.rb
322
+ - lib/sober_swag/reporting/output/bool.rb
323
+ - lib/sober_swag/reporting/output/defer.rb
324
+ - lib/sober_swag/reporting/output/described.rb
325
+ - lib/sober_swag/reporting/output/dictionary.rb
326
+ - lib/sober_swag/reporting/output/interface.rb
327
+ - lib/sober_swag/reporting/output/list.rb
328
+ - lib/sober_swag/reporting/output/merge_objects.rb
329
+ - lib/sober_swag/reporting/output/null.rb
330
+ - lib/sober_swag/reporting/output/number.rb
331
+ - lib/sober_swag/reporting/output/object.rb
332
+ - lib/sober_swag/reporting/output/object/property.rb
333
+ - lib/sober_swag/reporting/output/partitioned.rb
334
+ - lib/sober_swag/reporting/output/pattern.rb
335
+ - lib/sober_swag/reporting/output/referenced.rb
336
+ - lib/sober_swag/reporting/output/struct.rb
337
+ - lib/sober_swag/reporting/output/text.rb
338
+ - lib/sober_swag/reporting/output/via_map.rb
339
+ - lib/sober_swag/reporting/output/viewed.rb
340
+ - lib/sober_swag/reporting/report.rb
341
+ - lib/sober_swag/reporting/report/base.rb
342
+ - lib/sober_swag/reporting/report/either.rb
343
+ - lib/sober_swag/reporting/report/error.rb
344
+ - lib/sober_swag/reporting/report/list.rb
345
+ - lib/sober_swag/reporting/report/merged_object.rb
346
+ - lib/sober_swag/reporting/report/object.rb
347
+ - lib/sober_swag/reporting/report/output.rb
348
+ - lib/sober_swag/reporting/report/value.rb
280
349
  - lib/sober_swag/serializer.rb
281
350
  - lib/sober_swag/serializer/array.rb
282
351
  - lib/sober_swag/serializer/base.rb
283
352
  - lib/sober_swag/serializer/conditional.rb
284
353
  - lib/sober_swag/serializer/field_list.rb
354
+ - lib/sober_swag/serializer/hash.rb
285
355
  - lib/sober_swag/serializer/mapped.rb
286
356
  - lib/sober_swag/serializer/meta.rb
287
357
  - lib/sober_swag/serializer/optional.rb