active_model_serializers 0.8.3 → 0.10.15

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 (97) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +726 -6
  3. data/{MIT-LICENSE.txt → MIT-LICENSE} +3 -2
  4. data/README.md +194 -545
  5. data/lib/action_controller/serialization.rb +53 -38
  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 +73 -0
  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 +7 -0
  31. data/lib/active_model/serializer.rb +354 -442
  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.rb +132 -0
  53. data/lib/active_model_serializers/railtie.rb +62 -0
  54. data/lib/active_model_serializers/register_jsonapi_renderer.rb +80 -0
  55. data/lib/active_model_serializers/serializable_resource.rb +84 -0
  56. data/lib/active_model_serializers/serialization_context.rb +41 -0
  57. data/lib/active_model_serializers/test/schema.rb +140 -0
  58. data/lib/active_model_serializers/test/serializer.rb +127 -0
  59. data/lib/active_model_serializers/test.rb +9 -0
  60. data/lib/active_model_serializers.rb +49 -81
  61. data/lib/generators/rails/USAGE +6 -0
  62. data/lib/generators/rails/resource_override.rb +12 -0
  63. data/lib/generators/rails/serializer_generator.rb +38 -0
  64. data/lib/generators/rails/templates/serializer.rb.erb +8 -0
  65. data/lib/grape/active_model_serializers.rb +18 -0
  66. data/lib/grape/formatters/active_model_serializers.rb +34 -0
  67. data/lib/grape/helpers/active_model_serializers.rb +19 -0
  68. data/lib/tasks/rubocop.rake +60 -0
  69. metadata +240 -51
  70. data/.gitignore +0 -18
  71. data/.travis.yml +0 -28
  72. data/DESIGN.textile +0 -586
  73. data/Gemfile +0 -4
  74. data/Gemfile.edge +0 -9
  75. data/Rakefile +0 -18
  76. data/active_model_serializers.gemspec +0 -24
  77. data/bench/perf.rb +0 -43
  78. data/cruft.md +0 -19
  79. data/lib/active_model/array_serializer.rb +0 -104
  80. data/lib/active_model/serializer/associations.rb +0 -233
  81. data/lib/active_model/serializers/version.rb +0 -5
  82. data/lib/active_record/serializer_override.rb +0 -16
  83. data/lib/generators/resource_override.rb +0 -13
  84. data/lib/generators/serializer/USAGE +0 -9
  85. data/lib/generators/serializer/serializer_generator.rb +0 -42
  86. data/lib/generators/serializer/templates/serializer.rb +0 -19
  87. data/test/array_serializer_test.rb +0 -75
  88. data/test/association_test.rb +0 -592
  89. data/test/caching_test.rb +0 -96
  90. data/test/generators_test.rb +0 -85
  91. data/test/no_serialization_scope_test.rb +0 -34
  92. data/test/serialization_scope_name_test.rb +0 -67
  93. data/test/serialization_test.rb +0 -392
  94. data/test/serializer_support_test.rb +0 -51
  95. data/test/serializer_test.rb +0 -1465
  96. data/test/test_fakes.rb +0 -217
  97. data/test/test_helper.rb +0 -32
