media_types-serialization 2.0.4 → 2.1.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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +32 -32
  3. data/.github/workflows/publish-bookworm.yml +34 -34
  4. data/.github/workflows/publish-sid.yml +34 -34
  5. data/.gitignore +22 -22
  6. data/.idea/.rakeTasks +7 -7
  7. data/.idea/dictionaries/Derk_Jan.xml +6 -6
  8. data/.idea/encodings.xml +3 -3
  9. data/.idea/inspectionProfiles/Project_Default.xml +5 -5
  10. data/.idea/media_types-serialization.iml +76 -76
  11. data/.idea/misc.xml +6 -6
  12. data/.idea/modules.xml +7 -7
  13. data/.idea/runConfigurations/test.xml +19 -19
  14. data/.idea/vcs.xml +5 -5
  15. data/CHANGELOG.md +207 -200
  16. data/CODE_OF_CONDUCT.md +74 -74
  17. data/Gemfile +4 -4
  18. data/Gemfile.lock +176 -169
  19. data/LICENSE.txt +21 -21
  20. data/README.md +1058 -1048
  21. data/Rakefile +10 -10
  22. data/bin/console +14 -14
  23. data/bin/setup +8 -8
  24. data/lib/media_types/problem.rb +67 -67
  25. data/lib/media_types/serialization/base.rb +269 -269
  26. data/lib/media_types/serialization/error.rb +193 -193
  27. data/lib/media_types/serialization/fake_validator.rb +53 -53
  28. data/lib/media_types/serialization/serialization_dsl.rb +139 -135
  29. data/lib/media_types/serialization/serialization_registration.rb +245 -245
  30. data/lib/media_types/serialization/serializers/api_viewer.rb +383 -383
  31. data/lib/media_types/serialization/serializers/common_css.rb +212 -212
  32. data/lib/media_types/serialization/serializers/endpoint_description_serializer.rb +80 -80
  33. data/lib/media_types/serialization/serializers/fallback_not_acceptable_serializer.rb +85 -85
  34. data/lib/media_types/serialization/serializers/fallback_unsupported_media_type_serializer.rb +58 -58
  35. data/lib/media_types/serialization/serializers/input_validation_error_serializer.rb +95 -93
  36. data/lib/media_types/serialization/serializers/problem_serializer.rb +111 -111
  37. data/lib/media_types/serialization/utils/accept_header.rb +77 -77
  38. data/lib/media_types/serialization/utils/accept_language_header.rb +82 -82
  39. data/lib/media_types/serialization/version.rb +7 -7
  40. data/lib/media_types/serialization.rb +689 -689
  41. data/media_types-serialization.gemspec +48 -48
  42. metadata +3 -3
