sober_swag 0.21.0 → 0.22.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/CHANGELOG.md +5 -0
  4. data/bin/console +30 -10
  5. data/docs/reporting.md +190 -0
  6. data/example/Gemfile +2 -2
  7. data/example/Gemfile.lock +92 -101
  8. data/example/app/controllers/application_controller.rb +4 -0
  9. data/example/app/controllers/people_controller.rb +44 -28
  10. data/example/app/output_objects/identified_output.rb +7 -0
  11. data/example/app/output_objects/person_output_object.rb +37 -11
  12. data/example/app/output_objects/post_output_object.rb +0 -4
  13. data/example/app/output_objects/reporting_post_output.rb +18 -0
  14. data/example/bin/rspec +29 -0
  15. data/example/spec/requests/people/create_spec.rb +3 -2
  16. data/example/spec/requests/people/index_spec.rb +1 -1
  17. data/lib/sober_swag/compiler/path.rb +3 -1
  18. data/lib/sober_swag/compiler.rb +58 -12
  19. data/lib/sober_swag/controller/route.rb +44 -8
  20. data/lib/sober_swag/controller.rb +18 -5
  21. data/lib/sober_swag/reporting/compiler.rb +39 -0
  22. data/lib/sober_swag/reporting/input/base.rb +11 -0
  23. data/lib/sober_swag/reporting/input/bool.rb +19 -0
  24. data/lib/sober_swag/reporting/input/converting/bool.rb +24 -0
  25. data/lib/sober_swag/reporting/input/converting/date.rb +30 -0
  26. data/lib/sober_swag/reporting/input/converting/date_time.rb +28 -0
  27. data/lib/sober_swag/reporting/input/converting/decimal.rb +24 -0
  28. data/lib/sober_swag/reporting/input/converting/integer.rb +19 -0
  29. data/lib/sober_swag/reporting/input/converting.rb +16 -0
  30. data/lib/sober_swag/reporting/input/defer.rb +29 -0
  31. data/lib/sober_swag/reporting/input/described.rb +38 -0
  32. data/lib/sober_swag/reporting/input/dictionary.rb +37 -0
  33. data/lib/sober_swag/reporting/input/either.rb +51 -0
  34. data/lib/sober_swag/reporting/input/enum.rb +44 -0
  35. data/lib/sober_swag/reporting/input/format.rb +39 -0
  36. data/lib/sober_swag/reporting/input/interface.rb +87 -0
  37. data/lib/sober_swag/reporting/input/list.rb +44 -0
  38. data/lib/sober_swag/reporting/input/mapped.rb +36 -0
  39. data/lib/sober_swag/reporting/input/merge_objects.rb +72 -0
  40. data/lib/sober_swag/reporting/input/null.rb +34 -0
  41. data/lib/sober_swag/reporting/input/number.rb +19 -0
  42. data/lib/sober_swag/reporting/input/object/property.rb +53 -0
  43. data/lib/sober_swag/reporting/input/object.rb +100 -0
  44. data/lib/sober_swag/reporting/input/pattern.rb +46 -0
  45. data/lib/sober_swag/reporting/input/referenced.rb +38 -0
  46. data/lib/sober_swag/reporting/input/struct.rb +271 -0
  47. data/lib/sober_swag/reporting/input/text.rb +42 -0
  48. data/lib/sober_swag/reporting/input.rb +54 -0
  49. data/lib/sober_swag/reporting/invalid_schema_error.rb +21 -0
  50. data/lib/sober_swag/reporting/output/base.rb +25 -0
  51. data/lib/sober_swag/reporting/output/bool.rb +25 -0
  52. data/lib/sober_swag/reporting/output/defer.rb +69 -0
  53. data/lib/sober_swag/reporting/output/described.rb +42 -0
  54. data/lib/sober_swag/reporting/output/dictionary.rb +46 -0
  55. data/lib/sober_swag/reporting/output/interface.rb +83 -0
  56. data/lib/sober_swag/reporting/output/list.rb +54 -0
  57. data/lib/sober_swag/reporting/output/merge_objects.rb +97 -0
  58. data/lib/sober_swag/reporting/output/null.rb +25 -0
  59. data/lib/sober_swag/reporting/output/number.rb +25 -0
  60. data/lib/sober_swag/reporting/output/object/property.rb +45 -0
  61. data/lib/sober_swag/reporting/output/object.rb +54 -0
  62. data/lib/sober_swag/reporting/output/partitioned.rb +77 -0
  63. data/lib/sober_swag/reporting/output/pattern.rb +50 -0
  64. data/lib/sober_swag/reporting/output/referenced.rb +42 -0
  65. data/lib/sober_swag/reporting/output/struct.rb +262 -0
  66. data/lib/sober_swag/reporting/output/text.rb +25 -0
  67. data/lib/sober_swag/reporting/output/via_map.rb +67 -0
  68. data/lib/sober_swag/reporting/output/viewed.rb +72 -0
  69. data/lib/sober_swag/reporting/output.rb +54 -0
  70. data/lib/sober_swag/reporting/report/base.rb +57 -0
  71. data/lib/sober_swag/reporting/report/either.rb +36 -0
  72. data/lib/sober_swag/reporting/report/error.rb +15 -0
  73. data/lib/sober_swag/reporting/report/list.rb +28 -0
  74. data/lib/sober_swag/reporting/report/merged_object.rb +25 -0
  75. data/lib/sober_swag/reporting/report/object.rb +29 -0
  76. data/lib/sober_swag/reporting/report/output.rb +14 -0
  77. data/lib/sober_swag/reporting/report/value.rb +28 -0
  78. data/lib/sober_swag/reporting/report.rb +16 -0
  79. data/lib/sober_swag/reporting.rb +11 -0
  80. data/lib/sober_swag/version.rb +1 -1
  81. data/lib/sober_swag.rb +1 -0
  82. metadata +65 -2
