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,62 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Test
5
- class SerializerTest < ActionController::TestCase
6
- include ActiveModelSerializers::Test::Serializer
7
-
8
- class MyController < ActionController::Base
9
- def render_using_serializer
10
- render json: Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
11
- end
12
-
13
- def render_some_text
14
- render(plain: 'ok')
15
- end
16
- end
17
-
18
- tests MyController
19
-
20
- def test_supports_specifying_serializers_with_a_serializer_class
21
- get :render_using_serializer
22
- assert_serializer ProfileSerializer
23
- end
24
-
25
- def test_supports_specifying_serializers_with_a_regexp
26
- get :render_using_serializer
27
- assert_serializer(/\AProfile.+\Z/)
28
- end
29
-
30
- def test_supports_specifying_serializers_with_a_string
31
- get :render_using_serializer
32
- assert_serializer 'ProfileSerializer'
33
- end
34
-
35
- def test_supports_specifying_serializers_with_a_symbol
36
- get :render_using_serializer
37
- assert_serializer :profile_serializer
38
- end
39
-
40
- def test_supports_specifying_serializers_with_a_nil
41
- get :render_some_text
42
- assert_serializer nil
43
- end
44
-
45
- def test_raises_descriptive_error_message_when_serializer_was_not_rendered
46
- get :render_using_serializer
47
- e = assert_raise ActiveSupport::TestCase::Assertion do
48
- assert_serializer 'PostSerializer'
49
- end
50
- assert_match 'expecting <"PostSerializer"> but rendering with <["ProfileSerializer"]>', e.message
51
- end
52
-
53
- def test_raises_argument_error_when_asserting_with_invalid_object
54
- get :render_using_serializer
55
- e = assert_raise ArgumentError do
56
- assert_serializer Hash
57
- end
58
- assert_match 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil', e.message
59
- end
60
- end
61
- end
62
- end
@@ -1,9 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ActiveRecordTest < ActiveSupport::TestCase
4
- include ActiveModel::Serializer::Lint::Tests
5
-
6
- def setup
7
- @resource = ARModels::Post.new
8
- end
9
- end
@@ -1,40 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class AttributesTest < ActiveSupport::TestCase
6
- class Person < ActiveModelSerializers::Model
7
- attributes :first_name, :last_name
8
- end
9
-
10
- class PersonSerializer < ActiveModel::Serializer
11
- attributes :first_name, :last_name
12
- end
13
-
14
- def setup
15
- ActionController::Base.cache_store.clear
16
- end
17
-
18
- def test_serializable_hash
19
- person = Person.new(first_name: 'Arthur', last_name: 'Dent')
20
- serializer = PersonSerializer.new(person)
21
- adapter = ActiveModelSerializers::Adapter::Attributes.new(serializer)
22
-
23
- assert_equal({ first_name: 'Arthur', last_name: 'Dent' },
24
- adapter.serializable_hash)
25
- end
26
-
27
- def test_serializable_hash_with_transform_key_casing
28
- person = Person.new(first_name: 'Arthur', last_name: 'Dent')
29
- serializer = PersonSerializer.new(person)
30
- adapter = ActiveModelSerializers::Adapter::Attributes.new(
31
- serializer,
32
- key_transform: :camel_lower
33
- )
34
-
35
- assert_equal({ firstName: 'Arthur', lastName: 'Dent' },
36
- adapter.serializable_hash)
37
- end
38
- end
39
- end
40
- end
@@ -1,100 +0,0 @@
1
- require 'test_helper'
2
- module ActiveModel
3
- class Serializer
4
- module Adapter
5
- class DeprecationTest < ActiveSupport::TestCase
6
- class PostSerializer < ActiveModel::Serializer
7
- attribute :body
8
- end
9
- setup do
10
- post = Post.new(id: 1, body: 'Hello')
11
- @serializer = PostSerializer.new(post)
12
- end
13
-
14
- def test_null_adapter_serialization_deprecation
15
- expected = {}
16
- assert_deprecated do
17
- assert_equal(expected, Null.new(@serializer).as_json)
18
- end
19
- end
20
-
21
- def test_json_adapter_serialization_deprecation
22
- expected = { post: { body: 'Hello' } }
23
- assert_deprecated do
24
- assert_equal(expected, Json.new(@serializer).as_json)
25
- end
26
- end
27
-
28
- def test_jsonapi_adapter_serialization_deprecation
29
- expected = {
30
- data: {
31
- id: '1',
32
- type: 'posts',
33
- attributes: {
34
- body: 'Hello'
35
- }
36
- }
37
- }
38
- assert_deprecated do
39
- assert_equal(expected, JsonApi.new(@serializer).as_json)
40
- end
41
- end
42
-
43
- def test_attributes_adapter_serialization_deprecation
44
- expected = { body: 'Hello' }
45
- assert_deprecated do
46
- assert_equal(expected, Attributes.new(@serializer).as_json)
47
- end
48
- end
49
-
50
- def test_adapter_create_deprecation
51
- assert_deprecated do
52
- Adapter.create(@serializer)
53
- end
54
- end
55
-
56
- def test_adapter_adapter_map_deprecation
57
- assert_deprecated do
58
- Adapter.adapter_map
59
- end
60
- end
61
-
62
- def test_adapter_adapters_deprecation
63
- assert_deprecated do
64
- Adapter.adapters
65
- end
66
- end
67
-
68
- def test_adapter_adapter_class_deprecation
69
- assert_deprecated do
70
- Adapter.adapter_class(:json_api)
71
- end
72
- end
73
-
74
- def test_adapter_register_deprecation
75
- assert_deprecated do
76
- begin
77
- Adapter.register(:test, Class.new)
78
- ensure
79
- Adapter.adapter_map.delete('test')
80
- end
81
- end
82
- end
83
-
84
- def test_adapter_lookup_deprecation
85
- assert_deprecated do
86
- Adapter.lookup(:json_api)
87
- end
88
- end
89
-
90
- private
91
-
92
- def assert_deprecated
93
- assert_output(nil, /deprecated/) do
94
- yield
95
- end
96
- end
97
- end
98
- end
99
- end
100
- end
@@ -1,45 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class Json
6
- class BelongsToTest < ActiveSupport::TestCase
7
- def setup
8
- @post = Post.new(id: 42, title: 'New Post', body: 'Body')
9
- @anonymous_post = Post.new(id: 43, title: 'Hello!!', body: 'Hello, world!!')
10
- @comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
11
- @post.comments = [@comment]
12
- @anonymous_post.comments = []
13
- @comment.post = @post
14
- @comment.author = nil
15
- @anonymous_post.author = nil
16
- @blog = Blog.new(id: 1, name: 'My Blog!!')
17
- @post.blog = @blog
18
- @anonymous_post.blog = nil
19
-
20
- @serializer = CommentSerializer.new(@comment)
21
- @adapter = ActiveModelSerializers::Adapter::Json.new(@serializer)
22
- ActionController::Base.cache_store.clear
23
- end
24
-
25
- def test_includes_post
26
- assert_equal({ id: 42, title: 'New Post', body: 'Body' }, @adapter.serializable_hash[:comment][:post])
27
- end
28
-
29
- def test_include_nil_author
30
- serializer = PostSerializer.new(@anonymous_post)
31
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
32
-
33
- assert_equal({ post: { title: 'Hello!!', body: 'Hello, world!!', id: 43, comments: [], blog: { id: 999, name: 'Custom blog' }, author: nil } }, adapter.serializable_hash)
34
- end
35
-
36
- def test_include_nil_author_with_specified_serializer
37
- serializer = PostPreviewSerializer.new(@anonymous_post)
38
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
39
-
40
- assert_equal({ post: { title: 'Hello!!', body: 'Hello, world!!', id: 43, comments: [], author: nil } }, adapter.serializable_hash)
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,104 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class Json
6
- class Collection < ActiveSupport::TestCase
7
- def setup
8
- @author = Author.new(id: 1, name: 'Steve K.')
9
- @first_post = Post.new(id: 1, title: 'Hello!!', body: 'Hello, world!!')
10
- @second_post = Post.new(id: 2, title: 'New Post', body: 'Body')
11
- @first_post.comments = []
12
- @second_post.comments = []
13
- @first_post.author = @author
14
- @second_post.author = @author
15
- @blog = Blog.new(id: 1, name: 'My Blog!!')
16
- @first_post.blog = @blog
17
- @second_post.blog = nil
18
-
19
- ActionController::Base.cache_store.clear
20
- end
21
-
22
- def test_with_serializer_option
23
- @blog.special_attribute = 'Special'
24
- @blog.articles = [@first_post, @second_post]
25
- serializer = ActiveModel::Serializer::CollectionSerializer.new([@blog], serializer: CustomBlogSerializer)
26
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
27
-
28
- expected = { blogs: [{
29
- id: 1,
30
- special_attribute: 'Special',
31
- articles: [{ id: 1, title: 'Hello!!', body: 'Hello, world!!' }, { id: 2, title: 'New Post', body: 'Body' }]
32
- }] }
33
- assert_equal expected, adapter.serializable_hash
34
- end
35
-
36
- def test_include_multiple_posts
37
- serializer = ActiveModel::Serializer::CollectionSerializer.new([@first_post, @second_post])
38
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
39
-
40
- expected = { posts: [{
41
- title: 'Hello!!',
42
- body: 'Hello, world!!',
43
- id: 1,
44
- comments: [],
45
- author: {
46
- id: 1,
47
- name: 'Steve K.'
48
- },
49
- blog: {
50
- id: 999,
51
- name: 'Custom blog'
52
- }
53
- }, {
54
- title: 'New Post',
55
- body: 'Body',
56
- id: 2,
57
- comments: [],
58
- author: {
59
- id: 1,
60
- name: 'Steve K.'
61
- },
62
- blog: {
63
- id: 999,
64
- name: 'Custom blog'
65
- }
66
- }] }
67
- assert_equal expected, adapter.serializable_hash
68
- end
69
-
70
- def test_root_is_underscored
71
- virtual_value = VirtualValue.new(id: 1)
72
- serializer = ActiveModel::Serializer::CollectionSerializer.new([virtual_value])
73
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
74
-
75
- assert_equal 1, adapter.serializable_hash[:virtual_values].length
76
- end
77
-
78
- def test_include_option
79
- serializer = ActiveModel::Serializer::CollectionSerializer.new([@first_post, @second_post])
80
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer, include: '')
81
- actual = adapter.serializable_hash
82
- expected = { posts: [{ id: 1, title: 'Hello!!', body: 'Hello, world!!' },
83
- { id: 2, title: 'New Post', body: 'Body' }] }
84
-
85
- assert_equal(expected, actual)
86
- end
87
-
88
- def test_fields_with_no_associations_include_option
89
- actual = ActiveModelSerializers::SerializableResource.new(
90
- [@first_post, @second_post], adapter: :json, fields: [:id], include: []
91
- ).as_json
92
-
93
- expected = { posts: [{
94
- id: 1
95
- }, {
96
- id: 2
97
- }] }
98
-
99
- assert_equal(expected, actual)
100
- end
101
- end
102
- end
103
- end
104
- end
@@ -1,53 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class Json
6
- class HasManyTestTest < 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
- @post = Post.new(id: 42, title: 'New Post', body: 'Body')
15
- @first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
16
- @second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
17
- @post.comments = [@first_comment, @second_comment]
18
- @post.author = @author
19
- @first_comment.post = @post
20
- @second_comment.post = @post
21
- @blog = Blog.new(id: 1, name: 'My Blog!!')
22
- @post.blog = @blog
23
- @tag = ModelWithoutSerializer.new(id: 1, name: '#hash_tag')
24
- @post.tags = [@tag]
25
- end
26
-
27
- def test_has_many
28
- serializer = PostSerializer.new(@post)
29
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
30
- assert_equal([
31
- { id: 1, body: 'ZOMG A COMMENT' },
32
- { id: 2, body: 'ZOMG ANOTHER COMMENT' }
33
- ], adapter.serializable_hash[:post][:comments])
34
- end
35
-
36
- def test_has_many_with_no_serializer
37
- post_serializer_class = Class.new(ActiveModel::Serializer) do
38
- attributes :id
39
- has_many :tags
40
- end
41
- serializer = post_serializer_class.new(@post)
42
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
43
- assert_equal({
44
- id: 42,
45
- tags: [
46
- { 'id' => 1, 'name' => '#hash_tag' }
47
- ]
48
- }.to_json, adapter.serializable_hash[:post].to_json)
49
- end
50
- end
51
- end
52
- end
53
- end
@@ -1,93 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class Json
6
- class KeyCaseTest < ActiveSupport::TestCase
7
- def mock_request(key_transform = nil)
8
- context = Minitest::Mock.new
9
- context.expect(:request_url, URI)
10
- context.expect(:query_parameters, {})
11
- options = {}
12
- options[:key_transform] = key_transform if key_transform
13
- options[:serialization_context] = context
14
- serializer = CustomBlogSerializer.new(@blog)
15
- @adapter = ActiveModelSerializers::Adapter::Json.new(serializer, options)
16
- end
17
-
18
- class Post < ::Model; end
19
- class PostSerializer < ActiveModel::Serializer
20
- attributes :id, :title, :body, :publish_at
21
- end
22
-
23
- setup do
24
- ActionController::Base.cache_store.clear
25
- @blog = Blog.new(id: 1, name: 'My Blog!!', special_attribute: 'neat')
26
- end
27
-
28
- def test_transform_default
29
- mock_request
30
- assert_equal({
31
- blog: { id: 1, special_attribute: 'neat', articles: nil }
32
- }, @adapter.serializable_hash)
33
- end
34
-
35
- def test_transform_global_config
36
- mock_request
37
- result = with_config(key_transform: :camel_lower) do
38
- @adapter.serializable_hash
39
- end
40
- assert_equal({
41
- blog: { id: 1, specialAttribute: 'neat', articles: nil }
42
- }, result)
43
- end
44
-
45
- def test_transform_serialization_ctx_overrides_global_config
46
- mock_request(:camel)
47
- result = with_config(key_transform: :camel_lower) do
48
- @adapter.serializable_hash
49
- end
50
- assert_equal({
51
- Blog: { Id: 1, SpecialAttribute: 'neat', Articles: nil }
52
- }, result)
53
- end
54
-
55
- def test_transform_undefined
56
- mock_request(:blam)
57
- result = nil
58
- assert_raises NoMethodError do
59
- result = @adapter.serializable_hash
60
- end
61
- end
62
-
63
- def test_transform_dash
64
- mock_request(:dash)
65
- assert_equal({
66
- blog: { id: 1, :"special-attribute" => 'neat', articles: nil }
67
- }, @adapter.serializable_hash)
68
- end
69
-
70
- def test_transform_unaltered
71
- mock_request(:unaltered)
72
- assert_equal({
73
- blog: { id: 1, special_attribute: 'neat', articles: nil }
74
- }, @adapter.serializable_hash)
75
- end
76
-
77
- def test_transform_camel
78
- mock_request(:camel)
79
- assert_equal({
80
- Blog: { Id: 1, SpecialAttribute: 'neat', Articles: nil }
81
- }, @adapter.serializable_hash)
82
- end
83
-
84
- def test_transform_camel_lower
85
- mock_request(:camel_lower)
86
- assert_equal({
87
- blog: { id: 1, specialAttribute: 'neat', articles: nil }
88
- }, @adapter.serializable_hash)
89
- end
90
- end
91
- end
92
- end
93
- end
@@ -1,155 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- class BelongsToTest < ActiveSupport::TestCase
7
- def setup
8
- @author = Author.new(id: 1, name: 'Steve K.')
9
- @author.bio = nil
10
- @author.roles = []
11
- @blog = Blog.new(id: 23, name: 'AMS Blog')
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
- @post.blog = @blog
17
- @anonymous_post.comments = []
18
- @anonymous_post.blog = nil
19
- @comment.post = @post
20
- @comment.author = nil
21
- @post.author = @author
22
- @anonymous_post.author = nil
23
- @blog = Blog.new(id: 1, name: 'My Blog!!')
24
- @blog.writer = @author
25
- @blog.articles = [@post, @anonymous_post]
26
- @author.posts = []
27
-
28
- @serializer = CommentSerializer.new(@comment)
29
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer)
30
- ActionController::Base.cache_store.clear
31
- end
32
-
33
- def test_includes_post_id
34
- expected = { data: { type: 'posts', id: '42' } }
35
-
36
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:post])
37
- end
38
-
39
- def test_includes_linked_post
40
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:post])
41
- expected = [{
42
- id: '42',
43
- type: 'posts',
44
- attributes: {
45
- title: 'New Post',
46
- body: 'Body'
47
- },
48
- relationships: {
49
- comments: { data: [{ type: 'comments', id: '1' }] },
50
- blog: { data: { type: 'blogs', id: '999' } },
51
- author: { data: { type: 'authors', id: '1' } }
52
- }
53
- }]
54
- assert_equal expected, @adapter.serializable_hash[:included]
55
- end
56
-
57
- def test_limiting_linked_post_fields
58
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer, include: [:post], fields: { post: [:title, :comments, :blog, :author] })
59
- expected = [{
60
- id: '42',
61
- type: 'posts',
62
- attributes: {
63
- title: 'New Post'
64
- },
65
- relationships: {
66
- comments: { data: [{ type: 'comments', id: '1' }] },
67
- blog: { data: { type: 'blogs', id: '999' } },
68
- author: { data: { type: 'authors', id: '1' } }
69
- }
70
- }]
71
- assert_equal expected, @adapter.serializable_hash[:included]
72
- end
73
-
74
- def test_include_nil_author
75
- serializer = PostSerializer.new(@anonymous_post)
76
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
77
-
78
- assert_equal({ comments: { data: [] }, blog: { data: { type: 'blogs', id: '999' } }, author: { data: nil } }, adapter.serializable_hash[:data][:relationships])
79
- end
80
-
81
- def test_include_type_for_association_when_different_than_name
82
- serializer = BlogSerializer.new(@blog)
83
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
84
- relationships = adapter.serializable_hash[:data][:relationships]
85
- expected = {
86
- writer: {
87
- data: {
88
- type: 'authors',
89
- id: '1'
90
- }
91
- },
92
- articles: {
93
- data: [
94
- {
95
- type: 'posts',
96
- id: '42'
97
- },
98
- {
99
- type: 'posts',
100
- id: '43'
101
- }
102
- ]
103
- }
104
- }
105
- assert_equal expected, relationships
106
- end
107
-
108
- def test_include_linked_resources_with_type_name
109
- serializer = BlogSerializer.new(@blog)
110
- adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer, include: [:writer, :articles])
111
- linked = adapter.serializable_hash[:included]
112
- expected = [
113
- {
114
- id: '1',
115
- type: 'authors',
116
- attributes: {
117
- name: 'Steve K.'
118
- },
119
- relationships: {
120
- posts: { data: [] },
121
- roles: { data: [] },
122
- bio: { data: nil }
123
- }
124
- }, {
125
- id: '42',
126
- type: 'posts',
127
- attributes: {
128
- title: 'New Post',
129
- body: 'Body'
130
- },
131
- relationships: {
132
- comments: { data: [{ type: 'comments', id: '1' }] },
133
- blog: { data: { type: 'blogs', id: '999' } },
134
- author: { data: { type: 'authors', id: '1' } }
135
- }
136
- }, {
137
- id: '43',
138
- type: 'posts',
139
- attributes: {
140
- title: 'Hello!!',
141
- body: 'Hello, world!!'
142
- },
143
- relationships: {
144
- comments: { data: [] },
145
- blog: { data: { type: 'blogs', id: '999' } },
146
- author: { data: nil }
147
- }
148
- }
149
- ]
150
- assert_equal expected, linked
151
- end
152
- end
153
- end
154
- end
155
- end