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,232 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActionController
4
- module Serialization
5
- class NamespaceLookupTest < ActionController::TestCase
6
- class Book < ::Model
7
- attributes :id, :title, :body
8
- associations :writer, :chapters
9
- end
10
- class Chapter < ::Model
11
- attributes :title
12
- end
13
- class Writer < ::Model
14
- attributes :name
15
- end
16
-
17
- module Api
18
- module V2
19
- class BookSerializer < ActiveModel::Serializer
20
- attributes :title
21
- end
22
- end
23
-
24
- module VHeader
25
- class BookSerializer < ActiveModel::Serializer
26
- attributes :title, :body
27
-
28
- def body
29
- 'header'
30
- end
31
- end
32
- end
33
-
34
- module V3
35
- class BookSerializer < ActiveModel::Serializer
36
- attributes :title, :body
37
-
38
- belongs_to :writer
39
- has_many :chapters
40
- end
41
-
42
- class ChapterSerializer < ActiveModel::Serializer
43
- attribute :title do
44
- "Chapter - #{object.title}"
45
- end
46
- end
47
-
48
- class WriterSerializer < ActiveModel::Serializer
49
- attributes :name
50
- end
51
-
52
- class LookupTestController < ActionController::Base
53
- before_action only: [:namespace_set_in_before_filter] do
54
- self.namespace_for_serializer = Api::V2
55
- end
56
-
57
- def implicit_namespaced_serializer
58
- writer = Writer.new(name: 'Bob')
59
- book = Book.new(title: 'New Post', body: 'Body', writer: writer, chapters: [])
60
-
61
- render json: book
62
- end
63
-
64
- def implicit_namespaced_collection_serializer
65
- chapter1 = Chapter.new(title: 'Oh')
66
- chapter2 = Chapter.new(title: 'Oh my')
67
-
68
- render json: [chapter1, chapter2]
69
- end
70
-
71
- def implicit_has_many_namespaced_serializer
72
- chapter1 = Chapter.new(title: 'Odd World')
73
- chapter2 = Chapter.new(title: 'New World')
74
- book = Book.new(title: 'New Post', body: 'Body', chapters: [chapter1, chapter2])
75
-
76
- render json: book
77
- end
78
-
79
- def explicit_namespace_as_module
80
- book = Book.new(title: 'New Post', body: 'Body')
81
-
82
- render json: book, namespace: Api::V2
83
- end
84
-
85
- def explicit_namespace_as_string
86
- book = Book.new(title: 'New Post', body: 'Body')
87
-
88
- # because this is a string, ruby can't auto-lookup the constant, so otherwise
89
- # the lookup thinks we mean ::Api::V2
90
- render json: book, namespace: 'ActionController::Serialization::NamespaceLookupTest::Api::V2'
91
- end
92
-
93
- def explicit_namespace_as_symbol
94
- book = Book.new(title: 'New Post', body: 'Body')
95
-
96
- # because this is a string, ruby can't auto-lookup the constant, so otherwise
97
- # the lookup thinks we mean ::Api::V2
98
- render json: book, namespace: :'ActionController::Serialization::NamespaceLookupTest::Api::V2'
99
- end
100
-
101
- def invalid_namespace
102
- book = Book.new(id: 'invalid_namespace_book_id', title: 'New Post', body: 'Body')
103
-
104
- render json: book, namespace: :api_v2
105
- end
106
-
107
- def namespace_set_in_before_filter
108
- book = Book.new(title: 'New Post', body: 'Body')
109
- render json: book
110
- end
111
-
112
- def namespace_set_by_request_headers
113
- book = Book.new(title: 'New Post', body: 'Body')
114
- version_from_header = request.headers['X-API_VERSION']
115
- namespace = "ActionController::Serialization::NamespaceLookupTest::#{version_from_header}"
116
-
117
- render json: book, namespace: namespace
118
- end
119
- end
120
- end
121
- end
122
-
123
- tests Api::V3::LookupTestController
124
-
125
- setup do
126
- @test_namespace = self.class.parent
127
- end
128
-
129
- test 'uses request headers to determine the namespace' do
130
- request.env['X-API_VERSION'] = 'Api::VHeader'
131
- get :namespace_set_by_request_headers
132
-
133
- assert_serializer Api::VHeader::BookSerializer
134
- end
135
-
136
- test 'implicitly uses namespaced serializer' do
137
- get :implicit_namespaced_serializer
138
-
139
- assert_serializer Api::V3::BookSerializer
140
-
141
- expected = { 'title' => 'New Post', 'body' => 'Body', 'writer' => { 'name' => 'Bob' }, 'chapters' => [] }
142
- actual = JSON.parse(@response.body)
143
-
144
- assert_equal expected, actual
145
- end
146
-
147
- test 'implicitly uses namespaced serializer for collection' do
148
- get :implicit_namespaced_collection_serializer
149
-
150
- assert_serializer 'ActiveModel::Serializer::CollectionSerializer'
151
-
152
- expected = [{ 'title' => 'Chapter - Oh' }, { 'title' => 'Chapter - Oh my' }]
153
- actual = JSON.parse(@response.body)
154
-
155
- assert_equal expected, actual
156
- end
157
-
158
- test 'implicitly uses namespaced serializer for has_many' do
159
- get :implicit_has_many_namespaced_serializer
160
-
161
- assert_serializer Api::V3::BookSerializer
162
-
163
- expected = {
164
- 'title' => 'New Post',
165
- 'body' => 'Body', 'writer' => nil,
166
- 'chapters' => [
167
- { 'title' => 'Chapter - Odd World' },
168
- { 'title' => 'Chapter - New World' }
169
- ]
170
- }
171
- actual = JSON.parse(@response.body)
172
-
173
- assert_equal expected, actual
174
- end
175
-
176
- test 'explicit namespace as module' do
177
- get :explicit_namespace_as_module
178
-
179
- assert_serializer Api::V2::BookSerializer
180
-
181
- expected = { 'title' => 'New Post' }
182
- actual = JSON.parse(@response.body)
183
-
184
- assert_equal expected, actual
185
- end
186
-
187
- test 'explicit namespace as string' do
188
- get :explicit_namespace_as_string
189
-
190
- assert_serializer Api::V2::BookSerializer
191
-
192
- expected = { 'title' => 'New Post' }
193
- actual = JSON.parse(@response.body)
194
-
195
- assert_equal expected, actual
196
- end
197
-
198
- test 'explicit namespace as symbol' do
199
- get :explicit_namespace_as_symbol
200
-
201
- assert_serializer Api::V2::BookSerializer
202
-
203
- expected = { 'title' => 'New Post' }
204
- actual = JSON.parse(@response.body)
205
-
206
- assert_equal expected, actual
207
- end
208
-
209
- test 'invalid namespace' do
210
- get :invalid_namespace
211
-
212
- assert_serializer ActiveModel::Serializer::Null
213
-
214
- expected = { 'id' => 'invalid_namespace_book_id', 'title' => 'New Post', 'body' => 'Body' }
215
- actual = JSON.parse(@response.body)
216
-
217
- assert_equal expected, actual
218
- end
219
-
220
- test 'namespace set in before filter' do
221
- get :namespace_set_in_before_filter
222
-
223
- assert_serializer Api::V2::BookSerializer
224
-
225
- expected = { 'title' => 'New Post' }
226
- actual = JSON.parse(@response.body)
227
-
228
- assert_equal expected, actual
229
- end
230
- end
231
- end
232
- end
@@ -1,235 +0,0 @@
1
- require 'test_helper'
2
-
3
- module SerializationScopeTesting
4
- class User < ActiveModelSerializers::Model
5
- attributes :id, :name, :admin
6
- def admin?
7
- admin
8
- end
9
- end
10
- class Comment < ActiveModelSerializers::Model
11
- attributes :id, :body
12
- end
13
- class Post < ActiveModelSerializers::Model
14
- attributes :id, :title, :body, :comments
15
- end
16
- class PostSerializer < ActiveModel::Serializer
17
- attributes :id, :title, :body, :comments
18
-
19
- def body
20
- "The 'scope' is the 'current_user': #{scope == current_user}"
21
- end
22
-
23
- def comments
24
- if current_user.admin?
25
- [Comment.new(id: 1, body: 'Admin')]
26
- else
27
- [Comment.new(id: 2, body: 'Scoped')]
28
- end
29
- end
30
-
31
- def json_key
32
- 'post'
33
- end
34
- end
35
- class PostTestController < ActionController::Base
36
- attr_writer :current_user
37
-
38
- def render_post_by_non_admin
39
- self.current_user = User.new(id: 3, name: 'Pete', admin: false)
40
- render json: new_post, serializer: serializer, adapter: :json
41
- end
42
-
43
- def render_post_by_admin
44
- self.current_user = User.new(id: 3, name: 'Pete', admin: true)
45
- render json: new_post, serializer: serializer, adapter: :json
46
- end
47
-
48
- def current_user
49
- defined?(@current_user) ? @current_user : :current_user_not_set
50
- end
51
-
52
- private
53
-
54
- def new_post
55
- Post.new(id: 4, title: 'Title')
56
- end
57
-
58
- def serializer
59
- PostSerializer
60
- end
61
- end
62
- class PostViewContextSerializer < PostSerializer
63
- def body
64
- "The 'scope' is the 'view_context': #{scope == view_context}"
65
- end
66
-
67
- def comments
68
- if view_context.controller.current_user.admin?
69
- [Comment.new(id: 1, body: 'Admin')]
70
- else
71
- [Comment.new(id: 2, body: 'Scoped')]
72
- end
73
- end
74
- end
75
- class DefaultScopeTest < ActionController::TestCase
76
- tests PostTestController
77
-
78
- def test_default_serialization_scope
79
- assert_equal :current_user, @controller._serialization_scope
80
- end
81
-
82
- def test_default_serialization_scope_object
83
- assert_equal :current_user_not_set, @controller.current_user
84
- assert_equal :current_user_not_set, @controller.serialization_scope
85
- end
86
-
87
- def test_default_scope_non_admin
88
- get :render_post_by_non_admin
89
- expected_json = {
90
- post: {
91
- id: 4,
92
- title: 'Title',
93
- body: "The 'scope' is the 'current_user': true",
94
- comments: [
95
- { id: 2, body: 'Scoped' }
96
- ]
97
- }
98
- }.to_json
99
- assert_equal expected_json, @response.body
100
- end
101
-
102
- def test_default_scope_admin
103
- get :render_post_by_admin
104
- expected_json = {
105
- post: {
106
- id: 4,
107
- title: 'Title',
108
- body: "The 'scope' is the 'current_user': true",
109
- comments: [
110
- { id: 1, body: 'Admin' }
111
- ]
112
- }
113
- }.to_json
114
- assert_equal expected_json, @response.body
115
- end
116
- end
117
- class SerializationScopeTest < ActionController::TestCase
118
- class PostViewContextTestController < PostTestController
119
- serialization_scope :view_context
120
-
121
- private
122
-
123
- def serializer
124
- PostViewContextSerializer
125
- end
126
- end
127
- tests PostViewContextTestController
128
-
129
- def test_defined_serialization_scope
130
- assert_equal :view_context, @controller._serialization_scope
131
- end
132
-
133
- def test_defined_serialization_scope_object
134
- assert_equal @controller.view_context.controller, @controller.serialization_scope.controller
135
- end
136
-
137
- def test_serialization_scope_non_admin
138
- get :render_post_by_non_admin
139
- expected_json = {
140
- post: {
141
- id: 4,
142
- title: 'Title',
143
- body: "The 'scope' is the 'view_context': true",
144
- comments: [
145
- { id: 2, body: 'Scoped' }
146
- ]
147
- }
148
- }.to_json
149
- assert_equal expected_json, @response.body
150
- end
151
-
152
- def test_serialization_scope_admin
153
- get :render_post_by_admin
154
- expected_json = {
155
- post: {
156
- id: 4,
157
- title: 'Title',
158
- body: "The 'scope' is the 'view_context': true",
159
- comments: [
160
- { id: 1, body: 'Admin' }
161
- ]
162
- }
163
- }.to_json
164
- assert_equal expected_json, @response.body
165
- end
166
- end
167
- class NilSerializationScopeTest < ActionController::TestCase
168
- class PostViewContextTestController < ActionController::Base
169
- serialization_scope nil
170
-
171
- attr_accessor :current_user
172
-
173
- def render_post_with_no_scope
174
- self.current_user = User.new(id: 3, name: 'Pete', admin: false)
175
- render json: new_post, serializer: PostSerializer, adapter: :json
176
- end
177
-
178
- def render_post_with_passed_in_scope
179
- self.current_user = User.new(id: 3, name: 'Pete', admin: false)
180
- render json: new_post, serializer: PostSerializer, adapter: :json, scope: current_user, scope_name: :current_user
181
- end
182
-
183
- def render_post_with_passed_in_scope_without_scope_name
184
- self.current_user = User.new(id: 3, name: 'Pete', admin: false)
185
- render json: new_post, serializer: PostSerializer, adapter: :json, scope: current_user
186
- end
187
-
188
- private
189
-
190
- def new_post
191
- Post.new(id: 4, title: 'Title')
192
- end
193
- end
194
- tests PostViewContextTestController
195
-
196
- def test_nil_serialization_scope
197
- assert_nil @controller._serialization_scope
198
- end
199
-
200
- def test_nil_serialization_scope_object
201
- assert_nil @controller.serialization_scope
202
- end
203
-
204
- def test_nil_scope
205
- exception_matcher = /current_user/
206
- exception = assert_raises(NameError) do
207
- get :render_post_with_no_scope
208
- end
209
- assert_match exception_matcher, exception.message
210
- end
211
-
212
- def test_serialization_scope_is_and_nil_scope_passed_in_current_user
213
- get :render_post_with_passed_in_scope
214
- expected_json = {
215
- post: {
216
- id: 4,
217
- title: 'Title',
218
- body: "The 'scope' is the 'current_user': true",
219
- comments: [
220
- { id: 2, body: 'Scoped' }
221
- ]
222
- }
223
- }.to_json
224
- assert_equal expected_json, @response.body
225
- end
226
-
227
- def test_serialization_scope_is_nil_and_scope_passed_in_current_user_without_scope_name
228
- exception_matcher = /current_user/
229
- exception = assert_raises(NameError) do
230
- get :render_post_with_passed_in_scope_without_scope_name
231
- end
232
- assert_match exception_matcher, exception.message
233
- end
234
- end
235
- end