@@ -0,0 +1,29 @@
1
+ module SoberSwag
2
+ module Reporting
3
+ module Report
4
+ ##
5
+ # Report on problems with an object.
6
+ class Object < Base
7
+ ##
8
+ # @param problems [Hash<Symbol, Report::Base>] the problems with each value.
9
+ def initialize(problems)
10
+ @problems = problems
11
+ end
12
+
13
+ ##
14
+ # @return [Hash] the hash being reported on
15
+ attr_reader :problems
16
+
17
+ def each_error
18
+ return enum_for(:each_error) unless block_given?
19
+
20
+ problems.each do |k, v|
21
+ v.each_error do |nested, err|
22
+ yield [".#{k}", nested].reject(&:nil?).join(''), err
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,14 @@
1
+ module SoberSwag
2
+ module Reporting
3
+ module Report
4
+ ##
5
+ # Output suitable to serialize an instance of {SoberSwag::Reporting::Report::Base} to
6
+ # a nice key-value thing.
7
+ Output = SoberSwag::Reporting::Output::Dictionary.of(
8
+ SoberSwag::Reporting::Output::List.new(
9
+ SoberSwag::Reporting::Output.text
10
+ )
11
+ ).via_map(&:path_hash)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,28 @@
1
+ module SoberSwag
2
+ module Reporting
3
+ module Report
4
+ ##
5
+ # Report for a single value.
6
+ # Basically a wrapper around an array of strings.
7
+ class Value < Base
8
+ ##
9
+ # @param problems [Array<String>] problems with it
10
+ def initialize(problems)
11
+ @problems = problems
12
+ end
13
+
14
+ ##
15
+ # @return [Array<String>] the problems the value had
16
+ attr_reader :problems
17
+
18
+ def each_error
19
+ return enum_for(:each_error) unless block_given?
20
+
21
+ problems.each do |problem|
22
+ yield nil, problem
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ module SoberSwag
2
+ module Reporting
3
+ ##
4
+ # Namespace modules for the various "reporters," or things that provide error handling.
5
+ module Report
6
+ autoload :Base, 'sober_swag/reporting/report/base'
7
+ autoload :Either, 'sober_swag/reporting/report/either'
8
+ autoload :Error, 'sober_swag/reporting/report/error'
9
+ autoload :Object, 'sober_swag/reporting/report/object'
10
+ autoload :Output, 'sober_swag/reporting/report/output'
11
+ autoload :MergedObject, 'sober_swag/reporting/report/merged_object'
12
+ autoload :Value, 'sober_swag/reporting/report/value'
13
+ autoload :List, 'sober_swag/reporting/report/list'
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ module SoberSwag
2
+ ##
3
+ # A new module for parsers with better error reporting.
4
+ module Reporting
5
+ autoload :Input, 'sober_swag/reporting/input'
6
+ autoload :Report, 'sober_swag/reporting/report'
7
+ autoload :Output, 'sober_swag/reporting/output'
8
+ autoload :Compiler, 'sober_swag/reporting/compiler'
9
+ autoload :InvalidSchemaError, 'sober_swag/reporting/invalid_schema_error'
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SoberSwag
4
- VERSION = '0.21.0'
4
+ VERSION = '0.22.0'
5
5
  end
data/lib/sober_swag.rb CHANGED
@@ -24,6 +24,7 @@ module SoberSwag
24
24
  autoload :InputObject, 'sober_swag/input_object'
25
25
  autoload :Server, 'sober_swag/server'
26
26
  autoload :Type, 'sober_swag/type'
27
+ autoload :Reporting, 'sober_swag/reporting'
27
28
 
28
29
  ##
29
30
  # Define a struct of something.
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.21.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-09-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
@@ -193,6 +193,7 @@ files:
193
193
  - bin/console
194
194
  - bin/rspec
195
195
  - bin/setup
196
+ - docs/reporting.md
196
197
  - docs/serializers.md
197
198
  - example/.gitignore
198
199
  - example/.rspec
@@ -210,12 +211,15 @@ files:
210
211
  - example/app/models/concerns/.keep
211
212
  - example/app/models/person.rb
212
213
  - example/app/models/post.rb
214
+ - example/app/output_objects/identified_output.rb
213
215
  - example/app/output_objects/person_errors_output_object.rb
214
216
  - example/app/output_objects/person_output_object.rb
215
217
  - example/app/output_objects/post_output_object.rb
218
+ - example/app/output_objects/reporting_post_output.rb
216
219
  - example/bin/bundle
217
220
  - example/bin/rails
218
221
  - example/bin/rake
222
+ - example/bin/rspec
219
223
  - example/bin/setup
220
224
  - example/bin/spring
221
225
  - example/config.ru
@@ -283,6 +287,65 @@ files:
283
287
  - lib/sober_swag/output_object/field_syntax.rb
284
288
  - lib/sober_swag/output_object/view.rb
285
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
286
349
  - lib/sober_swag/serializer.rb
287
350
  - lib/sober_swag/serializer/array.rb
288
351
  - lib/sober_swag/serializer/base.rb