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,193 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- class TypeTest < ActiveSupport::TestCase
7
- class StringTypeSerializer < ActiveModel::Serializer
8
- attribute :name
9
- type 'profile'
10
- end
11
-
12
- class SymbolTypeSerializer < ActiveModel::Serializer
13
- attribute :name
14
- type :profile
15
- end
16
-
17
- setup do
18
- @author = Author.new(id: 1, name: 'Steve K.')
19
- end
20
-
21
- def test_config_plural
22
- with_jsonapi_inflection :plural do
23
- assert_type(@author, 'authors')
24
- end
25
- end
26
-
27
- def test_config_singular
28
- with_jsonapi_inflection :singular do
29
- assert_type(@author, 'author')
30
- end
31
- end
32
-
33
- def test_explicit_string_type_value
34
- assert_type(@author, 'profile', serializer: StringTypeSerializer)
35
- end
36
-
37
- def test_explicit_symbol_type_value
38
- assert_type(@author, 'profile', serializer: SymbolTypeSerializer)
39
- end
40
-
41
- private
42
-
43
- def assert_type(resource, expected_type, opts = {})
44
- opts = opts.reverse_merge(adapter: :json_api)
45
- hash = serializable(resource, opts).serializable_hash
46
- assert_equal(expected_type, hash.fetch(:data).fetch(:type))
47
- end
48
- end
49
- class ResourceIdentifierTest < ActiveSupport::TestCase
50
- class WithDefinedTypeSerializer < ActiveModel::Serializer
51
- type 'with_defined_types'
52
- end
53
-
54
- class WithDefinedIdSerializer < ActiveModel::Serializer
55
- def id
56
- 'special_id'
57
- end
58
- end
59
-
60
- class FragmentedSerializer < ActiveModel::Serializer
61
- cache only: :id
62
-
63
- def id
64
- 'special_id'
65
- end
66
- end
67
-
68
- setup do
69
- @model = Author.new(id: 1, name: 'Steve K.')
70
- ActionController::Base.cache_store.clear
71
- end
72
-
73
- def test_defined_type
74
- actual = with_jsonapi_inflection :plural do
75
- actual_resource_identifier_object(WithDefinedTypeSerializer, @model)
76
- end
77
- expected = { id: expected_model_id(@model), type: 'with-defined-types' }
78
- assert_equal actual, expected
79
- end
80
-
81
- def test_defined_type_not_inflected
82
- actual = with_jsonapi_inflection :singular do
83
- actual_resource_identifier_object(WithDefinedTypeSerializer, @model)
84
- end
85
- expected = { id: expected_model_id(@model), type: 'with-defined-types' }
86
- assert_equal actual, expected
87
- end
88
-
89
- def test_singular_type
90
- actual = with_jsonapi_inflection :singular do
91
- actual_resource_identifier_object(AuthorSerializer, @model)
92
- end
93
- expected = { id: expected_model_id(@model), type: 'author' }
94
- assert_equal actual, expected
95
- end
96
-
97
- def test_plural_type
98
- actual = with_jsonapi_inflection :plural do
99
- actual_resource_identifier_object(AuthorSerializer, @model)
100
- end
101
- expected = { id: expected_model_id(@model), type: 'authors' }
102
- assert_equal actual, expected
103
- end
104
-
105
- def test_type_with_namespace
106
- Object.const_set(:Admin, Module.new)
107
- model = Class.new(::Model)
108
- Admin.const_set(:PowerUser, model)
109
- serializer = Class.new(ActiveModel::Serializer)
110
- Admin.const_set(:PowerUserSerializer, serializer)
111
- with_namespace_separator '--' do
112
- admin_user = Admin::PowerUser.new
113
- serializer = Admin::PowerUserSerializer.new(admin_user)
114
- expected = {
115
- id: admin_user.id,
116
- type: 'admin--power-users'
117
- }
118
-
119
- identifier = ResourceIdentifier.new(serializer, {})
120
- actual = identifier.as_json
121
- assert_equal(expected, actual)
122
- end
123
- end
124
-
125
- def test_id_defined_on_object
126
- actual = actual_resource_identifier_object(AuthorSerializer, @model)
127
- expected = { id: @model.id.to_s, type: expected_model_type(@model) }
128
- assert_equal actual, expected
129
- end
130
-
131
- def test_blank_id
132
- model = Author.new(id: nil, name: 'Steve K.')
133
- actual = actual_resource_identifier_object(AuthorSerializer, model)
134
- expected = { type: expected_model_type(model) }
135
- assert_equal actual, expected
136
- end
137
-
138
- def test_for_type_with_id
139
- id = 1
140
- actual = ResourceIdentifier.for_type_with_id('admin_user', id, {})
141
- expected = { id: '1', type: 'admin-users' }
142
- assert_equal actual, expected
143
- end
144
-
145
- def test_for_type_with_id_given_blank_id
146
- id = ''
147
- actual = ResourceIdentifier.for_type_with_id('admin_user', id, {})
148
- expected = { type: 'admin-users' }
149
- assert_equal actual, expected
150
- end
151
-
152
- def test_for_type_with_id_inflected
153
- id = 2
154
- actual = with_jsonapi_inflection :singular do
155
- ResourceIdentifier.for_type_with_id('admin_users', id, {})
156
- end
157
- expected = { id: '2', type: 'admin-user' }
158
- assert_equal actual, expected
159
- end
160
-
161
- def test_id_defined_on_serializer
162
- actual = actual_resource_identifier_object(WithDefinedIdSerializer, @model)
163
- expected = { id: 'special_id', type: expected_model_type(@model) }
164
- assert_equal actual, expected
165
- end
166
-
167
- def test_id_defined_on_fragmented
168
- actual = actual_resource_identifier_object(FragmentedSerializer, @model)
169
- expected = { id: 'special_id', type: expected_model_type(@model) }
170
- assert_equal actual, expected
171
- end
172
-
173
- private
174
-
175
- def actual_resource_identifier_object(serializer_class, model)
176
- serializer = serializer_class.new(model)
177
- resource_identifier = ResourceIdentifier.new(serializer, nil)
178
- resource_identifier.as_json
179
- end
180
-
181
- def expected_model_type(model, inflection = ActiveModelSerializers.config.jsonapi_resource_type)
182
- with_jsonapi_inflection inflection do
183
- model.class.model_name.send(inflection)
184
- end
185
- end
186
-
187
- def expected_model_id(model)
188
- model.id.to_s
189
- end
190
- end
191
- end
192
- end
193
- end
@@ -1,46 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonTest < ActiveSupport::TestCase
6
- def setup
7
- ActionController::Base.cache_store.clear
8
- @author = Author.new(id: 1, name: 'Steve K.')
9
- @post = Post.new(id: 1, title: 'New Post', body: 'Body')
10
- @first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
11
- @second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
12
- @post.comments = [@first_comment, @second_comment]
13
- @first_comment.post = @post
14
- @second_comment.post = @post
15
- @post.author = @author
16
- @blog = Blog.new(id: 1, name: 'My Blog!!')
17
- @post.blog = @blog
18
-
19
- @serializer = PostSerializer.new(@post)
20
- @adapter = ActiveModelSerializers::Adapter::Json.new(@serializer)
21
- end
22
-
23
- def test_has_many
24
- assert_equal([
25
- { id: 1, body: 'ZOMG A COMMENT' },
26
- { id: 2, body: 'ZOMG ANOTHER COMMENT' }
27
- ], @adapter.serializable_hash[:post][:comments])
28
- end
29
-
30
- def test_custom_keys
31
- serializer = PostWithCustomKeysSerializer.new(@post)
32
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
33
-
34
- assert_equal({
35
- id: 1,
36
- reviews: [
37
- { id: 1, body: 'ZOMG A COMMENT' },
38
- { id: 2, body: 'ZOMG ANOTHER COMMENT' }
39
- ],
40
- writer: { id: 1, name: 'Steve K.' },
41
- site: { id: 1, name: 'My Blog!!' }
42
- }, adapter.serializable_hash[:post])
43
- end
44
- end
45
- end
46
- end
@@ -1,22 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class NullTest < ActiveSupport::TestCase
6
- def setup
7
- profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
8
- serializer = ProfileSerializer.new(profile)
9
-
10
- @adapter = Null.new(serializer)
11
- end
12
-
13
- def test_serializable_hash
14
- assert_equal({}, @adapter.serializable_hash)
15
- end
16
-
17
- def test_it_returns_empty_json
18
- assert_equal('{}', @adapter.to_json)
19
- end
20
- end
21
- end
22
- end
@@ -1,218 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- module Adapter
6
- class PolymorphicTest < ActiveSupport::TestCase
7
- setup do
8
- @employee = Employee.new(id: 42, name: 'Zoop Zoopler', email: 'zoop@example.com')
9
- @picture = @employee.pictures.new(id: 1, title: 'headshot-1.jpg')
10
- @picture.imageable = @employee
11
- end
12
-
13
- def serialization(resource, adapter = :attributes)
14
- serializable(resource, adapter: adapter, serializer: PolymorphicBelongsToSerializer).as_json
15
- end
16
-
17
- def tag_serialization(adapter = :attributes)
18
- tag = PolyTag.new(id: 1, phrase: 'foo')
19
- tag.object_tags << ObjectTag.new(id: 1, poly_tag_id: 1, taggable: @employee)
20
- tag.object_tags << ObjectTag.new(id: 5, poly_tag_id: 1, taggable: @picture)
21
- serializable(tag, adapter: adapter, serializer: PolymorphicTagSerializer, include: '*.*').as_json
22
- end
23
-
24
- def test_attributes_serialization
25
- expected =
26
- {
27
- id: 1,
28
- title: 'headshot-1.jpg',
29
- imageable: {
30
- type: 'employee',
31
- employee: {
32
- id: 42,
33
- name: 'Zoop Zoopler'
34
- }
35
- }
36
- }
37
-
38
- assert_equal(expected, serialization(@picture))
39
- end
40
-
41
- def test_attributes_serialization_without_polymorphic_association
42
- expected =
43
- {
44
- id: 2,
45
- title: 'headshot-2.jpg',
46
- imageable: nil
47
- }
48
-
49
- simple_picture = Picture.new(id: 2, title: 'headshot-2.jpg')
50
- assert_equal(expected, serialization(simple_picture))
51
- end
52
-
53
- def test_attributes_serialization_with_polymorphic_has_many
54
- expected =
55
- {
56
- id: 1,
57
- phrase: 'foo',
58
- object_tags: [
59
- {
60
- id: 1,
61
- taggable: {
62
- type: 'employee',
63
- employee: {
64
- id: 42
65
- }
66
- }
67
- },
68
- {
69
- id: 5,
70
- taggable: {
71
- type: 'picture',
72
- picture: {
73
- id: 1
74
- }
75
- }
76
- }
77
- ]
78
- }
79
- assert_equal(expected, tag_serialization)
80
- end
81
-
82
- def test_json_serialization
83
- expected =
84
- {
85
- picture: {
86
- id: 1,
87
- title: 'headshot-1.jpg',
88
- imageable: {
89
- type: 'employee',
90
- employee: {
91
- id: 42,
92
- name: 'Zoop Zoopler'
93
- }
94
- }
95
- }
96
- }
97
-
98
- assert_equal(expected, serialization(@picture, :json))
99
- end
100
-
101
- def test_json_serialization_without_polymorphic_association
102
- expected =
103
- {
104
- picture: {
105
- id: 2,
106
- title: 'headshot-2.jpg',
107
- imageable: nil
108
- }
109
- }
110
-
111
- simple_picture = Picture.new(id: 2, title: 'headshot-2.jpg')
112
- assert_equal(expected, serialization(simple_picture, :json))
113
- end
114
-
115
- def test_json_serialization_with_polymorphic_has_many
116
- expected =
117
- {
118
- poly_tag: {
119
- id: 1,
120
- phrase: 'foo',
121
- object_tags: [
122
- {
123
- id: 1,
124
- taggable: {
125
- type: 'employee',
126
- employee: {
127
- id: 42
128
- }
129
- }
130
- },
131
- {
132
- id: 5,
133
- taggable: {
134
- type: 'picture',
135
- picture: {
136
- id: 1
137
- }
138
- }
139
- }
140
- ]
141
- }
142
- }
143
- assert_equal(expected, tag_serialization(:json))
144
- end
145
-
146
- def test_json_api_serialization
147
- expected =
148
- {
149
- data: {
150
- id: '1',
151
- type: 'pictures',
152
- attributes: {
153
- title: 'headshot-1.jpg'
154
- },
155
- relationships: {
156
- imageable: {
157
- data: {
158
- id: '42',
159
- type: 'employees'
160
- }
161
- }
162
- }
163
- }
164
- }
165
-
166
- assert_equal(expected, serialization(@picture, :json_api))
167
- end
168
-
169
- def test_json_api_serialization_with_polymorphic_belongs_to
170
- expected = {
171
- data: {
172
- id: '1',
173
- type: 'poly-tags',
174
- attributes: { phrase: 'foo' },
175
- relationships: {
176
- :"object-tags" => {
177
- data: [
178
- { id: '1', type: 'object-tags' },
179
- { id: '5', type: 'object-tags' }
180
- ]
181
- }
182
- }
183
- },
184
- included: [
185
- {
186
- id: '1',
187
- type: 'object-tags',
188
- relationships: {
189
- taggable: {
190
- data: { id: '42', type: 'employees' }
191
- }
192
- }
193
- },
194
- {
195
- id: '42',
196
- type: 'employees'
197
- },
198
- {
199
- id: '5',
200
- type: 'object-tags',
201
- relationships: {
202
- taggable: {
203
- data: { id: '1', type: 'pictures' }
204
- }
205
- }
206
- },
207
- {
208
- id: '1',
209
- type: 'pictures'
210
- }
211
- ]
212
- }
213
- assert_equal(expected, tag_serialization(:json_api))
214
- end
215
- end
216
- end
217
- end
218
- end