@@ -1,85 +0,0 @@
1
- require 'test_helper'
2
-
3
- class Foo < Rails::Application
4
- if Rails.version.to_s.start_with? '4'
5
- config.eager_load = false
6
- config.secret_key_base = 'abc123'
7
- end
8
- end
9
-
10
- Rails.application.load_generators
11
-
12
- require 'generators/serializer/serializer_generator'
13
-
14
- class SerializerGeneratorTest < Rails::Generators::TestCase
15
- destination File.expand_path("../tmp", __FILE__)
16
- setup :prepare_destination
17
-
18
- tests Rails::Generators::SerializerGenerator
19
- arguments %w(account name:string description:text business:references)
20
-
21
- def test_generates_a_serializer
22
- run_generator
23
- assert_file "app/serializers/account_serializer.rb", /class AccountSerializer < ActiveModel::Serializer/
24
- end
25
-
26
- def test_generates_a_namespaced_serializer
27
- run_generator ["admin/account"]
28
- assert_file "app/serializers/admin/account_serializer.rb", /class Admin::AccountSerializer < ActiveModel::Serializer/
29
- end
30
-
31
- def test_uses_application_serializer_if_one_exists
32
- Object.const_set(:ApplicationSerializer, Class.new)
33
- run_generator
34
- assert_file "app/serializers/account_serializer.rb", /class AccountSerializer < ApplicationSerializer/
35
- ensure
36
- Object.send :remove_const, :ApplicationSerializer
37
- end
38
-
39
- def test_serializer_gets_id
40
- run_generator
41
-
42
- assert_file "app/serializers/account_serializer.rb" do |content|
43
- if RUBY_VERSION =~ /1.8/
44
- assert_match /def id/, content
45
- else
46
- assert_no_match /def id/, content
47
- end
48
- end
49
- end
50
-
51
- # def test_uses_namespace_application_serializer_if_one_exists
52
- # Object.const_set(:SerializerNamespace, Module.new)
53
- # SerializerNamespace.const_set(:ApplicationSerializer, Class.new)
54
- # Rails::Generators.namespace = SerializerNamespace
55
- # run_generator
56
- # assert_file "app/serializers/serializer_namespace/account_serializer.rb",
57
- # /module SerializerNamespace\n class AccountSerializer < ApplicationSerializer/
58
- # ensure
59
- # Object.send :remove_const, :SerializerNamespace
60
- # Rails::Generators.namespace = nil
61
- # end
62
-
63
- def test_uses_given_parent
64
- Object.const_set(:ApplicationSerializer, Class.new)
65
- run_generator ["Account", "--parent=MySerializer"]
66
- assert_file "app/serializers/account_serializer.rb", /class AccountSerializer < MySerializer/
67
- ensure
68
- Object.send :remove_const, :ApplicationSerializer
69
- end
70
-
71
- def test_generates_attributes_and_associations
72
- run_generator
73
- assert_file "app/serializers/account_serializer.rb" do |serializer|
74
- assert_match(/^ attributes :id, :name, :description$/, serializer)
75
- assert_match(/^ has_one :business$/, serializer)
76
- end
77
- end
78
-
79
- def test_with_no_attributes_does_not_add_extra_space
80
- run_generator ["account"]
81
- assert_file "app/serializers/account_serializer.rb" do |content|
82
- assert_no_match /\n\nend/, content
83
- end
84
- end
85
- end
@@ -1,34 +0,0 @@
1
- require "test_helper"
2
-
3
- class NoSerializationScopeTest < ActionController::TestCase
4
- class ScopeSerializer
5
- def initialize(object, options)
6
- @object, @options = object, options
7
- end
8
-
9
- def as_json(*)
10
- { :scope => @options[:scope].as_json }
11
- end
12
- end
13
-
14
- class ScopeSerializable
15
- def active_model_serializer
16
- ScopeSerializer
17
- end
18
- end
19
-
20
- class NoSerializationScopeController < ActionController::Base
21
- serialization_scope nil
22
-
23
- def index
24
- render :json => ScopeSerializable.new
25
- end
26
- end
27
-
28
- tests NoSerializationScopeController
29
-
30
- def test_disabled_serialization_scope
31
- get :index, :format => :json
32
- assert_equal '{"scope":null}', @response.body
33
- end
34
- end
@@ -1,67 +0,0 @@
1
- require 'test_helper'
2
- require 'pathname'
3
-
4
- class DefaultScopeNameTest < ActionController::TestCase
5
- TestUser = Struct.new(:name, :admin)
6
-
7
- class UserSerializer < ActiveModel::Serializer
8
- attributes :admin?
9
- def admin?
10
- current_user.admin
11
- end
12
- end
13
-
14
- class UserTestController < ActionController::Base
15
- protect_from_forgery
16
-
17
- before_filter { request.format = :json }
18
-
19
- def current_user
20
- TestUser.new('Pete', false)
21
- end
22
-
23
- def render_new_user
24
- render :json => TestUser.new('pete', false), :serializer => UserSerializer
25
- end
26
- end
27
-
28
- tests UserTestController
29
-
30
- def test_default_scope_name
31
- get :render_new_user
32
- assert_equal '{"user":{"admin":false}}', @response.body
33
- end
34
- end
35
-
36
- class SerializationScopeNameTest < ActionController::TestCase
37
- TestUser = Struct.new(:name, :admin)
38
-
39
- class AdminUserSerializer < ActiveModel::Serializer
40
- attributes :admin?
41
- def admin?
42
- current_admin.admin
43
- end
44
- end
45
-
46
- class AdminUserTestController < ActionController::Base
47
- protect_from_forgery
48
-
49
- serialization_scope :current_admin
50
- before_filter { request.format = :json }
51
-
52
- def current_admin
53
- TestUser.new('Bob', true)
54
- end
55
-
56
- def render_new_user
57
- render :json => TestUser.new('pete', false), :serializer => AdminUserSerializer
58
- end
59
- end
60
-
61
- tests AdminUserTestController
62
-
63
- def test_override_scope_name_with_controller
64
- get :render_new_user
65
- assert_equal '{"admin_user":{"admin":true}}', @response.body
66
- end
67
- end
@@ -1,392 +0,0 @@
1
- require 'test_helper'
2
- require 'pathname'
3
-
4
- class RenderJsonTest < ActionController::TestCase
5
- class JsonRenderable
6
- def as_json(options={})
7
- hash = { :a => :b, :c => :d, :e => :f }
8
- hash.except!(*options[:except]) if options[:except]
9
- hash
10
- end
11
-
12
- def to_json(options = {})
13
- super :except => [:c, :e]
14
- end
15
- end
16
-
17
- class JsonSerializer
18
- def initialize(object, options={})
19
- @object, @options = object, options
20
- end
21
-
22
- def as_json(*)
23
- hash = { :object => serializable_hash, :scope => @options[:scope].as_json }
24
- hash.merge!(:options => true) if @options[:options]
25
- hash.merge!(:check_defaults => true) if @options[:check_defaults]
26
- hash
27
- end
28
-
29
- def serializable_hash
30
- @object.as_json
31
- end
32
- end
33
-
34
- class JsonSerializable
35
- def initialize(skip=false)
36
- @skip = skip
37
- end
38
-
39
- def active_model_serializer
40
- JsonSerializer unless @skip
41
- end
42
-
43
- def as_json(*)
44
- { :serializable_object => true }
45
- end
46
- end
47
-
48
- class CustomSerializer
49
- def initialize(*)
50
- end
51
-
52
- def as_json(*)
53
- { :hello => true }
54
- end
55
- end
56
-
57
- class AnotherCustomSerializer
58
- def initialize(*)
59
- end
60
-
61
- def as_json(*)
62
- { :rails => 'rocks' }
63
- end
64
- end
65
-
66
- class DummyCustomSerializer < ActiveModel::Serializer
67
- attributes :id
68
- end
69
-
70
- class HypermediaSerializable
71
- def active_model_serializer
72
- HypermediaSerializer
73
- end
74
- end
75
-
76
- class HypermediaSerializer < ActiveModel::Serializer
77
- def as_json(*)
78
- { :link => hypermedia_url }
79
- end
80
- end
81
-
82
- class CustomArraySerializer < ActiveModel::ArraySerializer
83
- self.root = "items"
84
- end
85
-
86
- class TestController < ActionController::Base
87
- serialization_scope :current_user
88
- attr_reader :current_user
89
-
90
- def self.controller_path
91
- 'test'
92
- end
93
-
94
- def render_json_nil
95
- render :json => nil
96
- end
97
-
98
- def render_json_render_to_string
99
- render :text => render_to_string(:json => '[]')
100
- end
101
-
102
- def render_json_hello_world
103
- render :json => ActiveSupport::JSON.encode(:hello => 'world')
104
- end
105
-
106
- def render_json_hello_world_with_status
107
- render :json => ActiveSupport::JSON.encode(:hello => 'world'), :status => 401
108
- end
109
-
110
- def render_json_hello_world_with_callback
111
- render :json => ActiveSupport::JSON.encode(:hello => 'world'), :callback => 'alert'
112
- end
113
-
114
- def render_json_with_custom_content_type
115
- render :json => ActiveSupport::JSON.encode(:hello => 'world'), :content_type => 'text/javascript'
116
- end
117
-
118
- def render_symbol_json
119
- render :json => ActiveSupport::JSON.encode(:hello => 'world')
120
- end
121
-
122
- def render_json_nil_with_custom_serializer
123
- render :json => nil, :serializer => DummyCustomSerializer
124
- end
125
-
126
-
127
- def render_json_with_extra_options
128
- render :json => JsonRenderable.new, :except => [:c, :e]
129
- end
130
-
131
- def render_json_without_options
132
- render :json => JsonRenderable.new
133
- end
134
-
135
- def render_json_with_serializer
136
- @current_user = Struct.new(:as_json).new(:current_user => true)
137
- render :json => JsonSerializable.new
138
- end
139
-
140
- def render_json_with_serializer_and_implicit_root
141
- @current_user = Struct.new(:as_json).new(:current_user => true)
142
- render :json => [JsonSerializable.new]
143
- end
144
-
145
- def render_json_with_serializer_and_options
146
- @current_user = Struct.new(:as_json).new(:current_user => true)
147
- render :json => JsonSerializable.new, :options => true
148
- end
149
-
150
- def render_json_with_serializer_and_scope_option
151
- @current_user = Struct.new(:as_json).new(:current_user => true)
152
- scope = Struct.new(:as_json).new(:current_user => false)
153
- render :json => JsonSerializable.new, :scope => scope
154
- end
155
-
156
- def render_json_with_serializer_api_but_without_serializer
157
- @current_user = Struct.new(:as_json).new(:current_user => true)
158
- render :json => JsonSerializable.new(true)
159
- end
160
-
161
- # To specify a custom serializer for an object, use :serializer.
162
- def render_json_with_custom_serializer
163
- render :json => Object.new, :serializer => CustomSerializer
164
- end
165
-
166
- # To specify a custom serializer for each item in the Array, use :each_serializer.
167
- def render_json_array_with_custom_serializer
168
- render :json => [Object.new], :each_serializer => CustomSerializer
169
- end
170
-
171
- def render_json_array_with_wrong_option
172
- render :json => [Object.new], :serializer => CustomSerializer
173
- end
174
-
175
- def render_json_with_links
176
- render :json => HypermediaSerializable.new
177
- end
178
-
179
- def render_json_array_with_no_root
180
- render :json => [], :root => false
181
- end
182
-
183
- def render_json_empty_array
184
- render :json => []
185
- end
186
-
187
- def render_json_array_with_custom_array_serializer
188
- render :json => [], :serializer => CustomArraySerializer
189
- end
190
-
191
-
192
- private
193
- def default_serializer_options
194
- defaults = {}
195
- defaults.merge!(:check_defaults => true) if params[:check_defaults]
196
- defaults.merge!(:root => :awesome) if params[:check_default_root]
197
- defaults.merge!(:scope => :current_admin) if params[:check_default_scope]
198
- defaults.merge!(:serializer => AnotherCustomSerializer) if params[:check_default_serializer]
199
- defaults.merge!(:each_serializer => AnotherCustomSerializer) if params[:check_default_each_serializer]
200
- defaults
201
- end
202
- end
203
-
204
- tests TestController
205
-
206
- def setup
207
- # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
208
- # a more accurate simulation of what happens in "real life".
209
- super
210
- @controller.logger = Logger.new(nil)
211
-
212
- @request.host = "www.nextangle.com"
213
- end
214
-
215
- def test_render_json_nil
216
- get :render_json_nil
217
- assert_equal 'null', @response.body
218
- assert_equal 'application/json', @response.content_type
219
- end
220
-
221
- def test_render_json_render_to_string
222
- get :render_json_render_to_string
223
- assert_equal '[]', @response.body
224
- end
225
-
226
- def test_render_json_nil_with_custom_serializer
227
- get :render_json_nil_with_custom_serializer
228
- assert_equal "{\"dummy_custom\":null}", @response.body
229
- end
230
-
231
- def test_render_json
232
- get :render_json_hello_world
233
- assert_equal '{"hello":"world"}', @response.body
234
- assert_equal 'application/json', @response.content_type
235
- end
236
-
237
- def test_render_json_with_status
238
- get :render_json_hello_world_with_status
239
- assert_equal '{"hello":"world"}', @response.body
240
- assert_equal 401, @response.status
241
- end
242
-
243
- def test_render_json_with_callback
244
- get :render_json_hello_world_with_callback
245
- assert_equal 'alert({"hello":"world"})', @response.body
246
- # For JSONP, Rails 3 uses application/json, but Rails 4 uses text/javascript
247
- assert_match %r(application/json|text/javascript), @response.content_type.to_s
248
- end
249
-
250
- def test_render_json_with_custom_content_type
251
- get :render_json_with_custom_content_type
252
- assert_equal '{"hello":"world"}', @response.body
253
- assert_equal 'text/javascript', @response.content_type
254
- end
255
-
256
- def test_render_symbol_json
257
- get :render_symbol_json
258
- assert_equal '{"hello":"world"}', @response.body
259
- assert_equal 'application/json', @response.content_type
260
- end
261
-
262
- def test_render_json_forwards_extra_options
263
- get :render_json_with_extra_options
264
- assert_equal '{"a":"b"}', @response.body
265
- assert_equal 'application/json', @response.content_type
266
- end
267
-
268
- def test_render_json_calls_to_json_from_object
269
- get :render_json_without_options
270
- assert_equal '{"a":"b"}', @response.body
271
- end
272
-
273
- def test_render_json_with_serializer
274
- get :render_json_with_serializer
275
- assert_match '"scope":{"current_user":true}', @response.body
276
- assert_match '"object":{"serializable_object":true}', @response.body
277
- end
278
-
279
- def test_render_json_with_serializer_checking_defaults
280
- get :render_json_with_serializer, :check_defaults => true
281
- assert_match '"scope":{"current_user":true}', @response.body
282
- assert_match '"object":{"serializable_object":true}', @response.body
283
- assert_match '"check_defaults":true', @response.body
284
- end
285
-
286
- def test_render_json_with_serializer_checking_default_serailizer
287
- get :render_json_with_serializer, :check_default_serializer => true
288
- assert_match '{"rails":"rocks"}', @response.body
289
- end
290
-
291
- def test_render_json_with_serializer_checking_default_scope
292
- get :render_json_with_serializer, :check_default_scope => true
293
- assert_match '"scope":"current_admin"', @response.body
294
- end
295
-
296
- def test_render_json_with_serializer_and_implicit_root
297
- get :render_json_with_serializer_and_implicit_root
298
- assert_match '"test":[{"serializable_object":true}]', @response.body
299
- end
300
-
301
- def test_render_json_with_serializer_and_implicit_root_checking_default_each_serailizer
302
- get :render_json_with_serializer_and_implicit_root, :check_default_each_serializer => true
303
- assert_match '"test":[{"rails":"rocks"}]', @response.body
304
- end
305
-
306
- def test_render_json_with_serializer_and_options
307
- get :render_json_with_serializer_and_options
308
- assert_match '"scope":{"current_user":true}', @response.body
309
- assert_match '"object":{"serializable_object":true}', @response.body
310
- assert_match '"options":true', @response.body
311
- end
312
-
313
- def test_render_json_with_serializer_and_scope_option
314
- get :render_json_with_serializer_and_scope_option
315
- assert_match '"scope":{"current_user":false}', @response.body
316
- end
317
-
318
- def test_render_json_with_serializer_and_scope_option_checking_default_scope
319
- get :render_json_with_serializer_and_scope_option, :check_default_scope => true
320
- assert_match '"scope":{"current_user":false}', @response.body
321
- end
322
-
323
- def test_render_json_with_serializer_api_but_without_serializer
324
- get :render_json_with_serializer_api_but_without_serializer
325
- assert_match '{"serializable_object":true}', @response.body
326
- end
327
-
328
- def test_render_json_with_custom_serializer
329
- get :render_json_with_custom_serializer
330
- assert_match '{"hello":true}', @response.body
331
- end
332
-
333
- def test_render_json_with_custom_serializer_checking_default_serailizer
334
- get :render_json_with_custom_serializer, :check_default_serializer => true
335
- assert_match '{"hello":true}', @response.body
336
- end
337
-
338
- def test_render_json_array_with_custom_serializer
339
- get :render_json_array_with_custom_serializer
340
- assert_match '{"test":[{"hello":true}]}', @response.body
341
- end
342
-
343
- def test_render_json_array_with_wrong_option
344
- assert_raise ArgumentError do
345
- get :render_json_array_with_wrong_option
346
- end
347
- end
348
-
349
- def test_render_json_array_with_custom_serializer_checking_default_each_serailizer
350
- get :render_json_array_with_custom_serializer, :check_default_each_serializer => true
351
- assert_match '{"test":[{"hello":true}]}', @response.body
352
- end
353
-
354
- def test_render_json_with_links
355
- get :render_json_with_links
356
- assert_match '{"link":"http://www.nextangle.com/hypermedia"}', @response.body
357
- end
358
-
359
- def test_render_json_array_with_no_root
360
- get :render_json_array_with_no_root
361
- assert_equal '[]', @response.body
362
- end
363
-
364
- def test_render_json_array_with_no_root_checking_default_root
365
- get :render_json_array_with_no_root, :check_default_root => true
366
- assert_equal '[]', @response.body
367
- end
368
-
369
- def test_render_json_empty_array
370
- get :render_json_empty_array
371
- assert_equal '{"test":[]}', @response.body
372
- end
373
-
374
- def test_render_json_empty_array_checking_default_root
375
- get :render_json_empty_array, :check_default_root => true
376
- assert_equal '{"awesome":[]}', @response.body
377
- end
378
-
379
- def test_render_json_empty_array_with_array_serializer_root_false
380
- ActiveModel::ArraySerializer.root = false
381
- get :render_json_empty_array
382
- assert_equal '[]', @response.body
383
- ensure # teardown
384
- ActiveModel::ArraySerializer.root = nil
385
- end
386
-
387
- def test_render_json_array_with_custom_array_serializer
388
- get :render_json_array_with_custom_array_serializer
389
- assert_equal '{"items":[]}', @response.body
390
- end
391
-
392
- end
@@ -1,51 +0,0 @@
1
- require "test_helper"
2
-
3
- class RandomModel
4
- include ActiveModel::SerializerSupport
5
- end
6
-
7
- class OtherRandomModel
8
- include ActiveModel::SerializerSupport
9
- end
10
-
11
- class OtherRandomModelSerializer
12
- end
13
-
14
- class RandomModelCollection
15
- include ActiveModel::ArraySerializerSupport
16
- end
17
-
18
- module ActiveRecord
19
- class Relation
20
- end
21
- end
22
-
23
- module Mongoid
24
- class Criteria
25
- end
26
- end
27
-
28
- class SerializerSupportTest < ActiveModel::TestCase
29
- test "it returns nil if no serializer exists" do
30
- assert_equal nil, RandomModel.new.active_model_serializer
31
- end
32
-
33
- test "it returns a deducted serializer if it exists exists" do
34
- assert_equal OtherRandomModelSerializer, OtherRandomModel.new.active_model_serializer
35
- end
36
-
37
- test "it returns ArraySerializer for a collection" do
38
- assert_equal ActiveModel::ArraySerializer, RandomModelCollection.new.active_model_serializer
39
- end
40
-
41
- test "it automatically includes array_serializer in active_record/relation" do
42
- ActiveSupport.run_load_hooks(:active_record)
43
- assert_equal ActiveModel::ArraySerializer, ActiveRecord::Relation.new.active_model_serializer
44
- end
45
-
46
- test "it automatically includes array_serializer in mongoid/criteria" do
47
- ActiveSupport.run_load_hooks(:mongoid)
48
- assert_equal ActiveModel::ArraySerializer, Mongoid::Criteria.new.active_model_serializer
49
- end
50
- end
51
-