active_model_serializers 0.10.6 → 0.10.13

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 (215) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +114 -1
  3. data/README.md +21 -24
  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/adapter/attributes.rb +2 -0
  7. data/lib/active_model/serializer/adapter/base.rb +2 -0
  8. data/lib/active_model/serializer/adapter/json.rb +2 -0
  9. data/lib/active_model/serializer/adapter/json_api.rb +2 -0
  10. data/lib/active_model/serializer/adapter/null.rb +2 -0
  11. data/lib/active_model/serializer/adapter.rb +2 -0
  12. data/lib/active_model/serializer/array_serializer.rb +2 -0
  13. data/lib/active_model/serializer/association.rb +2 -0
  14. data/lib/active_model/serializer/attribute.rb +2 -0
  15. data/lib/active_model/serializer/belongs_to_reflection.rb +2 -0
  16. data/lib/active_model/serializer/collection_serializer.rb +17 -5
  17. data/lib/active_model/serializer/concerns/caching.rb +7 -2
  18. data/lib/active_model/serializer/error_serializer.rb +2 -0
  19. data/lib/active_model/serializer/errors_serializer.rb +2 -0
  20. data/lib/active_model/serializer/field.rb +2 -0
  21. data/lib/active_model/serializer/fieldset.rb +3 -1
  22. data/lib/active_model/serializer/has_many_reflection.rb +2 -0
  23. data/lib/active_model/serializer/has_one_reflection.rb +2 -0
  24. data/lib/active_model/serializer/lazy_association.rb +6 -2
  25. data/lib/active_model/serializer/link.rb +23 -0
  26. data/lib/active_model/serializer/lint.rb +2 -0
  27. data/lib/active_model/serializer/null.rb +2 -0
  28. data/lib/active_model/serializer/reflection.rb +10 -5
  29. data/lib/active_model/serializer/version.rb +3 -1
  30. data/lib/active_model/serializer.rb +37 -19
  31. data/lib/active_model_serializers/adapter/attributes.rb +23 -0
  32. data/lib/active_model_serializers/adapter/base.rb +2 -0
  33. data/lib/active_model_serializers/adapter/json.rb +2 -0
  34. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +3 -1
  35. data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
  36. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
  37. data/lib/active_model_serializers/adapter/json_api/link.rb +2 -0
  38. data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
  39. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +45 -20
  40. data/lib/active_model_serializers/adapter/json_api/relationship.rb +18 -4
  41. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +33 -25
  42. data/lib/active_model_serializers/adapter/json_api.rb +14 -9
  43. data/lib/active_model_serializers/adapter/null.rb +2 -0
  44. data/lib/active_model_serializers/adapter.rb +3 -1
  45. data/lib/active_model_serializers/callbacks.rb +2 -0
  46. data/lib/active_model_serializers/deprecate.rb +2 -0
  47. data/lib/active_model_serializers/deserialization.rb +2 -0
  48. data/lib/active_model_serializers/json_pointer.rb +2 -0
  49. data/lib/active_model_serializers/logging.rb +2 -0
  50. data/lib/active_model_serializers/lookup_chain.rb +2 -0
  51. data/lib/active_model_serializers/model/caching.rb +26 -0
  52. data/lib/active_model_serializers/model.rb +2 -0
  53. data/lib/active_model_serializers/railtie.rb +4 -0
  54. data/lib/active_model_serializers/register_jsonapi_renderer.rb +2 -0
  55. data/lib/active_model_serializers/serializable_resource.rb +4 -2
  56. data/lib/active_model_serializers/serialization_context.rb +2 -0
  57. data/lib/active_model_serializers/test/schema.rb +2 -0
  58. data/lib/active_model_serializers/test/serializer.rb +2 -0
  59. data/lib/active_model_serializers/test.rb +2 -0
  60. data/lib/active_model_serializers.rb +21 -11
  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 +43 -298
  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 -55
  74. data/CODE_OF_CONDUCT.md +0 -74
  75. data/CONTRIBUTING.md +0 -105
  76. data/Gemfile +0 -56
  77. data/Rakefile +0 -74
  78. data/active_model_serializers.gemspec +0 -63
  79. data/appveyor.yml +0 -30
  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 -263
  87. data/docs/general/caching.md +0 -58
  88. data/docs/general/configuration_options.md +0 -169
  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 -480
  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 -55
  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/schema.json +0 -366
  111. data/docs/jsonapi/schema.md +0 -151
  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 -116
  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_embed_ids_test.rb +0 -43
  148. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -96
  149. data/test/adapter/json_api/has_many_test.rb +0 -173
  150. data/test/adapter/json_api/has_one_test.rb +0 -80
  151. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -183
  152. data/test/adapter/json_api/json_api_test.rb +0 -33
  153. data/test/adapter/json_api/linked_test.rb +0 -413
  154. data/test/adapter/json_api/links_test.rb +0 -95
  155. data/test/adapter/json_api/pagination_links_test.rb +0 -193
  156. data/test/adapter/json_api/parse_test.rb +0 -137
  157. data/test/adapter/json_api/relationship_test.rb +0 -397
  158. data/test/adapter/json_api/resource_identifier_test.rb +0 -110
  159. data/test/adapter/json_api/resource_meta_test.rb +0 -100
  160. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -82
  161. data/test/adapter/json_api/transform_test.rb +0 -512
  162. data/test/adapter/json_api/type_test.rb +0 -61
  163. data/test/adapter/json_test.rb +0 -46
  164. data/test/adapter/null_test.rb +0 -22
  165. data/test/adapter/polymorphic_test.rb +0 -171
  166. data/test/adapter_test.rb +0 -67
  167. data/test/array_serializer_test.rb +0 -22
  168. data/test/benchmark/app.rb +0 -65
  169. data/test/benchmark/benchmarking_support.rb +0 -67
  170. data/test/benchmark/bm_active_record.rb +0 -81
  171. data/test/benchmark/bm_adapter.rb +0 -38
  172. data/test/benchmark/bm_caching.rb +0 -119
  173. data/test/benchmark/bm_lookup_chain.rb +0 -83
  174. data/test/benchmark/bm_transform.rb +0 -45
  175. data/test/benchmark/config.ru +0 -3
  176. data/test/benchmark/controllers.rb +0 -83
  177. data/test/benchmark/fixtures.rb +0 -219
  178. data/test/cache_test.rb +0 -651
  179. data/test/collection_serializer_test.rb +0 -123
  180. data/test/fixtures/active_record.rb +0 -113
  181. data/test/fixtures/poro.rb +0 -225
  182. data/test/generators/scaffold_controller_generator_test.rb +0 -24
  183. data/test/generators/serializer_generator_test.rb +0 -75
  184. data/test/grape_test.rb +0 -196
  185. data/test/lint_test.rb +0 -49
  186. data/test/logger_test.rb +0 -20
  187. data/test/poro_test.rb +0 -9
  188. data/test/serializable_resource_test.rb +0 -79
  189. data/test/serializers/association_macros_test.rb +0 -37
  190. data/test/serializers/associations_test.rb +0 -424
  191. data/test/serializers/attribute_test.rb +0 -153
  192. data/test/serializers/attributes_test.rb +0 -52
  193. data/test/serializers/caching_configuration_test_isolated.rb +0 -170
  194. data/test/serializers/configuration_test.rb +0 -32
  195. data/test/serializers/fieldset_test.rb +0 -14
  196. data/test/serializers/meta_test.rb +0 -202
  197. data/test/serializers/options_test.rb +0 -32
  198. data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
  199. data/test/serializers/reflection_test.rb +0 -427
  200. data/test/serializers/root_test.rb +0 -21
  201. data/test/serializers/serialization_test.rb +0 -55
  202. data/test/serializers/serializer_for_test.rb +0 -136
  203. data/test/serializers/serializer_for_with_namespace_test.rb +0 -88
  204. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  205. data/test/support/isolated_unit.rb +0 -82
  206. data/test/support/rails5_shims.rb +0 -53
  207. data/test/support/rails_app.rb +0 -38
  208. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  209. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  210. data/test/support/schemas/custom/show.json +0 -7
  211. data/test/support/schemas/hyper_schema.json +0 -93
  212. data/test/support/schemas/render_using_json_api.json +0 -43
  213. data/test/support/schemas/simple_json_pointers.json +0 -10
  214. data/test/support/serialization_testing.rb +0 -71
  215. data/test/test_helper.rb +0 -70