@@ -1,135 +1,139 @@
1
- # frozen_string_literal: true
2
-
3
- require 'delegate'
4
-
5
- module MediaTypes
6
- module Serialization
7
- # Provides the serialization convenience methods
8
- class SerializationDSL < SimpleDelegator
9
- def initialize(serializer, links = [], vary = ['Accept'], value = {}, context: nil)
10
- self.serialization_dsl_result = value
11
- @serialization_links = links
12
- @serialization_context = context
13
- @serialization_vary = vary
14
- @serialization_custom_render = nil
15
- super(serializer)
16
- end
17
-
18
- attr_accessor :serialization_dsl_result, :serialization_custom_render
19
-
20
- def attribute(key, value = {}, &block)
21
- unless block.nil?
22
- subcontext = SerializationDSL.new(__getobj__, @serialization_links, @serialization_vary, value, context: @serialization_context)
23
- value = subcontext.instance_exec(&block)
24
- end
25
-
26
- serialization_dsl_result[key] = value
27
-
28
- serialization_dsl_result
29
- end
30
-
31
- def link(rel, href:, emit_header: true, **attributes)
32
- serialization_dsl_result[:_links] = {} unless serialization_dsl_result.has_key? :_links
33
-
34
- link = {
35
- href: href,
36
- rel: rel,
37
- }
38
- link = link.merge(attributes)
39
-
40
- json = {
41
- href: href,
42
- }
43
- json = json.merge(attributes)
44
-
45
- @serialization_links.append(link) if emit_header
46
- serialization_dsl_result[:_links][rel] = json
47
-
48
- serialization_dsl_result
49
- end
50
-
51
- def index(array, serializer = __getobj__, version:, view: nil)
52
- raise CollectionTypeError, array.class.name unless array.is_a? Array
53
-
54
- links = []
55
- identifier = serializer.serializer_validator.view(view).version(version).identifier
56
-
57
- array.each do |e|
58
- child_links = []
59
- context = SerializationDSL.new(__getobj__, child_links, context: @serialization_context)
60
- serializer.serialize(e, identifier, context: @serialization_context, dsl: context)
61
-
62
- self_links = child_links.select { |l| l[:rel] == :self }
63
- raise NoSelfLinkProvidedError, identifier unless self_links.any?
64
- raise MultipleSelfLinksProvidedError, identifier if self_links.length > 1
65
-
66
- links.append(self_links.first.reject { |k, _| k == :rel } )
67
- end
68
-
69
- serialization_dsl_result[:_index] = links
70
-
71
- serialization_dsl_result
72
- end
73
-
74
- def collection(array, serializer = __getobj__, version:, view: nil, &block)
75
- raise CollectionTypeError, array.class.name unless array.is_a? Array
76
-
77
- identifier = serializer.serializer_validator.view(view).version(version).identifier
78
-
79
- rendered = []
80
-
81
- array.each do |e|
82
- context = SerializationDSL.new(__getobj__, [], @serialization_vary, context: @serialization_context)
83
- result = serializer.serialize(e, identifier, context: @serialization_context, dsl: context, raw: true)
84
-
85
- result = block.call(result) unless block.nil?
86
-
87
- rendered.append(result)
88
- end
89
-
90
- serialization_dsl_result[:_embedded] = rendered
91
-
92
- serialization_dsl_result
93
- end
94
-
95
- def hidden(&block)
96
- context = SerializationDSL.new(__getobj__, @serialization_links, context: @serialization_context)
97
- context.instance_exec(&block)
98
-
99
- serialization_dsl_result
100
- end
101
-
102
- def render_view(name, context:, **args)
103
- context.render_to_string(name, **args)
104
- end
105
-
106
- def emit
107
- serialization_dsl_result
108
- end
109
-
110
- def object(&block)
111
- context = SerializationDSL.new(__getobj__, @serialization_links, @serialization_vary, context: @serialization_context)
112
- context.instance_exec(&block)
113
-
114
- context.serialization_dsl_result
115
- end
116
-
117
- def redirect_to(url, context, **options)
118
- suppress_render do |result|
119
- context.redirect_to(
120
- url,
121
- **options
122
- )
123
- end
124
-
125
- "Redirecting to: #{url}"
126
- end
127
-
128
- def suppress_render(&block)
129
- @serialization_custom_render = block || lambda { |result| }
130
-
131
- serialization_dsl_result
132
- end
133
- end
134
- end
135
- end
1
+ # frozen_string_literal: true
2
+
3
+ require 'delegate'
4
+
5
+ module MediaTypes
6
+ module Serialization
7
+ # Provides the serialization convenience methods
8
+ class SerializationDSL < SimpleDelegator
9
+ def initialize(serializer, links = [], vary = ['Accept'], value = {}, context: nil)
10
+ self.serialization_dsl_result = value
11
+ @serialization_links = links
12
+ @serialization_context = context
13
+ @serialization_vary = vary
14
+ @serialization_custom_render = nil
15
+ super(serializer)
16
+ end
17
+
18
+ attr_accessor :serialization_dsl_result, :serialization_custom_render
19
+
20
+ def attribute(key, value = {}, &block)
21
+ unless block.nil?
22
+ subcontext = SerializationDSL.new(__getobj__, @serialization_links, @serialization_vary, value, context: @serialization_context)
23
+ value = subcontext.instance_exec(&block)
24
+ end
25
+
26
+ serialization_dsl_result[key] = value
27
+
28
+ serialization_dsl_result
29
+ end
30
+
31
+ def link(rel, href:, emit_header: true, **attributes)
32
+ serialization_dsl_result[:_links] = {} unless serialization_dsl_result.has_key? :_links
33
+
34
+ link = {
35
+ href: href,
36
+ rel: rel,
37
+ }
38
+ link = link.merge(attributes)
39
+
40
+ json = {
41
+ href: href,
42
+ }
43
+ json = json.merge(attributes)
44
+
45
+ @serialization_links.append(link) if emit_header
46
+ serialization_dsl_result[:_links][rel] = json
47
+
48
+ serialization_dsl_result
49
+ end
50
+
51
+ def index(array, serializer = __getobj__, version:, view: nil)
52
+ raise CollectionTypeError, array.class.name unless array.is_a? Array
53
+
54
+ links = []
55
+ identifier = serializer.serializer_validator.view(view).version(version).identifier
56
+
57
+ array.each do |e|
58
+ child_links = []
59
+ context = SerializationDSL.new(__getobj__, child_links, context: @serialization_context)
60
+ serializer.serialize(e, identifier, context: @serialization_context, dsl: context)
61
+
62
+ self_links = child_links.select { |l| l[:rel] == :self }
63
+ raise NoSelfLinkProvidedError, identifier unless self_links.any?
64
+ raise MultipleSelfLinksProvidedError, identifier if self_links.length > 1
65
+
66
+ links.append(self_links.first.reject { |k, _| k == :rel } )
67
+ end
68
+
69
+ serialization_dsl_result[:_index] = links
70
+
71
+ serialization_dsl_result
72
+ end
73
+
74
+ def collection(array, serializer = __getobj__, version:, view: nil, &block)
75
+ raise CollectionTypeError, array.class.name unless array.is_a? Array
76
+
77
+ identifier = serializer.serializer_validator.view(view).version(version).identifier
78
+
79
+ rendered = []
80
+
81
+ array.each do |e|
82
+ context = SerializationDSL.new(__getobj__, [], @serialization_vary, context: @serialization_context)
83
+ result = serializer.serialize(e, identifier, context: @serialization_context, dsl: context, raw: true)
84
+
85
+ result = block.call(result) unless block.nil?
86
+
87
+ rendered.append(result)
88
+ end
89
+
90
+ serialization_dsl_result[:_embedded] = rendered
91
+
92
+ serialization_dsl_result
93
+ end
94
+
95
+ def hidden(&block)
96
+ context = SerializationDSL.new(__getobj__, @serialization_links, context: @serialization_context)
97
+ context.instance_exec(&block)
98
+
99
+ serialization_dsl_result
100
+ end
101
+
102
+ def render_view(name, context:, **args)
103
+ context.render_to_string(name, **args)
104
+ end
105
+
106
+ def emit
107
+ serialization_dsl_result
108
+ end
109
+
110
+ def object(&block)
111
+ context = SerializationDSL.new(__getobj__, @serialization_links, @serialization_vary, context: @serialization_context)
112
+ context.instance_exec(&block)
113
+
114
+ context.serialization_dsl_result
115
+ end
116
+
117
+ def varies_on_header(header)
118
+ @serialization_vary.push(header) unless @serialization_vary.include? header
119
+ end
120
+
121
+ def redirect_to(url, context, **options)
122
+ suppress_render do |result|
123
+ context.redirect_to(
124
+ url,
125
+ **options
126
+ )
127
+ end
128
+
129
+ "Redirecting to: #{url}"
130
+ end
131
+
132
+ def suppress_render(&block)
133
+ @serialization_custom_render = block || lambda { |result| }
134
+
135
+ serialization_dsl_result
136
+ end
137
+ end
138
+ end
139
+ end