active_model_serializers 0.10.3 → 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 (224) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +154 -2
  3. data/README.md +153 -15
  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 +275 -81
  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 +53 -14
  15. data/lib/active_model/serializer/attribute.rb +2 -0
  16. data/lib/active_model/serializer/belongs_to_reflection.rb +7 -1
  17. data/lib/active_model/serializer/collection_serializer.rb +8 -5
  18. data/lib/active_model/serializer/concerns/caching.rb +36 -23
  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 +6 -1
  24. data/lib/active_model/serializer/has_one_reflection.rb +3 -1
  25. data/lib/active_model/serializer/lazy_association.rb +99 -0
  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 +122 -73
  30. data/lib/active_model/serializer/version.rb +3 -1
  31. data/lib/active_model_serializers.rb +29 -11
  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 +4 -2
  35. data/lib/active_model_serializers/adapter/json.rb +2 -0
  36. data/lib/active_model_serializers/adapter/json_api.rb +44 -26
  37. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +4 -2
  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 +42 -21
  43. data/lib/active_model_serializers/adapter/json_api/relationship.rb +52 -9
  44. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +35 -18
  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 +111 -30
  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 +4 -2
  60. data/lib/active_model_serializers/test/serializer.rb +2 -0
  61. data/lib/generators/rails/resource_override.rb +3 -1
  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 +55 -0
  67. metadata +74 -291
  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 -102
  72. data/.simplecov +0 -110
  73. data/.travis.yml +0 -51
  74. data/CODE_OF_CONDUCT.md +0 -74
  75. data/CONTRIBUTING.md +0 -105
  76. data/Gemfile +0 -56
  77. data/Rakefile +0 -103
  78. data/active_model_serializers.gemspec +0 -62
  79. data/appveyor.yml +0 -24
  80. data/bin/bench +0 -171
  81. data/bin/bench_regression +0 -316
  82. data/bin/serve_benchmark +0 -39
  83. data/docs/ARCHITECTURE.md +0 -125
  84. data/docs/README.md +0 -42
  85. data/docs/STYLE.md +0 -58
  86. data/docs/general/adapters.md +0 -247
  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 -14
  95. data/docs/general/rendering.md +0 -294
  96. data/docs/general/serializers.md +0 -461
  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 -137
  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 -65
  103. data/docs/howto/passing_arbitrary_options.md +0 -27
  104. data/docs/howto/serialize_poro.md +0 -32
  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 -144
  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/lib/active_model/serializer/collection_reflection.rb +0 -7
  115. data/lib/active_model/serializer/concerns/associations.rb +0 -102
  116. data/lib/active_model/serializer/concerns/attributes.rb +0 -82
  117. data/lib/active_model/serializer/concerns/configuration.rb +0 -59
  118. data/lib/active_model/serializer/concerns/links.rb +0 -35
  119. data/lib/active_model/serializer/concerns/meta.rb +0 -29
  120. data/lib/active_model/serializer/concerns/type.rb +0 -25
  121. data/lib/active_model/serializer/singular_reflection.rb +0 -7
  122. data/lib/active_model_serializers/key_transform.rb +0 -74
  123. data/test/action_controller/adapter_selector_test.rb +0 -53
  124. data/test/action_controller/explicit_serializer_test.rb +0 -135
  125. data/test/action_controller/json/include_test.rb +0 -246
  126. data/test/action_controller/json_api/deserialization_test.rb +0 -112
  127. data/test/action_controller/json_api/errors_test.rb +0 -40
  128. data/test/action_controller/json_api/fields_test.rb +0 -57
  129. data/test/action_controller/json_api/linked_test.rb +0 -202
  130. data/test/action_controller/json_api/pagination_test.rb +0 -116
  131. data/test/action_controller/json_api/transform_test.rb +0 -181
  132. data/test/action_controller/lookup_proc_test.rb +0 -49
  133. data/test/action_controller/namespace_lookup_test.rb +0 -226
  134. data/test/action_controller/serialization_scope_name_test.rb +0 -229
  135. data/test/action_controller/serialization_test.rb +0 -472
  136. data/test/active_model_serializers/adapter_for_test.rb +0 -208
  137. data/test/active_model_serializers/json_pointer_test.rb +0 -22
  138. data/test/active_model_serializers/key_transform_test.rb +0 -297
  139. data/test/active_model_serializers/logging_test.rb +0 -77
  140. data/test/active_model_serializers/model_test.rb +0 -22
  141. data/test/active_model_serializers/railtie_test_isolated.rb +0 -63
  142. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +0 -143
  143. data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -71
  144. data/test/active_model_serializers/test/schema_test.rb +0 -130
  145. data/test/active_model_serializers/test/serializer_test.rb +0 -62
  146. data/test/active_record_test.rb +0 -9
  147. data/test/adapter/attributes_test.rb +0 -43
  148. data/test/adapter/deprecation_test.rb +0 -100
  149. data/test/adapter/json/belongs_to_test.rb +0 -45
  150. data/test/adapter/json/collection_test.rb +0 -104
  151. data/test/adapter/json/has_many_test.rb +0 -45
  152. data/test/adapter/json/transform_test.rb +0 -93
  153. data/test/adapter/json_api/belongs_to_test.rb +0 -155
  154. data/test/adapter/json_api/collection_test.rb +0 -96
  155. data/test/adapter/json_api/errors_test.rb +0 -76
  156. data/test/adapter/json_api/fields_test.rb +0 -88
  157. data/test/adapter/json_api/has_many_embed_ids_test.rb +0 -43
  158. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -96
  159. data/test/adapter/json_api/has_many_test.rb +0 -165
  160. data/test/adapter/json_api/has_one_test.rb +0 -80
  161. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -166
  162. data/test/adapter/json_api/json_api_test.rb +0 -33
  163. data/test/adapter/json_api/linked_test.rb +0 -413
  164. data/test/adapter/json_api/links_test.rb +0 -95
  165. data/test/adapter/json_api/pagination_links_test.rb +0 -193
  166. data/test/adapter/json_api/parse_test.rb +0 -137
  167. data/test/adapter/json_api/relationship_test.rb +0 -397
  168. data/test/adapter/json_api/resource_identifier_test.rb +0 -110
  169. data/test/adapter/json_api/resource_meta_test.rb +0 -100
  170. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -82
  171. data/test/adapter/json_api/transform_test.rb +0 -504
  172. data/test/adapter/json_api/type_test.rb +0 -61
  173. data/test/adapter/json_test.rb +0 -46
  174. data/test/adapter/null_test.rb +0 -22
  175. data/test/adapter/polymorphic_test.rb +0 -171
  176. data/test/adapter_test.rb +0 -67
  177. data/test/array_serializer_test.rb +0 -22
  178. data/test/benchmark/app.rb +0 -65
  179. data/test/benchmark/benchmarking_support.rb +0 -67
  180. data/test/benchmark/bm_active_record.rb +0 -81
  181. data/test/benchmark/bm_adapter.rb +0 -38
  182. data/test/benchmark/bm_caching.rb +0 -119
  183. data/test/benchmark/bm_lookup_chain.rb +0 -83
  184. data/test/benchmark/bm_transform.rb +0 -45
  185. data/test/benchmark/config.ru +0 -3
  186. data/test/benchmark/controllers.rb +0 -83
  187. data/test/benchmark/fixtures.rb +0 -219
  188. data/test/cache_test.rb +0 -579
  189. data/test/collection_serializer_test.rb +0 -110
  190. data/test/fixtures/active_record.rb +0 -78
  191. data/test/fixtures/poro.rb +0 -286
  192. data/test/generators/scaffold_controller_generator_test.rb +0 -24
  193. data/test/generators/serializer_generator_test.rb +0 -74
  194. data/test/grape_test.rb +0 -178
  195. data/test/lint_test.rb +0 -49
  196. data/test/logger_test.rb +0 -20
  197. data/test/poro_test.rb +0 -9
  198. data/test/serializable_resource_test.rb +0 -79
  199. data/test/serializers/association_macros_test.rb +0 -37
  200. data/test/serializers/associations_test.rb +0 -370
  201. data/test/serializers/attribute_test.rb +0 -151
  202. data/test/serializers/attributes_test.rb +0 -52
  203. data/test/serializers/caching_configuration_test_isolated.rb +0 -170
  204. data/test/serializers/configuration_test.rb +0 -32
  205. data/test/serializers/fieldset_test.rb +0 -14
  206. data/test/serializers/meta_test.rb +0 -202
  207. data/test/serializers/options_test.rb +0 -21
  208. data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
  209. data/test/serializers/root_test.rb +0 -21
  210. data/test/serializers/serialization_test.rb +0 -55
  211. data/test/serializers/serializer_for_test.rb +0 -136
  212. data/test/serializers/serializer_for_with_namespace_test.rb +0 -87
  213. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  214. data/test/support/isolated_unit.rb +0 -82
  215. data/test/support/rails5_shims.rb +0 -53
  216. data/test/support/rails_app.rb +0 -36
  217. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  218. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  219. data/test/support/schemas/custom/show.json +0 -7
  220. data/test/support/schemas/hyper_schema.json +0 -93
  221. data/test/support/schemas/render_using_json_api.json +0 -43
  222. data/test/support/schemas/simple_json_pointers.json +0 -10
  223. data/test/support/serialization_testing.rb +0 -71
  224. data/test/test_helper.rb +0 -58
