active_model_serializers 0.10.7 → 0.10.12

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 (213) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +62 -1
  3. data/README.md +20 -20
  4. data/lib/action_controller/serialization.rb +11 -1
  5. data/lib/active_model/serializable_resource.rb +2 -0
  6. data/lib/active_model/serializer.rb +33 -18
  7. data/lib/active_model/serializer/adapter.rb +2 -0
  8. data/lib/active_model/serializer/adapter/attributes.rb +2 -0
  9. data/lib/active_model/serializer/adapter/base.rb +2 -0
  10. data/lib/active_model/serializer/adapter/json.rb +2 -0
  11. data/lib/active_model/serializer/adapter/json_api.rb +2 -0
  12. data/lib/active_model/serializer/adapter/null.rb +2 -0
  13. data/lib/active_model/serializer/array_serializer.rb +2 -0
  14. data/lib/active_model/serializer/association.rb +2 -0
  15. data/lib/active_model/serializer/attribute.rb +2 -0
  16. data/lib/active_model/serializer/belongs_to_reflection.rb +2 -0
  17. data/lib/active_model/serializer/collection_serializer.rb +6 -6
  18. data/lib/active_model/serializer/concerns/caching.rb +7 -2
  19. data/lib/active_model/serializer/error_serializer.rb +2 -0
  20. data/lib/active_model/serializer/errors_serializer.rb +2 -0
  21. data/lib/active_model/serializer/field.rb +2 -0
  22. data/lib/active_model/serializer/fieldset.rb +3 -1
  23. data/lib/active_model/serializer/has_many_reflection.rb +2 -0
  24. data/lib/active_model/serializer/has_one_reflection.rb +2 -0
  25. data/lib/active_model/serializer/lazy_association.rb +6 -2
  26. data/lib/active_model/serializer/link.rb +23 -0
  27. data/lib/active_model/serializer/lint.rb +2 -0
  28. data/lib/active_model/serializer/null.rb +2 -0
  29. data/lib/active_model/serializer/reflection.rb +9 -4
  30. data/lib/active_model/serializer/version.rb +3 -1
  31. data/lib/active_model_serializers.rb +20 -10
  32. data/lib/active_model_serializers/adapter.rb +3 -1
  33. data/lib/active_model_serializers/adapter/attributes.rb +23 -0
  34. data/lib/active_model_serializers/adapter/base.rb +2 -0
  35. data/lib/active_model_serializers/adapter/json.rb +2 -0
  36. data/lib/active_model_serializers/adapter/json_api.rb +14 -9
  37. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +2 -0
  38. data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
  39. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
  40. data/lib/active_model_serializers/adapter/json_api/link.rb +2 -0
  41. data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
  42. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +2 -0
  43. data/lib/active_model_serializers/adapter/json_api/relationship.rb +2 -0
  44. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +3 -1
  45. data/lib/active_model_serializers/adapter/null.rb +2 -0
  46. data/lib/active_model_serializers/callbacks.rb +2 -0
  47. data/lib/active_model_serializers/deprecate.rb +2 -0
  48. data/lib/active_model_serializers/deserialization.rb +2 -0
  49. data/lib/active_model_serializers/json_pointer.rb +2 -0
  50. data/lib/active_model_serializers/logging.rb +2 -0
  51. data/lib/active_model_serializers/lookup_chain.rb +2 -0
  52. data/lib/active_model_serializers/model.rb +2 -0
  53. data/lib/active_model_serializers/model/caching.rb +25 -0
  54. data/lib/active_model_serializers/railtie.rb +4 -0
  55. data/lib/active_model_serializers/register_jsonapi_renderer.rb +2 -0
  56. data/lib/active_model_serializers/serializable_resource.rb +4 -2
  57. data/lib/active_model_serializers/serialization_context.rb +2 -0
  58. data/lib/active_model_serializers/test.rb +2 -0
  59. data/lib/active_model_serializers/test/schema.rb +2 -0
  60. data/lib/active_model_serializers/test/serializer.rb +2 -0
  61. data/lib/generators/rails/resource_override.rb +2 -0
  62. data/lib/generators/rails/serializer_generator.rb +2 -0
  63. data/lib/grape/active_model_serializers.rb +2 -0
  64. data/lib/grape/formatters/active_model_serializers.rb +2 -0
  65. data/lib/grape/helpers/active_model_serializers.rb +2 -0
  66. data/lib/tasks/rubocop.rake +2 -0
  67. metadata +70 -295
  68. data/.github/ISSUE_TEMPLATE.md +0 -29
  69. data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
  70. data/.gitignore +0 -35
  71. data/.rubocop.yml +0 -105
  72. data/.simplecov +0 -110
  73. data/.travis.yml +0 -52
  74. data/CODE_OF_CONDUCT.md +0 -74
  75. data/CONTRIBUTING.md +0 -105
  76. data/Gemfile +0 -72
  77. data/Rakefile +0 -74
  78. data/active_model_serializers.gemspec +0 -63
  79. data/appveyor.yml +0 -28
  80. data/bin/bench +0 -171
  81. data/bin/bench_regression +0 -316
  82. data/bin/rubocop +0 -38
  83. data/bin/serve_benchmark +0 -39
  84. data/docs/README.md +0 -41
  85. data/docs/STYLE.md +0 -58
  86. data/docs/general/adapters.md +0 -269
  87. data/docs/general/caching.md +0 -58
  88. data/docs/general/configuration_options.md +0 -185
  89. data/docs/general/deserialization.md +0 -100
  90. data/docs/general/fields.md +0 -31
  91. data/docs/general/getting_started.md +0 -133
  92. data/docs/general/instrumentation.md +0 -40
  93. data/docs/general/key_transforms.md +0 -40
  94. data/docs/general/logging.md +0 -21
  95. data/docs/general/rendering.md +0 -293
  96. data/docs/general/serializers.md +0 -483
  97. data/docs/how-open-source-maintained.jpg +0 -0
  98. data/docs/howto/add_pagination_links.md +0 -138
  99. data/docs/howto/add_relationship_links.md +0 -140
  100. data/docs/howto/add_root_key.md +0 -62
  101. data/docs/howto/grape_integration.md +0 -42
  102. data/docs/howto/outside_controller_use.md +0 -66
  103. data/docs/howto/passing_arbitrary_options.md +0 -27
  104. data/docs/howto/serialize_poro.md +0 -73
  105. data/docs/howto/test.md +0 -154
  106. data/docs/howto/upgrade_from_0_8_to_0_10.md +0 -265
  107. data/docs/integrations/ember-and-json-api.md +0 -147
  108. data/docs/integrations/grape.md +0 -19
  109. data/docs/jsonapi/errors.md +0 -56
  110. data/docs/jsonapi/schema.md +0 -151
  111. data/docs/jsonapi/schema/schema.json +0 -366
  112. data/docs/rfcs/0000-namespace.md +0 -106
  113. data/docs/rfcs/template.md +0 -15
  114. data/test/action_controller/adapter_selector_test.rb +0 -62
  115. data/test/action_controller/explicit_serializer_test.rb +0 -135
  116. data/test/action_controller/json/include_test.rb +0 -246
  117. data/test/action_controller/json_api/deserialization_test.rb +0 -112
  118. data/test/action_controller/json_api/errors_test.rb +0 -40
  119. data/test/action_controller/json_api/fields_test.rb +0 -66
  120. data/test/action_controller/json_api/linked_test.rb +0 -202
  121. data/test/action_controller/json_api/pagination_test.rb +0 -124
  122. data/test/action_controller/json_api/transform_test.rb +0 -189
  123. data/test/action_controller/lookup_proc_test.rb +0 -49
  124. data/test/action_controller/namespace_lookup_test.rb +0 -232
  125. data/test/action_controller/serialization_scope_name_test.rb +0 -235
  126. data/test/action_controller/serialization_test.rb +0 -472
  127. data/test/active_model_serializers/adapter_for_test.rb +0 -208
  128. data/test/active_model_serializers/json_pointer_test.rb +0 -22
  129. data/test/active_model_serializers/logging_test.rb +0 -77
  130. data/test/active_model_serializers/model_test.rb +0 -142
  131. data/test/active_model_serializers/railtie_test_isolated.rb +0 -68
  132. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +0 -161
  133. data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -71
  134. data/test/active_model_serializers/test/schema_test.rb +0 -131
  135. data/test/active_model_serializers/test/serializer_test.rb +0 -62
  136. data/test/active_record_test.rb +0 -9
  137. data/test/adapter/attributes_test.rb +0 -40
  138. data/test/adapter/deprecation_test.rb +0 -100
  139. data/test/adapter/json/belongs_to_test.rb +0 -45
  140. data/test/adapter/json/collection_test.rb +0 -104
  141. data/test/adapter/json/has_many_test.rb +0 -53
  142. data/test/adapter/json/transform_test.rb +0 -93
  143. data/test/adapter/json_api/belongs_to_test.rb +0 -155
  144. data/test/adapter/json_api/collection_test.rb +0 -96
  145. data/test/adapter/json_api/errors_test.rb +0 -76
  146. data/test/adapter/json_api/fields_test.rb +0 -96
  147. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -96
  148. data/test/adapter/json_api/has_many_test.rb +0 -173
  149. data/test/adapter/json_api/has_one_test.rb +0 -80
  150. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -213
  151. data/test/adapter/json_api/json_api_test.rb +0 -33
  152. data/test/adapter/json_api/linked_test.rb +0 -413
  153. data/test/adapter/json_api/links_test.rb +0 -95
  154. data/test/adapter/json_api/pagination_links_test.rb +0 -206
  155. data/test/adapter/json_api/parse_test.rb +0 -137
  156. data/test/adapter/json_api/relationship_test.rb +0 -397
  157. data/test/adapter/json_api/resource_meta_test.rb +0 -100
  158. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -82
  159. data/test/adapter/json_api/transform_test.rb +0 -512
  160. data/test/adapter/json_api/type_test.rb +0 -193
  161. data/test/adapter/json_test.rb +0 -46
  162. data/test/adapter/null_test.rb +0 -22
  163. data/test/adapter/polymorphic_test.rb +0 -218
  164. data/test/adapter_test.rb +0 -67
  165. data/test/array_serializer_test.rb +0 -22
  166. data/test/benchmark/app.rb +0 -65
  167. data/test/benchmark/benchmarking_support.rb +0 -67
  168. data/test/benchmark/bm_active_record.rb +0 -81
  169. data/test/benchmark/bm_adapter.rb +0 -38
  170. data/test/benchmark/bm_caching.rb +0 -119
  171. data/test/benchmark/bm_lookup_chain.rb +0 -83
  172. data/test/benchmark/bm_transform.rb +0 -45
  173. data/test/benchmark/config.ru +0 -3
  174. data/test/benchmark/controllers.rb +0 -83
  175. data/test/benchmark/fixtures.rb +0 -219
  176. data/test/cache_test.rb +0 -651
  177. data/test/collection_serializer_test.rb +0 -127
  178. data/test/fixtures/active_record.rb +0 -113
  179. data/test/fixtures/poro.rb +0 -225
  180. data/test/generators/scaffold_controller_generator_test.rb +0 -24
  181. data/test/generators/serializer_generator_test.rb +0 -75
  182. data/test/grape_test.rb +0 -196
  183. data/test/lint_test.rb +0 -49
  184. data/test/logger_test.rb +0 -20
  185. data/test/poro_test.rb +0 -9
  186. data/test/serializable_resource_test.rb +0 -79
  187. data/test/serializers/association_macros_test.rb +0 -37
  188. data/test/serializers/associations_test.rb +0 -468
  189. data/test/serializers/attribute_test.rb +0 -153
  190. data/test/serializers/attributes_test.rb +0 -52
  191. data/test/serializers/caching_configuration_test_isolated.rb +0 -170
  192. data/test/serializers/configuration_test.rb +0 -32
  193. data/test/serializers/fieldset_test.rb +0 -14
  194. data/test/serializers/meta_test.rb +0 -202
  195. data/test/serializers/options_test.rb +0 -32
  196. data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
  197. data/test/serializers/reflection_test.rb +0 -427
  198. data/test/serializers/root_test.rb +0 -21
  199. data/test/serializers/serialization_test.rb +0 -55
  200. data/test/serializers/serializer_for_test.rb +0 -136
  201. data/test/serializers/serializer_for_with_namespace_test.rb +0 -88
  202. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  203. data/test/support/isolated_unit.rb +0 -84
  204. data/test/support/rails5_shims.rb +0 -53
  205. data/test/support/rails_app.rb +0 -38
  206. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  207. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  208. data/test/support/schemas/custom/show.json +0 -7
  209. data/test/support/schemas/hyper_schema.json +0 -93
  210. data/test/support/schemas/render_using_json_api.json +0 -43
  211. data/test/support/schemas/simple_json_pointers.json +0 -10
  212. data/test/support/serialization_testing.rb +0 -79
  213. data/test/test_helper.rb +0 -70
