active_model_serializers 0.9.8 → 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 (143) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +622 -59
  3. data/MIT-LICENSE +3 -2
  4. data/README.md +194 -846
  5. data/lib/action_controller/serialization.rb +35 -66
  6. data/lib/active_model/serializable_resource.rb +13 -0
  7. data/lib/active_model/serializer/adapter/attributes.rb +17 -0
  8. data/lib/active_model/serializer/adapter/base.rb +20 -0
  9. data/lib/active_model/serializer/adapter/json.rb +17 -0
  10. data/lib/active_model/serializer/adapter/json_api.rb +17 -0
  11. data/lib/active_model/serializer/adapter/null.rb +17 -0
  12. data/lib/active_model/serializer/adapter.rb +26 -0
  13. data/lib/active_model/serializer/array_serializer.rb +14 -0
  14. data/lib/active_model/serializer/association.rb +55 -40
  15. data/lib/active_model/serializer/attribute.rb +27 -0
  16. data/lib/active_model/serializer/belongs_to_reflection.rb +13 -0
  17. data/lib/active_model/serializer/collection_serializer.rb +99 -0
  18. data/lib/active_model/serializer/concerns/caching.rb +305 -0
  19. data/lib/active_model/serializer/error_serializer.rb +16 -0
  20. data/lib/active_model/serializer/errors_serializer.rb +34 -0
  21. data/lib/active_model/serializer/field.rb +92 -0
  22. data/lib/active_model/serializer/fieldset.rb +33 -0
  23. data/lib/active_model/serializer/has_many_reflection.rb +12 -0
  24. data/lib/active_model/serializer/has_one_reflection.rb +9 -0
  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 +152 -0
  28. data/lib/active_model/serializer/null.rb +19 -0
  29. data/lib/active_model/serializer/reflection.rb +212 -0
  30. data/lib/active_model/serializer/version.rb +3 -1
  31. data/lib/active_model/serializer.rb +363 -254
  32. data/lib/active_model_serializers/adapter/attributes.rb +36 -0
  33. data/lib/active_model_serializers/adapter/base.rb +85 -0
  34. data/lib/active_model_serializers/adapter/json.rb +23 -0
  35. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +215 -0
  36. data/lib/active_model_serializers/adapter/json_api/error.rb +98 -0
  37. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +51 -0
  38. data/lib/active_model_serializers/adapter/json_api/link.rb +85 -0
  39. data/lib/active_model_serializers/adapter/json_api/meta.rb +39 -0
  40. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +94 -0
  41. data/lib/active_model_serializers/adapter/json_api/relationship.rb +106 -0
  42. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +68 -0
  43. data/lib/active_model_serializers/adapter/json_api.rb +535 -0
  44. data/lib/active_model_serializers/adapter/null.rb +11 -0
  45. data/lib/active_model_serializers/adapter.rb +100 -0
  46. data/lib/active_model_serializers/callbacks.rb +57 -0
  47. data/lib/active_model_serializers/deprecate.rb +56 -0
  48. data/lib/active_model_serializers/deserialization.rb +17 -0
  49. data/lib/active_model_serializers/json_pointer.rb +16 -0
  50. data/lib/active_model_serializers/logging.rb +124 -0
  51. data/lib/active_model_serializers/lookup_chain.rb +82 -0
  52. data/lib/active_model_serializers/model/caching.rb +1 -0
  53. data/lib/active_model_serializers/model.rb +132 -0
  54. data/lib/active_model_serializers/railtie.rb +52 -0
  55. data/lib/active_model_serializers/register_jsonapi_renderer.rb +80 -0
  56. data/lib/active_model_serializers/serializable_resource.rb +84 -0
  57. data/lib/active_model_serializers/serialization_context.rb +41 -0
  58. data/lib/active_model_serializers/test/schema.rb +140 -0
  59. data/lib/active_model_serializers/test/serializer.rb +127 -0
  60. data/lib/active_model_serializers/test.rb +9 -0
  61. data/lib/active_model_serializers.rb +60 -17
  62. data/lib/generators/rails/USAGE +6 -0
  63. data/lib/{active_model/serializer/generators → generators/rails}/resource_override.rb +3 -4
  64. data/lib/{active_model/serializer/generators/serializer → generators/rails}/serializer_generator.rb +6 -5
  65. data/lib/{active_model/serializer/generators/serializer/templates/serializer.rb → generators/rails/templates/serializer.rb.erb} +0 -0
  66. data/lib/grape/active_model_serializers.rb +18 -0
  67. data/lib/grape/formatters/active_model_serializers.rb +34 -0
  68. data/lib/grape/helpers/active_model_serializers.rb +19 -0
  69. data/lib/tasks/rubocop.rake +55 -0
  70. metadata +272 -155
  71. data/CONTRIBUTING.md +0 -20
  72. data/DESIGN.textile +0 -586
  73. data/lib/action_controller/serialization_test_case.rb +0 -79
  74. data/lib/active_model/array_serializer.rb +0 -68
  75. data/lib/active_model/default_serializer.rb +0 -28
  76. data/lib/active_model/serializable/utils.rb +0 -16
  77. data/lib/active_model/serializable.rb +0 -59
  78. data/lib/active_model/serializer/association/has_many.rb +0 -39
  79. data/lib/active_model/serializer/association/has_one.rb +0 -25
  80. data/lib/active_model/serializer/config.rb +0 -31
  81. data/lib/active_model/serializer/generators/serializer/USAGE +0 -9
  82. data/lib/active_model/serializer/generators/serializer/scaffold_controller_generator.rb +0 -14
  83. data/lib/active_model/serializer/generators/serializer/templates/controller.rb +0 -93
  84. data/lib/active_model/serializer/railtie.rb +0 -22
  85. data/lib/active_model/serializer_support.rb +0 -5
  86. data/test/benchmark/app.rb +0 -60
  87. data/test/benchmark/benchmarking_support.rb +0 -67
  88. data/test/benchmark/bm_active_record.rb +0 -41
  89. data/test/benchmark/setup.rb +0 -75
  90. data/test/benchmark/tmp/miniprofiler/mp_timers_6eqewtfgrhitvq5gqm25 +0 -0
  91. data/test/benchmark/tmp/miniprofiler/mp_timers_8083sx03hu72pxz1a4d0 +0 -0
  92. data/test/benchmark/tmp/miniprofiler/mp_timers_fyz2gsml4z0ph9kpoy1c +0 -0
  93. data/test/benchmark/tmp/miniprofiler/mp_timers_hjry5rc32imd42oxoi48 +0 -0
  94. data/test/benchmark/tmp/miniprofiler/mp_timers_m8fpoz2cvt3g9agz0bs3 +0 -0
  95. data/test/benchmark/tmp/miniprofiler/mp_timers_p92m2drnj1i568u3sta0 +0 -0
  96. data/test/benchmark/tmp/miniprofiler/mp_timers_qg52tpca3uesdfguee9i +0 -0
  97. data/test/benchmark/tmp/miniprofiler/mp_timers_s15t1a6mvxe0z7vjv790 +0 -0
  98. data/test/benchmark/tmp/miniprofiler/mp_timers_x8kal3d17nfds6vp4kcj +0 -0
  99. data/test/benchmark/tmp/miniprofiler/mp_views_127.0.0.1 +0 -0
  100. data/test/fixtures/active_record.rb +0 -96
  101. data/test/fixtures/poro.rb +0 -223
  102. data/test/fixtures/template.html.erb +0 -1
  103. data/test/integration/action_controller/namespaced_serialization_test.rb +0 -105
  104. data/test/integration/action_controller/serialization_test.rb +0 -287
  105. data/test/integration/action_controller/serialization_test_case_test.rb +0 -71
  106. data/test/integration/active_record/active_record_test.rb +0 -94
  107. data/test/integration/generators/resource_generator_test.rb +0 -26
  108. data/test/integration/generators/scaffold_controller_generator_test.rb +0 -64
  109. data/test/integration/generators/serializer_generator_test.rb +0 -41
  110. data/test/test_app.rb +0 -14
  111. data/test/test_helper.rb +0 -24
  112. data/test/tmp/app/assets/javascripts/accounts.js +0 -2
  113. data/test/tmp/app/assets/stylesheets/accounts.css +0 -4
  114. data/test/tmp/app/controllers/accounts_controller.rb +0 -2
  115. data/test/tmp/app/helpers/accounts_helper.rb +0 -2
  116. data/test/tmp/app/serializers/account_serializer.rb +0 -3
  117. data/test/tmp/config/routes.rb +0 -1
  118. data/test/unit/active_model/array_serializer/except_test.rb +0 -18
  119. data/test/unit/active_model/array_serializer/key_format_test.rb +0 -18
  120. data/test/unit/active_model/array_serializer/meta_test.rb +0 -53
  121. data/test/unit/active_model/array_serializer/only_test.rb +0 -18
  122. data/test/unit/active_model/array_serializer/options_test.rb +0 -16
  123. data/test/unit/active_model/array_serializer/root_test.rb +0 -102
  124. data/test/unit/active_model/array_serializer/scope_test.rb +0 -24
  125. data/test/unit/active_model/array_serializer/serialization_test.rb +0 -216
  126. data/test/unit/active_model/default_serializer_test.rb +0 -13
  127. data/test/unit/active_model/serializer/associations/build_serializer_test.rb +0 -36
  128. data/test/unit/active_model/serializer/associations_test.rb +0 -49
  129. data/test/unit/active_model/serializer/attributes_test.rb +0 -57
  130. data/test/unit/active_model/serializer/config_test.rb +0 -91
  131. data/test/unit/active_model/serializer/filter_test.rb +0 -69
  132. data/test/unit/active_model/serializer/has_many_polymorphic_test.rb +0 -189
  133. data/test/unit/active_model/serializer/has_many_test.rb +0 -265
  134. data/test/unit/active_model/serializer/has_one_and_has_many_test.rb +0 -27
  135. data/test/unit/active_model/serializer/has_one_polymorphic_test.rb +0 -196
  136. data/test/unit/active_model/serializer/has_one_test.rb +0 -253
  137. data/test/unit/active_model/serializer/key_format_test.rb +0 -25
  138. data/test/unit/active_model/serializer/meta_test.rb +0 -39
  139. data/test/unit/active_model/serializer/options_test.rb +0 -42
  140. data/test/unit/active_model/serializer/root_test.rb +0 -117
  141. data/test/unit/active_model/serializer/scope_test.rb +0 -49
  142. data/test/unit/active_model/serializer/url_helpers_test.rb +0 -35
  143. data/test/unit/active_model/serilizable_test.rb +0 -50
