sober_swag 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. checksums.yaml +4 -4
  2. data/.github/config/rubocop_linter_action.yml +5 -0
  3. data/.github/workflows/lint.yml +15 -0
  4. data/.github/workflows/ruby.yml +23 -1
  5. data/.gitignore +3 -0
  6. data/.rubocop.yml +73 -1
  7. data/.ruby-version +1 -1
  8. data/Gemfile.lock +29 -5
  9. data/README.md +109 -0
  10. data/bin/console +15 -14
  11. data/docs/serializers.md +203 -0
  12. data/example/.rspec +1 -0
  13. data/example/.ruby-version +1 -1
  14. data/example/Gemfile +10 -6
  15. data/example/Gemfile.lock +96 -76
  16. data/example/app/controllers/people_controller.rb +37 -21
  17. data/example/app/controllers/posts_controller.rb +102 -0
  18. data/example/app/models/application_record.rb +3 -0
  19. data/example/app/models/person.rb +6 -0
  20. data/example/app/models/post.rb +9 -0
  21. data/example/app/output_objects/person_errors_output_object.rb +5 -0
  22. data/example/app/output_objects/person_output_object.rb +15 -0
  23. data/example/app/output_objects/post_output_object.rb +10 -0
  24. data/example/bin/bundle +24 -20
  25. data/example/bin/rails +1 -1
  26. data/example/bin/rake +1 -1
  27. data/example/config/application.rb +11 -7
  28. data/example/config/environments/development.rb +0 -1
  29. data/example/config/environments/production.rb +3 -3
  30. data/example/config/puma.rb +5 -5
  31. data/example/config/routes.rb +3 -0
  32. data/example/config/spring.rb +4 -4
  33. data/example/db/migrate/20200311152021_create_people.rb +0 -1
  34. data/example/db/migrate/20200603172347_create_posts.rb +11 -0
  35. data/example/db/schema.rb +16 -7
  36. data/example/spec/rails_helper.rb +64 -0
  37. data/example/spec/requests/people/create_spec.rb +52 -0
  38. data/example/spec/requests/people/get_spec.rb +35 -0
  39. data/example/spec/requests/people/index_spec.rb +69 -0
  40. data/example/spec/spec_helper.rb +94 -0
  41. data/lib/sober_swag.rb +6 -3
  42. data/lib/sober_swag/compiler/error.rb +2 -0
  43. data/lib/sober_swag/compiler/path.rb +2 -5
  44. data/lib/sober_swag/compiler/paths.rb +0 -1
  45. data/lib/sober_swag/compiler/type.rb +28 -15
  46. data/lib/sober_swag/controller.rb +16 -11
  47. data/lib/sober_swag/controller/route.rb +18 -21
  48. data/lib/sober_swag/controller/undefined_body_error.rb +3 -0
  49. data/lib/sober_swag/controller/undefined_path_error.rb +3 -0
  50. data/lib/sober_swag/controller/undefined_query_error.rb +3 -0
  51. data/lib/sober_swag/input_object.rb +28 -0
  52. data/lib/sober_swag/nodes/array.rb +1 -1
  53. data/lib/sober_swag/nodes/base.rb +2 -4
  54. data/lib/sober_swag/nodes/binary.rb +2 -1
  55. data/lib/sober_swag/nodes/enum.rb +4 -2
  56. data/lib/sober_swag/nodes/list.rb +0 -1
  57. data/lib/sober_swag/nodes/primitive.rb +6 -5
  58. data/lib/sober_swag/output_object.rb +102 -0
  59. data/lib/sober_swag/output_object/definition.rb +30 -0
  60. data/lib/sober_swag/{blueprint → output_object}/field.rb +14 -4
  61. data/lib/sober_swag/{blueprint → output_object}/field_syntax.rb +1 -1
  62. data/lib/sober_swag/{blueprint → output_object}/view.rb +15 -6
  63. data/lib/sober_swag/parser.rb +5 -3
  64. data/lib/sober_swag/serializer.rb +5 -2
  65. data/lib/sober_swag/serializer/array.rb +12 -0
  66. data/lib/sober_swag/serializer/base.rb +50 -1
  67. data/lib/sober_swag/serializer/conditional.rb +15 -2
  68. data/lib/sober_swag/serializer/field_list.rb +29 -6
  69. data/lib/sober_swag/serializer/mapped.rb +12 -2
  70. data/lib/sober_swag/serializer/meta.rb +35 -0
  71. data/lib/sober_swag/serializer/optional.rb +17 -2
  72. data/lib/sober_swag/serializer/primitive.rb +4 -1
  73. data/lib/sober_swag/server.rb +83 -0
  74. data/lib/sober_swag/types.rb +3 -0
  75. data/lib/sober_swag/version.rb +1 -1
  76. data/sober_swag.gemspec +6 -4
  77. metadata +77 -44
  78. data/example/person.json +0 -4
  79. data/example/test/controllers/.keep +0 -0
  80. data/example/test/fixtures/.keep +0 -0
  81. data/example/test/fixtures/files/.keep +0 -0
  82. data/example/test/fixtures/people.yml +0 -11
  83. data/example/test/integration/.keep +0 -0
  84. data/example/test/models/.keep +0 -0
  85. data/example/test/models/person_test.rb +0 -7
  86. data/example/test/test_helper.rb +0 -13
  87. data/lib/sober_swag/blueprint.rb +0 -113
  88. data/lib/sober_swag/path.rb +0 -8
  89. data/lib/sober_swag/path/integer.rb +0 -21
  90. data/lib/sober_swag/path/lit.rb +0 -41
  91. data/lib/sober_swag/path/literal.rb +0 -29
  92. data/lib/sober_swag/path/param.rb +0 -33