@@ -1,189 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActionController
4
- module Serialization
5
- class JsonApi
6
- class KeyTransformTest < ActionController::TestCase
7
- class KeyTransformTestController < ActionController::Base
8
- class Post < ::Model
9
- attributes :title, :body, :publish_at
10
- associations :author, :top_comments
11
- end
12
- class Author < ::Model
13
- attributes :first_name, :last_name
14
- end
15
- class TopComment < ::Model
16
- attributes :body
17
- associations :author, :post
18
- end
19
- class PostSerializer < ActiveModel::Serializer
20
- type 'posts'
21
- attributes :title, :body, :publish_at
22
- belongs_to :author
23
- has_many :top_comments
24
-
25
- link(:post_authors) { 'https://example.com/post_authors' }
26
-
27
- meta do
28
- {
29
- rating: 5,
30
- favorite_count: 10
31
- }
32
- end
33
- end
34
-
35
- class AuthorSerializer < ActiveModel::Serializer
36
- type 'authors'
37
- attributes :first_name, :last_name
38
- end
39
-
40
- class TopCommentSerializer < ActiveModel::Serializer
41
- type 'top_comments'
42
- attributes :body
43
- belongs_to :author
44
- end
45
-
46
- def setup_post
47
- ActionController::Base.cache_store.clear
48
- @author = Author.new(id: 1, first_name: 'Bob', last_name: 'Jones')
49
- @comment1 = TopComment.new(id: 7, body: 'cool', author: @author)
50
- @comment2 = TopComment.new(id: 12, body: 'awesome', author: @author)
51
- @post = Post.new(id: 1337, title: 'Title 1', body: 'Body 1',
52
- author: @author, top_comments: [@comment1, @comment2],
53
- publish_at: '2020-03-16T03:55:25.291Z')
54
- @comment1.post = @post
55
- @comment2.post = @post
56
- end
57
-
58
- def render_resource_with_transform
59
- setup_post
60
- render json: @post, serializer: PostSerializer, adapter: :json_api,
61
- key_transform: :camel
62
- end
63
-
64
- def render_resource_with_transform_nil
65
- setup_post
66
- render json: @post, serializer: PostSerializer, adapter: :json_api,
67
- key_transform: nil
68
- end
69
-
70
- def render_resource_with_transform_with_global_config
71
- old_transform = ActiveModelSerializers.config.key_transform
72
- setup_post
73
- ActiveModelSerializers.config.key_transform = :camel_lower
74
- render json: @post, serializer: PostSerializer, adapter: :json_api
75
- ensure
76
- ActiveModelSerializers.config.key_transform = old_transform
77
- end
78
- end
79
-
80
- tests KeyTransformTestController
81
-
82
- def test_render_resource_with_transform
83
- get :render_resource_with_transform
84
- response = JSON.parse(@response.body)
85
- expected = {
86
- 'Data' => {
87
- 'Id' => '1337',
88
- 'Type' => 'Posts',
89
- 'Attributes' => {
90
- 'Title' => 'Title 1',
91
- 'Body' => 'Body 1',
92
- 'PublishAt' => '2020-03-16T03:55:25.291Z'
93
- },
94
- 'Relationships' => {
95
- 'Author' => {
96
- 'Data' => {
97
- 'Id' => '1',
98
- 'Type' => 'Authors'
99
- }
100
- },
101
- 'TopComments' => {
102
- 'Data' => [
103
- { 'Id' => '7', 'Type' => 'TopComments' },
104
- { 'Id' => '12', 'Type' => 'TopComments' }
105
- ]
106
- }
107
- },
108
- 'Links' => {
109
- 'PostAuthors' => 'https://example.com/post_authors'
110
- },
111
- 'Meta' => { 'Rating' => 5, 'FavoriteCount' => 10 }
112
- }
113
- }
114
- assert_equal expected, response
115
- end
116
-
117
- def test_render_resource_with_transform_nil
118
- get :render_resource_with_transform_nil
119
- response = JSON.parse(@response.body)
120
- expected = {
121
- 'data' => {
122
- 'id' => '1337',
123
- 'type' => 'posts',
124
- 'attributes' => {
125
- 'title' => 'Title 1',
126
- 'body' => 'Body 1',
127
- 'publish-at' => '2020-03-16T03:55:25.291Z'
128
- },
129
- 'relationships' => {
130
- 'author' => {
131
- 'data' => {
132
- 'id' => '1',
133
- 'type' => 'authors'
134
- }
135
- },
136
- 'top-comments' => {
137
- 'data' => [
138
- { 'id' => '7', 'type' => 'top-comments' },
139
- { 'id' => '12', 'type' => 'top-comments' }
140
- ]
141
- }
142
- },
143
- 'links' => {
144
- 'post-authors' => 'https://example.com/post_authors'
145
- },
146
- 'meta' => { 'rating' => 5, 'favorite-count' => 10 }
147
- }
148
- }
149
- assert_equal expected, response
150
- end
151
-
152
- def test_render_resource_with_transform_with_global_config
153
- get :render_resource_with_transform_with_global_config
154
- response = JSON.parse(@response.body)
155
- expected = {
156
- 'data' => {
157
- 'id' => '1337',
158
- 'type' => 'posts',
159
- 'attributes' => {
160
- 'title' => 'Title 1',
161
- 'body' => 'Body 1',
162
- 'publishAt' => '2020-03-16T03:55:25.291Z'
163
- },
164
- 'relationships' => {
165
- 'author' => {
166
- 'data' => {
167
- 'id' => '1',
168
- 'type' => 'authors'
169
- }
170
- },
171
- 'topComments' => {
172
- 'data' => [
173
- { 'id' => '7', 'type' => 'topComments' },
174
- { 'id' => '12', 'type' => 'topComments' }
175
- ]
176
- }
177
- },
178
- 'links' => {
179
- 'postAuthors' => 'https://example.com/post_authors'
180
- },
181
- 'meta' => { 'rating' => 5, 'favoriteCount' => 10 }
182
- }
183
- }
184
- assert_equal expected, response
185
- end
186
- end
187
- end
188
- end
189
- end
@@ -1,49 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActionController
4
- module Serialization
5
- class LookupProcTest < ActionController::TestCase
6
- module Api
7
- module V3
8
- class PostCustomSerializer < ActiveModel::Serializer
9
- attributes :title, :body
10
-
11
- belongs_to :author
12
- end
13
-
14
- class AuthorCustomSerializer < ActiveModel::Serializer
15
- attributes :name
16
- end
17
-
18
- class LookupProcTestController < ActionController::Base
19
- def implicit_namespaced_serializer
20
- author = Author.new(name: 'Bob')
21
- post = Post.new(title: 'New Post', body: 'Body', author: author)
22
-
23
- render json: post
24
- end
25
- end
26
- end
27
- end
28
-
29
- tests Api::V3::LookupProcTestController
30
-
31
- test 'implicitly uses namespaced serializer' do
32
- controller_namespace = lambda do |resource_class, _parent_serializer_class, namespace|
33
- "#{namespace}::#{resource_class}CustomSerializer" if namespace
34
- end
35
-
36
- with_prepended_lookup(controller_namespace) do
37
- get :implicit_namespaced_serializer
38
-
39
- assert_serializer Api::V3::PostCustomSerializer
40
-
41
- expected = { 'title' => 'New Post', 'body' => 'Body', 'author' => { 'name' => 'Bob' } }
42
- actual = JSON.parse(@response.body)
43
-
44
- assert_equal expected, actual
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,232 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActionController
4
- module Serialization
5
- class NamespaceLookupTest < ActionController::TestCase
6
- class Book < ::Model
7
- attributes :id, :title, :body
8
- associations :writer, :chapters
9
- end
10
- class Chapter < ::Model
11
- attributes :title
12
- end
13
- class Writer < ::Model
14
- attributes :name
15
- end
16
-
17
- module Api
18
- module V2
19
- class BookSerializer < ActiveModel::Serializer
20
- attributes :title
21
- end
22
- end
23
-
24
- module VHeader
25
- class BookSerializer < ActiveModel::Serializer
26
- attributes :title, :body
27
-
28
- def body
29
- 'header'
30
- end
31
- end
32
- end
33
-
34
- module V3
35
- class BookSerializer < ActiveModel::Serializer
36
- attributes :title, :body
37
-
38
- belongs_to :writer
39
- has_many :chapters
40
- end
41
-
42
- class ChapterSerializer < ActiveModel::Serializer
43
- attribute :title do
44
- "Chapter - #{object.title}"
45
- end
46
- end
47
-
48
- class WriterSerializer < ActiveModel::Serializer
49
- attributes :name
50
- end
51
-
52
- class LookupTestController < ActionController::Base
53
- before_action only: [:namespace_set_in_before_filter] do
54
- self.namespace_for_serializer = Api::V2
55
- end
56
-
57
- def implicit_namespaced_serializer
58
- writer = Writer.new(name: 'Bob')
59
- book = Book.new(title: 'New Post', body: 'Body', writer: writer, chapters: [])
60
-
61
- render json: book
62
- end
63
-
64
- def implicit_namespaced_collection_serializer
65
- chapter1 = Chapter.new(title: 'Oh')
66
- chapter2 = Chapter.new(title: 'Oh my')
67
-
68
- render json: [chapter1, chapter2]
69
- end
70
-
71
- def implicit_has_many_namespaced_serializer
72
- chapter1 = Chapter.new(title: 'Odd World')
73
- chapter2 = Chapter.new(title: 'New World')
74
- book = Book.new(title: 'New Post', body: 'Body', chapters: [chapter1, chapter2])
75
-
76
- render json: book
77
- end
78
-
79
- def explicit_namespace_as_module
80
- book = Book.new(title: 'New Post', body: 'Body')
81
-
82
- render json: book, namespace: Api::V2
83
- end
84
-
85
- def explicit_namespace_as_string
86
- book = Book.new(title: 'New Post', body: 'Body')
87
-
88
- # because this is a string, ruby can't auto-lookup the constant, so otherwise
89
- # the lookup thinks we mean ::Api::V2
90
- render json: book, namespace: 'ActionController::Serialization::NamespaceLookupTest::Api::V2'
91
- end
92
-
93
- def explicit_namespace_as_symbol
94
- book = Book.new(title: 'New Post', body: 'Body')
95
-
96
- # because this is a string, ruby can't auto-lookup the constant, so otherwise
97
- # the lookup thinks we mean ::Api::V2
98
- render json: book, namespace: :'ActionController::Serialization::NamespaceLookupTest::Api::V2'
99
- end
100
-
101
- def invalid_namespace
102
- book = Book.new(id: 'invalid_namespace_book_id', title: 'New Post', body: 'Body')
103
-
104
- render json: book, namespace: :api_v2
105
- end
106
-
107
- def namespace_set_in_before_filter
108
- book = Book.new(title: 'New Post', body: 'Body')
109
- render json: book
110
- end
111
-
112
- def namespace_set_by_request_headers
113
- book = Book.new(title: 'New Post', body: 'Body')
114
- version_from_header = request.headers['X-API_VERSION']
115
- namespace = "ActionController::Serialization::NamespaceLookupTest::#{version_from_header}"
116
-
117
- render json: book, namespace: namespace
118
- end
119
- end
120
- end
121
- end
122
-
123
- tests Api::V3::LookupTestController
124
-
125
- setup do
126
- @test_namespace = self.class.parent
127
- end
128
-
129
- test 'uses request headers to determine the namespace' do
130
- request.env['X-API_VERSION'] = 'Api::VHeader'
131
- get :namespace_set_by_request_headers
132
-
133
- assert_serializer Api::VHeader::BookSerializer
134
- end
135
-
136
- test 'implicitly uses namespaced serializer' do
137
- get :implicit_namespaced_serializer
138
-
139
- assert_serializer Api::V3::BookSerializer
140
-
141
- expected = { 'title' => 'New Post', 'body' => 'Body', 'writer' => { 'name' => 'Bob' }, 'chapters' => [] }
142
- actual = JSON.parse(@response.body)
143
-
144
- assert_equal expected, actual
145
- end
146
-
147
- test 'implicitly uses namespaced serializer for collection' do
148
- get :implicit_namespaced_collection_serializer
149
-
150
- assert_serializer 'ActiveModel::Serializer::CollectionSerializer'
151
-
152
- expected = [{ 'title' => 'Chapter - Oh' }, { 'title' => 'Chapter - Oh my' }]
153
- actual = JSON.parse(@response.body)
154
-
155
- assert_equal expected, actual
156
- end
157
-
158
- test 'implicitly uses namespaced serializer for has_many' do
159
- get :implicit_has_many_namespaced_serializer
160
-
161
- assert_serializer Api::V3::BookSerializer
162
-
163
- expected = {
164
- 'title' => 'New Post',
165
- 'body' => 'Body', 'writer' => nil,
166
- 'chapters' => [
167
- { 'title' => 'Chapter - Odd World' },
168
- { 'title' => 'Chapter - New World' }
169
- ]
170
- }
171
- actual = JSON.parse(@response.body)
172
-
173
- assert_equal expected, actual
174
- end
175
-
176
- test 'explicit namespace as module' do
177
- get :explicit_namespace_as_module
178
-
179
- assert_serializer Api::V2::BookSerializer
180
-
181
- expected = { 'title' => 'New Post' }
182
- actual = JSON.parse(@response.body)
183
-
184
- assert_equal expected, actual
185
- end
186
-
187
- test 'explicit namespace as string' do
188
- get :explicit_namespace_as_string
189
-
190
- assert_serializer Api::V2::BookSerializer
191
-
192
- expected = { 'title' => 'New Post' }
193
- actual = JSON.parse(@response.body)
194
-
195
- assert_equal expected, actual
196
- end
197
-
198
- test 'explicit namespace as symbol' do
199
- get :explicit_namespace_as_symbol
200
-
201
- assert_serializer Api::V2::BookSerializer
202
-
203
- expected = { 'title' => 'New Post' }
204
- actual = JSON.parse(@response.body)
205
-
206
- assert_equal expected, actual
207
- end
208
-
209
- test 'invalid namespace' do
210
- get :invalid_namespace
211
-
212
- assert_serializer ActiveModel::Serializer::Null
213
-
214
- expected = { 'id' => 'invalid_namespace_book_id', 'title' => 'New Post', 'body' => 'Body' }
215
- actual = JSON.parse(@response.body)
216
-
217
- assert_equal expected, actual
218
- end
219
-
220
- test 'namespace set in before filter' do
221
- get :namespace_set_in_before_filter
222
-
223
- assert_serializer Api::V2::BookSerializer
224
-
225
- expected = { 'title' => 'New Post' }
226
- actual = JSON.parse(@response.body)
227
-
228
- assert_equal expected, actual
229
- end
230
- end
231
- end
232
- end