@@ -1,216 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class ArraySerializer
5
- class BasicObjectsSerializationTest < Minitest::Test
6
- def setup
7
- array = [1, 2, 3]
8
- @serializer = Serializer.serializer_for(array).new(array)
9
- end
10
-
11
- def test_serializer_for_array_returns_appropriate_type
12
- assert_kind_of ActiveModel::ArraySerializer, @serializer
13
- end
14
-
15
- def test_array_serializer_serializes_simple_objects
16
- assert_equal [1, 2, 3], @serializer.serializable_array
17
- assert_equal [1, 2, 3], @serializer.as_json
18
- end
19
- end
20
-
21
- class CustomArraySerializerSupport < Minitest::Test
22
- def setup
23
- Object.const_set(:ArraySerializer, Class.new)
24
-
25
- array = [1, 2, 3]
26
- @serializer_class = Serializer.serializer_for(array)
27
- end
28
-
29
- def teardown
30
- Object.send(:remove_const, :ArraySerializer)
31
- end
32
-
33
- def test_serializer_for_array_returns_appropriate_type
34
- assert_equal ::ArraySerializer, @serializer_class
35
- end
36
- end
37
-
38
- class CustomSerializerClassTest < Minitest::Test
39
- def setup
40
- Object.const_set(:CustomSerializer, Class.new)
41
- end
42
-
43
- def teardown
44
- Object.send(:remove_const, :CustomSerializer)
45
- end
46
-
47
- def test_serializer_for_array_returns_appropriate_type
48
- object = {}
49
- def object.serializer_class; CustomSerializer; end
50
-
51
- assert_equal CustomSerializer, Serializer.serializer_for(object)
52
- end
53
- end
54
-
55
- class ModelSerializationTest < Minitest::Test
56
- def test_array_serializer_serializes_models
57
- array = [Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),
58
- Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })]
59
- serializer = ArraySerializer.new(array)
60
-
61
- expected = [{ name: 'Name 1', description: 'Description 1' },
62
- { name: 'Name 2', description: 'Description 2' }]
63
-
64
- assert_equal expected, serializer.serializable_array
65
- assert_equal expected, serializer.as_json
66
- end
67
-
68
- def test_array_serializers_each_serializer
69
- array = [::Model.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),
70
- ::Model.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' })]
71
- serializer = ArraySerializer.new(array, each_serializer: ProfileSerializer)
72
-
73
- expected = [{ name: 'Name 1', description: 'Description 1' },
74
- { name: 'Name 2', description: 'Description 2' }]
75
-
76
- assert_equal expected, serializer.serializable_array
77
- assert_equal expected, serializer.as_json
78
- end
79
-
80
- def test_associated_objects_of_multiple_instances_embedded_in_root
81
- @association = PostSerializer._associations[:comments]
82
- @old_association = @association.dup
83
-
84
- @association.embed = :ids
85
- @association.embed_in_root = true
86
-
87
- @post1 = Post.new({ title: 'Title 1', body: 'Body 1', date: '1/1/2000' })
88
- @post2 = Post.new({ title: 'Title 2', body: 'Body 2', date: '1/1/2000' })
89
-
90
- class << @post2
91
- attr_writer :comments
92
- end
93
-
94
- @post2.comments = [
95
- Comment.new(content: 'C3'),
96
- Comment.new(content: 'C4')
97
- ]
98
-
99
- @serializer = ArraySerializer.new([@post1, @post2], root: :posts)
100
- assert_equal({
101
- posts: [
102
- {title: "Title 1", body: "Body 1", "comment_ids" => @post1.comments.map(&:object_id) },
103
- {title: "Title 2", body: "Body 2", "comment_ids" => @post2.comments.map(&:object_id) }
104
- ],
105
- 'comments' => [
106
- {content: "C1"},
107
- {content: "C2"},
108
- {content: "C3"},
109
- {content: "C4"}
110
- ]
111
- }, @serializer.as_json)
112
- ensure
113
- PostSerializer._associations[:comments] = @old_association
114
- end
115
-
116
- def test_embed_object_for_has_one_association_with_nil_value
117
- @association = UserSerializer._associations[:profile]
118
- @old_association = @association.dup
119
-
120
- @association.embed = :objects
121
-
122
- @user1 = User.new({ name: 'User 1', email: 'email1@server.com' })
123
- @user2 = User.new({ name: 'User 2', email: 'email2@server.com' })
124
-
125
- class << @user1
126
- def profile
127
- nil
128
- end
129
- end
130
-
131
- class << @user2
132
- def profile
133
- @profile ||= Profile.new(name: 'Name 1', description: 'Desc 1')
134
- end
135
- end
136
-
137
- @serializer = ArraySerializer.new([@user1, @user2]) #, root: :posts)
138
- assert_equal([
139
- { name: "User 1", email: "email1@server.com", profile: nil },
140
- { name: "User 2", email: "email2@server.com", profile: { name: 'Name 1', description: 'Desc 1' } }
141
- ], @serializer.as_json)
142
- ensure
143
- UserSerializer._associations[:profile] = @old_association
144
- end
145
-
146
- def test_embed_object_in_root_for_has_one_association_with_nil_value
147
- @association = UserSerializer._associations[:profile]
148
- @old_association = @association.dup
149
-
150
- @association.embed = :ids
151
- @association.embed_in_root = true
152
-
153
- @user1 = User.new({ name: 'User 1', email: 'email1@server.com' })
154
- @user2 = User.new({ name: 'User 2', email: 'email2@server.com' })
155
-
156
- class << @user1
157
- def profile
158
- nil
159
- end
160
- end
161
-
162
- class << @user2
163
- def profile
164
- @profile ||= Profile.new(name: 'Name 1', description: 'Desc 1')
165
- end
166
- end
167
-
168
- @serializer = ArraySerializer.new([@user1, @user2], root: :users)
169
- assert_equal({
170
- users: [
171
- { name: "User 1", email: "email1@server.com", 'profile_id' => nil },
172
- { name: "User 2", email: "email2@server.com", 'profile_id' => @user2.profile.object_id }
173
- ],
174
- 'profiles' => [
175
- { name: 'Name 1', description: 'Desc 1' }
176
- ]
177
- }, @serializer.as_json)
178
- ensure
179
- UserSerializer._associations[:profile] = @old_association
180
- end
181
-
182
- def test_embed_object_in_root_for_has_one_association_with_all_nil_values
183
- @association = UserSerializer._associations[:profile]
184
- @old_association = @association.dup
185
-
186
- @association.embed = :ids
187
- @association.embed_in_root = true
188
-
189
- @user1 = User.new({ name: 'User 1', email: 'email1@server.com' })
190
- @user2 = User.new({ name: 'User 2', email: 'email2@server.com' })
191
-
192
- class << @user1
193
- def profile
194
- nil
195
- end
196
- end
197
-
198
- class << @user2
199
- def profile
200
- nil
201
- end
202
- end
203
-
204
- @serializer = ArraySerializer.new([@user1, @user2], root: :users)
205
- assert_equal({
206
- users: [
207
- { name: "User 1", email: "email1@server.com", 'profile_id' => nil },
208
- { name: "User 2", email: "email2@server.com", 'profile_id' => nil }
209
- ]
210
- }, @serializer.as_json)
211
- ensure
212
- UserSerializer._associations[:profile] = @old_association
213
- end
214
- end
215
- end
216
- end
@@ -1,13 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class DefaultSerializer
5
- class Test < Minitest::Test
6
- def test_serialize_objects
7
- assert_equal(nil, DefaultSerializer.new(nil).serializable_object)
8
- assert_equal(1, DefaultSerializer.new(1).serializable_object)
9
- assert_equal('hi', DefaultSerializer.new('hi').serializable_object)
10
- end
11
- end
12
- end
13
- end
@@ -1,36 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class Association
6
- class BuildSerializerTest < Minitest::Test
7
- def setup
8
- @association = Association::HasOne.new('post', serializer: PostSerializer)
9
- @post = Post.new({ title: 'Title 1', body: 'Body 1', date: '1/1/2000' })
10
- @user = User.new
11
- end
12
-
13
- def test_build_serializer_for_array_called_twice
14
- 2.times do
15
- serializer = @association.build_serializer(@post)
16
- assert_instance_of(PostSerializer, serializer)
17
- end
18
- end
19
-
20
- def test_build_serializer_from_in_a_namespace
21
- assoc = Association::HasOne.new('profile')
22
- serializer = TestNamespace::UserSerializer.new(@user).build_serializer(assoc)
23
-
24
- assert_instance_of(TestNamespace::ProfileSerializer, serializer)
25
- end
26
-
27
- def test_build_serializer_with_prefix
28
- assoc = Association::HasOne.new('profile', prefix: :short)
29
- serializer = UserSerializer.new(@user).build_serializer(assoc)
30
-
31
- assert_instance_of(ShortProfileSerializer, serializer)
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,49 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class AssociationsTest < Minitest::Test
6
- def test_associations_inheritance
7
- inherited_serializer_klass = Class.new(PostSerializer) do
8
- has_many :users
9
- end
10
- another_inherited_serializer_klass = Class.new(PostSerializer)
11
-
12
- assert_equal([:comments, :users],
13
- inherited_serializer_klass._associations.keys)
14
- assert_equal([:comments],
15
- another_inherited_serializer_klass._associations.keys)
16
- end
17
- def test_multiple_nested_associations
18
- parent = SelfReferencingUserParent.new(name: "The Parent")
19
- child = SelfReferencingUser.new(name: "The child", parent: parent)
20
- self_referencing_user_serializer = SelfReferencingUserSerializer.new(child)
21
- result = self_referencing_user_serializer.as_json
22
- expected_result = {
23
- "self_referencing_user"=>{
24
- :name=>"The child",
25
- "type_id"=>child.type.object_id,
26
- "parent_id"=>child.parent.object_id
27
-
28
- },
29
- "types"=>[
30
- {
31
- :name=>"N1",
32
- },
33
- {
34
- :name=>"N2",
35
- }
36
- ],
37
- "parents"=>[
38
- {
39
- :name=>"N1",
40
- "type_id"=>child.parent.type.object_id,
41
- "parent_id"=>nil
42
- }
43
- ]
44
- }
45
- assert_equal(expected_result, result)
46
- end
47
- end
48
- end
49
- end
@@ -1,57 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class AttributesTest < Minitest::Test
6
- def setup
7
- @profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
8
- @profile_serializer = ProfileSerializer.new(@profile)
9
- end
10
-
11
- def test_attributes_definition
12
- assert_equal([:name, :description],
13
- @profile_serializer.class._attributes)
14
- end
15
-
16
- def test_attributes_serialization_using_serializable_hash
17
- assert_equal({
18
- name: 'Name 1', description: 'Description 1'
19
- }, @profile_serializer.serializable_hash)
20
- end
21
-
22
- def test_attributes_serialization_using_as_json
23
- assert_equal({
24
- 'profile' => { name: 'Name 1', description: 'Description 1' }
25
- }, @profile_serializer.as_json)
26
- end
27
-
28
- def test_attributes_inheritance
29
- inherited_serializer_klass = Class.new(ProfileSerializer) do
30
- attributes :comments
31
- end
32
- another_inherited_serializer_klass = Class.new(ProfileSerializer)
33
-
34
- assert_equal([:name, :description, :comments],
35
- inherited_serializer_klass._attributes)
36
- assert_equal([:name, :description],
37
- another_inherited_serializer_klass._attributes)
38
- end
39
-
40
- def tests_query_attributes_strip_question_mark
41
- model = Class.new(::Model) do
42
- def strip?
43
- true
44
- end
45
- end
46
-
47
- serializer = Class.new(ActiveModel::Serializer) do
48
- attributes :strip?
49
- end
50
-
51
- actual = serializer.new(model.new).as_json
52
-
53
- assert_equal({ strip: true }, actual)
54
- end
55
- end
56
- end
57
- end
@@ -1,91 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class Config
6
- class Test < Minitest::Test
7
- def test_config_const_is_an_instance_of_config
8
- assert_kind_of Config, CONFIG
9
- end
10
-
11
- def test_config_instance
12
- config = Config.new
13
- config.setting1 = 'value1'
14
-
15
- assert_equal 'value1', config.setting1
16
- end
17
-
18
- def test_each_config
19
- config = Config.new
20
- config.setting1 = 'value1'
21
- config.setting2 = 'value2'
22
-
23
- actual = {}
24
-
25
- config.each do |k, v|
26
- actual[k] = v
27
- end
28
-
29
- assert_equal({ 'setting1' => 'value1', 'setting2' => 'value2' }, actual)
30
- end
31
- end
32
-
33
- class ConfigTest < Minitest::Test
34
- def test_setup
35
- Serializer.setup do |config|
36
- config.a = 'v1'
37
- config.b = 'v2'
38
- end
39
-
40
- assert_equal 'v1', CONFIG.a
41
- assert_equal 'v2', CONFIG.b
42
- ensure
43
- CONFIG.clear
44
- end
45
-
46
- def test_config_accessors
47
- Serializer.setup do |config|
48
- config.foo = 'v1'
49
- config.bar = 'v2'
50
- end
51
-
52
- assert_equal 'v1', CONFIG.foo
53
- assert_equal 'v2', CONFIG.bar
54
- ensure
55
- CONFIG.clear
56
- end
57
-
58
- def test_acessor_when_nil
59
- assert_nil CONFIG.foo
60
- CONFIG.foo = 1
61
- assert_equal 1, CONFIG.foo
62
- assert_nil CONFIG.bar
63
- end
64
- end
65
-
66
- class ApplyConfigTest < Minitest::Test
67
- def test_apply_config_to_associations
68
- CONFIG.embed = :ids
69
- CONFIG.embed_in_root = true
70
- CONFIG.key_format = :lower_camel
71
-
72
- association = PostSerializer._associations[:comments]
73
- old_association = association.dup
74
-
75
- association.send :initialize, association.name, association.options
76
-
77
- assert association.embed_ids?
78
- assert !association.embed_objects?
79
- assert association.embed_in_root
80
- assert_equal :lower_camel, association.key_format
81
- assert_equal 'post', PostSerializer.root_name
82
- CONFIG.plural_default_root = true
83
- assert_equal 'posts', PostSerializer.root_name
84
- ensure
85
- PostSerializer._associations[:comments] = old_association
86
- CONFIG.clear
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,69 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class FilterOptionsTest < Minitest::Test
6
- def setup
7
- @profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
8
- end
9
-
10
- def test_only_option
11
- @profile_serializer = ProfileSerializer.new(@profile, only: :name)
12
- assert_equal({
13
- 'profile' => { name: 'Name 1' }
14
- }, @profile_serializer.as_json)
15
- end
16
-
17
- def test_except_option
18
- @profile_serializer = ProfileSerializer.new(@profile, except: :comments)
19
- assert_equal({
20
- 'profile' => { name: 'Name 1', description: 'Description 1' }
21
- }, @profile_serializer.as_json)
22
- end
23
- end
24
-
25
- class FilterAttributesTest < Minitest::Test
26
- def setup
27
- @profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
28
- @profile_serializer = ProfileSerializer.new(@profile)
29
- @profile_serializer.instance_eval do
30
- def filter(keys)
31
- keys - [:description]
32
- end
33
- end
34
- end
35
-
36
- def test_filtered_attributes_serialization
37
- assert_equal({
38
- 'profile' => { name: 'Name 1' }
39
- }, @profile_serializer.as_json)
40
- end
41
- end
42
-
43
- class FilterAssociationsTest < Minitest::Test
44
- def setup
45
- @association = PostSerializer._associations[:comments]
46
- @old_association = @association.dup
47
- @association.embed = :ids
48
- @association.embed_in_root = true
49
- @post = Post.new({ title: 'Title 1', body: 'Body 1', date: '1/1/2000' })
50
- @post_serializer = PostSerializer.new(@post)
51
- @post_serializer.instance_eval do
52
- def filter(keys)
53
- keys - [:body, :comments]
54
- end
55
- end
56
- end
57
-
58
- def teardown
59
- PostSerializer._associations[:comments] = @old_association
60
- end
61
-
62
- def test_filtered_associations_serialization
63
- assert_equal({
64
- 'post' => { title: 'Title 1' }
65
- }, @post_serializer.as_json)
66
- end
67
- end
68
- end
69
- end