@@ -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,43 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class AttributesTest < ActiveSupport::TestCase
6
- class Person
7
- include ActiveModel::Model
8
- include ActiveModel::Serialization
9
-
10
- attr_accessor :first_name, :last_name
11
- end
12
-
13
- class PersonSerializer < ActiveModel::Serializer
14
- attributes :first_name, :last_name
15
- end
16
-
17
- def setup
18
- ActionController::Base.cache_store.clear
19
- end
20
-
21
- def test_serializable_hash
22
- person = Person.new(first_name: 'Arthur', last_name: 'Dent')
23
- serializer = PersonSerializer.new(person)
24
- adapter = ActiveModelSerializers::Adapter::Attributes.new(serializer)
25
-
26
- assert_equal({ first_name: 'Arthur', last_name: 'Dent' },
27
- adapter.serializable_hash)
28
- end
29
-
30
- def test_serializable_hash_with_transform_key_casing
31
- person = Person.new(first_name: 'Arthur', last_name: 'Dent')
32
- serializer = PersonSerializer.new(person)
33
- adapter = ActiveModelSerializers::Adapter::Attributes.new(
34
- serializer,
35
- key_transform: :camel_lower
36
- )
37
-
38
- assert_equal({ firstName: 'Arthur', lastName: 'Dent' },
39
- adapter.serializable_hash)
40
- end
41
- end
42
- end
43
- 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,45 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class Json
6
- class HasManyTestTest < ActiveSupport::TestCase
7
- def setup
8
- ActionController::Base.cache_store.clear
9
- @author = Author.new(id: 1, name: 'Steve K.')
10
- @post = Post.new(id: 42, title: 'New Post', body: 'Body')
11
- @first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
12
- @second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
13
- @post.comments = [@first_comment, @second_comment]
14
- @post.author = @author
15
- @first_comment.post = @post
16
- @second_comment.post = @post
17
- @blog = Blog.new(id: 1, name: 'My Blog!!')
18
- @post.blog = @blog
19
- @tag = Tag.new(id: 1, name: '#hash_tag')
20
- @post.tags = [@tag]
21
- end
22
-
23
- def test_has_many
24
- serializer = PostSerializer.new(@post)
25
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
26
- assert_equal([
27
- { id: 1, body: 'ZOMG A COMMENT' },
28
- { id: 2, body: 'ZOMG ANOTHER COMMENT' }
29
- ], adapter.serializable_hash[:post][:comments])
30
- end
31
-
32
- def test_has_many_with_no_serializer
33
- serializer = PostWithTagsSerializer.new(@post)
34
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
35
- assert_equal({
36
- id: 42,
37
- tags: [
38
- { 'id' => 1, 'name' => '#hash_tag' }
39
- ]
40
- }.to_json, adapter.serializable_hash[:post].to_json)
41
- end
42
- end
43
- end
44
- end
45
- 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