@@ -1,96 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- class CollectionTest < ActiveSupport::TestCase
7
- def setup
8
- @author = Author.new(id: 1, name: 'Steve K.')
9
- @author.bio = nil
10
- @blog = Blog.new(id: 23, name: 'AMS Blog')
11
- @first_post = Post.new(id: 1, title: 'Hello!!', body: 'Hello, world!!')
12
- @second_post = Post.new(id: 2, title: 'New Post', body: 'Body')
13
- @first_post.comments = []
14
- @second_post.comments = []
15
- @first_post.blog = @blog
16
- @second_post.blog = nil
17
- @first_post.author = @author
18
- @second_post.author = @author
19
- @author.posts = [@first_post, @second_post]
20
-
21
- @serializer = ActiveModel::Serializer::CollectionSerializer.new([@first_post, @second_post])
22
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer)
23
- ActionController::Base.cache_store.clear
24
- end
25
-
26
- def test_include_multiple_posts
27
- expected = [
28
- {
29
- id: '1',
30
- type: 'posts',
31
- attributes: {
32
- title: 'Hello!!',
33
- body: 'Hello, world!!'
34
- },
35
- relationships: {
36
- comments: { data: [] },
37
- blog: { data: { type: 'blogs', id: '999' } },
38
- author: { data: { type: 'authors', id: '1' } }
39
- }
40
- },
41
- {
42
- id: '2',
43
- type: 'posts',
44
- attributes: {
45
- title: 'New Post',
46
- body: 'Body'
47
- },
48
- relationships: {
49
- comments: { data: [] },
50
- blog: { data: { type: 'blogs', id: '999' } },
51
- author: { data: { type: 'authors', id: '1' } }
52
- }
53
- }
54
- ]
55
-
56
- assert_equal(expected, @adapter.serializable_hash[:data])
57
- end
58
-
59
- def test_limiting_fields
60
- actual = ActiveModelSerializers::SerializableResource.new(
61
- [@first_post, @second_post],
62
- adapter: :json_api,
63
- fields: { posts: %w(title comments blog author) }
64
- ).serializable_hash
65
- expected = [
66
- {
67
- id: '1',
68
- type: 'posts',
69
- attributes: {
70
- title: 'Hello!!'
71
- },
72
- relationships: {
73
- comments: { data: [] },
74
- blog: { data: { type: 'blogs', id: '999' } },
75
- author: { data: { type: 'authors', id: '1' } }
76
- }
77
- },
78
- {
79
- id: '2',
80
- type: 'posts',
81
- attributes: {
82
- title: 'New Post'
83
- },
84
- relationships: {
85
- comments: { data: [] },
86
- blog: { data: { type: 'blogs', id: '999' } },
87
- author: { data: { type: 'authors', id: '1' } }
88
- }
89
- }
90
- ]
91
- assert_equal(expected, actual[:data])
92
- end
93
- end
94
- end
95
- end
96
- end
@@ -1,76 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi < Base
6
- class ErrorsTest < Minitest::Test
7
- include ActiveModel::Serializer::Lint::Tests
8
-
9
- def setup
10
- @resource = ModelWithErrors.new
11
- end
12
-
13
- def test_active_model_with_error
14
- options = {
15
- serializer: ActiveModel::Serializer::ErrorSerializer,
16
- adapter: :json_api
17
- }
18
-
19
- @resource.errors.add(:name, 'cannot be nil')
20
-
21
- serializable_resource = ActiveModelSerializers::SerializableResource.new(@resource, options)
22
- assert_equal serializable_resource.serializer_instance.attributes, {}
23
- assert_equal serializable_resource.serializer_instance.object, @resource
24
-
25
- expected_errors_object = {
26
- errors: [
27
- {
28
- source: { pointer: '/data/attributes/name' },
29
- detail: 'cannot be nil'
30
- }
31
- ]
32
- }
33
- assert_equal serializable_resource.as_json, expected_errors_object
34
- end
35
-
36
- def test_active_model_with_multiple_errors
37
- options = {
38
- serializer: ActiveModel::Serializer::ErrorSerializer,
39
- adapter: :json_api
40
- }
41
-
42
- @resource.errors.add(:name, 'cannot be nil')
43
- @resource.errors.add(:name, 'must be longer')
44
- @resource.errors.add(:id, 'must be a uuid')
45
-
46
- serializable_resource = ActiveModelSerializers::SerializableResource.new(@resource, options)
47
- assert_equal serializable_resource.serializer_instance.attributes, {}
48
- assert_equal serializable_resource.serializer_instance.object, @resource
49
-
50
- expected_errors_object = {
51
- errors: [
52
- { source: { pointer: '/data/attributes/name' }, detail: 'cannot be nil' },
53
- { source: { pointer: '/data/attributes/name' }, detail: 'must be longer' },
54
- { source: { pointer: '/data/attributes/id' }, detail: 'must be a uuid' }
55
- ]
56
- }
57
- assert_equal serializable_resource.as_json, expected_errors_object
58
- end
59
-
60
- # see http://jsonapi.org/examples/
61
- def test_parameter_source_type_error
62
- parameter = 'auther'
63
- error_source = ActiveModelSerializers::Adapter::JsonApi::Error.error_source(:parameter, parameter)
64
- assert_equal({ parameter: parameter }, error_source)
65
- end
66
-
67
- def test_unknown_source_type_error
68
- value = 'auther'
69
- assert_raises(ActiveModelSerializers::Adapter::JsonApi::Error::UnknownSourceTypeError) do
70
- ActiveModelSerializers::Adapter::JsonApi::Error.error_source(:hyper, value)
71
- end
72
- end
73
- end
74
- end
75
- end
76
- end
@@ -1,96 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- class FieldsTest < ActiveSupport::TestCase
7
- class Post < ::Model
8
- attributes :title, :body
9
- associations :author, :comments
10
- end
11
- class Author < ::Model
12
- attributes :name, :birthday
13
- end
14
- class Comment < ::Model
15
- attributes :body
16
- associations :author, :post
17
- end
18
-
19
- class PostSerializer < ActiveModel::Serializer
20
- type 'posts'
21
- attributes :title, :body
22
- belongs_to :author
23
- has_many :comments
24
- end
25
-
26
- class AuthorSerializer < ActiveModel::Serializer
27
- type 'authors'
28
- attributes :name, :birthday
29
- end
30
-
31
- class CommentSerializer < ActiveModel::Serializer
32
- type 'comments'
33
- attributes :body
34
- belongs_to :author
35
- end
36
-
37
- def setup
38
- @author = Author.new(id: 1, name: 'Lucas', birthday: '10.01.1990')
39
- @comment1 = Comment.new(id: 7, body: 'cool', author: @author)
40
- @comment2 = Comment.new(id: 12, body: 'awesome', author: @author)
41
- @post = Post.new(id: 1337, title: 'Title 1', body: 'Body 1',
42
- author: @author, comments: [@comment1, @comment2])
43
- @comment1.post = @post
44
- @comment2.post = @post
45
- end
46
-
47
- def test_fields_attributes
48
- fields = { posts: [:title] }
49
- hash = serializable(@post, adapter: :json_api, fields: fields).serializable_hash
50
- expected = {
51
- title: 'Title 1'
52
- }
53
-
54
- assert_equal(expected, hash[:data][:attributes])
55
- end
56
-
57
- def test_fields_relationships
58
- fields = { posts: [:author] }
59
- hash = serializable(@post, adapter: :json_api, fields: fields).serializable_hash
60
- expected = {
61
- author: {
62
- data: {
63
- type: 'authors',
64
- id: '1'
65
- }
66
- }
67
- }
68
-
69
- assert_equal(expected, hash[:data][:relationships])
70
- end
71
-
72
- def test_fields_included
73
- fields = { posts: [:author], comments: [:body] }
74
- hash = serializable(@post, adapter: :json_api, fields: fields, include: 'comments').serializable_hash
75
- expected = [
76
- {
77
- type: 'comments',
78
- id: '7',
79
- attributes: {
80
- body: 'cool'
81
- }
82
- }, {
83
- type: 'comments',
84
- id: '12',
85
- attributes: {
86
- body: 'awesome'
87
- }
88
- }
89
- ]
90
-
91
- assert_equal(expected, hash[:included])
92
- end
93
- end
94
- end
95
- end
96
- end
@@ -1,43 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- class HasManyEmbedIdsTest < ActiveSupport::TestCase
7
- def setup
8
- @author = Author.new(name: 'Steve K.')
9
- @author.bio = nil
10
- @author.roles = nil
11
- @first_post = Post.new(id: 1, title: 'Hello!!', body: 'Hello, world!!')
12
- @second_post = Post.new(id: 2, title: 'New Post', body: 'Body')
13
- @author.posts = [@first_post, @second_post]
14
- @first_post.author = @author
15
- @second_post.author = @author
16
- @first_post.comments = []
17
- @second_post.comments = []
18
- @blog = Blog.new(id: 23, name: 'AMS Blog')
19
- @first_post.blog = @blog
20
- @second_post.blog = nil
21
-
22
- @serializer = AuthorSerializer.new(@author)
23
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer)
24
- end
25
-
26
- def test_includes_comment_ids
27
- expected = {
28
- data: [
29
- { type: 'posts', id: '1' },
30
- { type: 'posts', id: '2' }
31
- ]
32
- }
33
-
34
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:posts])
35
- end
36
-
37
- def test_no_includes_linked_comments
38
- assert_nil @adapter.serializable_hash[:linked]
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,96 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- # Test 'has_many :assocs, serializer: AssocXSerializer'
7
- class HasManyExplicitSerializerTest < ActiveSupport::TestCase
8
- def setup
9
- @post = Post.new(title: 'New Post', body: 'Body')
10
- @author = Author.new(name: 'Jane Blogger')
11
- @author.posts = [@post]
12
- @post.author = @author
13
- @first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
14
- @second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
15
- @post.comments = [@first_comment, @second_comment]
16
- @first_comment.post = @post
17
- @first_comment.author = nil
18
- @second_comment.post = @post
19
- @second_comment.author = nil
20
- @blog = Blog.new(id: 23, name: 'AMS Blog')
21
- @post.blog = @blog
22
-
23
- @serializer = PostPreviewSerializer.new(@post)
24
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(
25
- @serializer,
26
- include: [:comments, :author]
27
- )
28
- end
29
-
30
- def test_includes_comment_ids
31
- expected = {
32
- data: [
33
- { type: 'comments', id: '1' },
34
- { type: 'comments', id: '2' }
35
- ]
36
- }
37
-
38
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:comments])
39
- end
40
-
41
- def test_includes_linked_data
42
- # If CommentPreviewSerializer is applied correctly the body text will not be present in the output
43
- expected = [
44
- {
45
- id: '1',
46
- type: 'comments',
47
- relationships: {
48
- post: { data: { type: 'posts', id: @post.id.to_s } }
49
- }
50
- },
51
- {
52
- id: '2',
53
- type: 'comments',
54
- relationships: {
55
- post: { data: { type: 'posts', id: @post.id.to_s } }
56
- }
57
- },
58
- {
59
- id: @author.id.to_s,
60
- type: 'authors',
61
- relationships: {
62
- posts: { data: [{ type: 'posts', id: @post.id.to_s }] }
63
- }
64
- }
65
- ]
66
-
67
- assert_equal(expected, @adapter.serializable_hash[:included])
68
- end
69
-
70
- def test_includes_author_id
71
- expected = {
72
- data: { type: 'authors', id: @author.id.to_s }
73
- }
74
-
75
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:author])
76
- end
77
-
78
- def test_explicit_serializer_with_null_resource
79
- @post.author = nil
80
-
81
- expected = { data: nil }
82
-
83
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:author])
84
- end
85
-
86
- def test_explicit_serializer_with_null_collection
87
- @post.comments = []
88
-
89
- expected = { data: [] }
90
-
91
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:comments])
92
- end
93
- end
94
- end
95
- end
96
- end
@@ -1,173 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- class HasManyTest < ActiveSupport::TestCase
7
- class ModelWithoutSerializer < ::Model
8
- attributes :id, :name
9
- end
10
-
11
- def setup
12
- ActionController::Base.cache_store.clear
13
- @author = Author.new(id: 1, name: 'Steve K.')
14
- @author.posts = []
15
- @author.bio = nil
16
- @post = Post.new(id: 1, title: 'New Post', body: 'Body')
17
- @post_without_comments = Post.new(id: 2, title: 'Second Post', body: 'Second')
18
- @first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
19
- @first_comment.author = nil
20
- @second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
21
- @second_comment.author = nil
22
- @post.comments = [@first_comment, @second_comment]
23
- @post_without_comments.comments = []
24
- @first_comment.post = @post
25
- @second_comment.post = @post
26
- @post.author = @author
27
- @post_without_comments.author = nil
28
- @blog = Blog.new(id: 1, name: 'My Blog!!')
29
- @blog.writer = @author
30
- @blog.articles = [@post]
31
- @post.blog = @blog
32
- @post_without_comments.blog = nil
33
- @tag = ModelWithoutSerializer.new(id: 1, name: '#hash_tag')
34
- @post.tags = [@tag]
35
- @serializer = PostSerializer.new(@post)
36
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer)
37
-
38
- @virtual_value = VirtualValue.new(id: 1)
39
- end
40
-
41
- def test_includes_comment_ids
42
- expected = { data: [{ type: 'comments', id: '1' }, { type: 'comments', id: '2' }] }
43
-
44
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:comments])
45
- end
46
-
47
- test 'relationships can be whitelisted via fields' do
48
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, fields: { posts: [:author] })
49
- result = @adapter.serializable_hash
50
- expected = {
51
- data: {
52
- id: '1',
53
- type: 'posts',
54
- relationships: {
55
- author: {
56
- data: {
57
- id: '1',
58
- type: 'authors'
59
- }
60
- }
61
- }
62
- }
63
- }
64
-
65
- assert_equal expected, result
66
- end
67
-
68
- def test_includes_linked_comments
69
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:comments])
70
- expected = [{
71
- id: '1',
72
- type: 'comments',
73
- attributes: {
74
- body: 'ZOMG A COMMENT'
75
- },
76
- relationships: {
77
- post: { data: { type: 'posts', id: '1' } },
78
- author: { data: nil }
79
- }
80
- }, {
81
- id: '2',
82
- type: 'comments',
83
- attributes: {
84
- body: 'ZOMG ANOTHER COMMENT'
85
- },
86
- relationships: {
87
- post: { data: { type: 'posts', id: '1' } },
88
- author: { data: nil }
89
- }
90
- }]
91
- assert_equal expected, @adapter.serializable_hash[:included]
92
- end
93
-
94
- def test_limit_fields_of_linked_comments
95
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:comments], fields: { comment: [:id, :post, :author] })
96
- expected = [{
97
- id: '1',
98
- type: 'comments',
99
- relationships: {
100
- post: { data: { type: 'posts', id: '1' } },
101
- author: { data: nil }
102
- }
103
- }, {
104
- id: '2',
105
- type: 'comments',
106
- relationships: {
107
- post: { data: { type: 'posts', id: '1' } },
108
- author: { data: nil }
109
- }
110
- }]
111
- assert_equal expected, @adapter.serializable_hash[:included]
112
- end
113
-
114
- def test_no_include_linked_if_comments_is_empty
115
- serializer = PostSerializer.new(@post_without_comments)
116
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
117
-
118
- assert_nil adapter.serializable_hash[:linked]
119
- end
120
-
121
- def test_include_type_for_association_when_different_than_name
122
- serializer = BlogSerializer.new(@blog)
123
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
124
- actual = adapter.serializable_hash[:data][:relationships][:articles]
125
-
126
- expected = {
127
- data: [{
128
- type: 'posts',
129
- id: '1'
130
- }]
131
- }
132
- assert_equal expected, actual
133
- end
134
-
135
- def test_has_many_with_no_serializer
136
- post_serializer_class = Class.new(ActiveModel::Serializer) do
137
- attributes :id
138
- has_many :tags
139
- end
140
- serializer = post_serializer_class.new(@post)
141
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
142
-
143
- assert_equal({
144
- data: {
145
- id: '1',
146
- type: 'posts',
147
- relationships: {
148
- tags: { data: [@tag.as_json] }
149
- }
150
- }
151
- }, adapter.serializable_hash)
152
- end
153
-
154
- def test_has_many_with_virtual_value
155
- serializer = VirtualValueSerializer.new(@virtual_value)
156
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
157
-
158
- assert_equal({
159
- data: {
160
- id: '1',
161
- type: 'virtual-values',
162
- relationships: {
163
- maker: { data: { type: 'makers', id: '1' } },
164
- reviews: { data: [{ type: 'reviews', id: '1' },
165
- { type: 'reviews', id: '2' }] }
166
- }
167
- }
168
- }, adapter.serializable_hash)
169
- end
170
- end
171
- end
172
- end
173
- end
@@ -1,80 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- class HasOneTest < ActiveSupport::TestCase
7
- def setup
8
- @author = Author.new(id: 1, name: 'Steve K.')
9
- @bio = Bio.new(id: 43, content: 'AMS Contributor')
10
- @author.bio = @bio
11
- @bio.author = @author
12
- @post = Post.new(id: 42, title: 'New Post', body: 'Body')
13
- @anonymous_post = Post.new(id: 43, title: 'Hello!!', body: 'Hello, world!!')
14
- @comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
15
- @post.comments = [@comment]
16
- @anonymous_post.comments = []
17
- @comment.post = @post
18
- @comment.author = nil
19
- @post.author = @author
20
- @anonymous_post.author = nil
21
- @blog = Blog.new(id: 1, name: 'My Blog!!')
22
- @blog.writer = @author
23
- @blog.articles = [@post, @anonymous_post]
24
- @author.posts = []
25
- @author.roles = []
26
-
27
- @virtual_value = VirtualValue.new(id: 1)
28
-
29
- @serializer = AuthorSerializer.new(@author)
30
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:bio, :posts])
31
- end
32
-
33
- def test_includes_bio_id
34
- expected = { data: { type: 'bios', id: '43' } }
35
-
36
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:bio])
37
- end
38
-
39
- def test_includes_linked_bio
40
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:bio])
41
-
42
- expected = [
43
- {
44
- id: '43',
45
- type: 'bios',
46
- attributes: {
47
- content: 'AMS Contributor',
48
- rating: nil
49
- },
50
- relationships: {
51
- author: { data: { type: 'authors', id: '1' } }
52
- }
53
- }
54
- ]
55
-
56
- assert_equal(expected, @adapter.serializable_hash[:included])
57
- end
58
-
59
- def test_has_one_with_virtual_value
60
- serializer = VirtualValueSerializer.new(@virtual_value)
61
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
62
-
63
- expected = {
64
- data: {
65
- id: '1',
66
- type: 'virtual-values',
67
- relationships: {
68
- maker: { data: { type: 'makers', id: '1' } },
69
- reviews: { data: [{ type: 'reviews', id: '1' },
70
- { type: 'reviews', id: '2' }] }
71
- }
72
- }
73
- }
74
-
75
- assert_equal(expected, adapter.serializable_hash)
76
- end
77
- end
78
- end
79
- end
80
- end