@@ -1,8 +0,0 @@
1
- module SoberSwag
2
- class Path
3
-
4
- autoload(:Lit, 'sober_swag/path/lit')
5
- autoload(:Param, 'sober_swag/path/param')
6
-
7
- end
8
- end
@@ -1,21 +0,0 @@
1
- module SoberSwag
2
- module Path
3
- class Integer < Node
4
-
5
- def initialize; end;
6
-
7
- def jumpable?
8
- true
9
- end
10
-
11
- def param?
12
- true
13
- end
14
-
15
- def param_type
16
- SoberSwag::Types::Paramter::Integer
17
- end
18
-
19
- end
20
- end
21
- end
@@ -1,41 +0,0 @@
1
- module SoberSwag
2
- class Path
3
- class Lit
4
- ##
5
- # Parse a literal path fragment
6
- def initialize(lit)
7
- @lit = lit
8
- end
9
-
10
- attr_reader :lit
11
-
12
- def param?
13
- false
14
- end
15
-
16
- def param_type
17
- nil
18
- end
19
-
20
- def param_key
21
- nil
22
- end
23
-
24
- ##
25
- # Constant to avoid a bunch of array allocation
26
- MATCH_SUCC = [:match, nil].freeze
27
- ##
28
- # Constant to avoid a bunch of array allocation
29
- MATHC_FAIL = [:fail].freeze
30
-
31
- def match(param)
32
- if param == lit
33
- MATCH_SUCC
34
- else
35
- MATCH_FAIL
36
- end
37
- end
38
-
39
- end
40
- end
41
- end
@@ -1,29 +0,0 @@
1
- module SoberSwag
2
- module Path
3
- ##
4
- # One literal text fragment, basically
5
- class Literal < Node
6
- ##
7
- # Make a new text node
8
- # @param text [String]
9
- def initialize(text)
10
- @text = text
11
- end
12
-
13
- attr_reader :text
14
-
15
- ##
16
- # We can make a jump table out of this node!
17
- def jumpable?
18
- true
19
- end
20
-
21
- ##
22
- # This doesn't read a parameter type.
23
- def param?
24
- false
25
- end
26
-
27
- end
28
- end
29
- end
@@ -1,33 +0,0 @@
1
- module SoberSwag
2
- class Path
3
- ##
4
- # Parse a parameter
5
- class Param
6
- def initialize(name, type)
7
- @name = name
8
- @type = type
9
- end
10
-
11
- def param?
12
- true
13
- end
14
-
15
- def param_key
16
- @name
17
- end
18
-
19
- def param_type
20
- @type
21
- end
22
-
23
- def match(param)
24
- if (m = @type.try(param)).success?
25
- [:match, m]
26
- else
27
- [:fail]
28
- end
29
- end
30
-
31
- end
32
- end
33
- end