active_model_serializers 0.8.0 → 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 (98) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +702 -6
  3. data/{MIT-LICENSE.txt → MIT-LICENSE} +3 -2
  4. data/README.md +195 -536
  5. data/lib/action_controller/serialization.rb +53 -35
  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 +90 -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 +352 -441
  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 +90 -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 +25 -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 +49 -83
  62. data/lib/generators/rails/USAGE +6 -0
  63. data/lib/generators/rails/resource_override.rb +12 -0
  64. data/lib/generators/rails/serializer_generator.rb +38 -0
  65. data/lib/generators/rails/templates/serializer.rb.erb +8 -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 +291 -77
  71. data/.gitignore +0 -18
  72. data/.travis.yml +0 -29
  73. data/DESIGN.textile +0 -586
  74. data/Gemfile +0 -6
  75. data/Gemfile.edge +0 -9
  76. data/Rakefile +0 -18
  77. data/active_model_serializers.gemspec +0 -25
  78. data/bench/perf.rb +0 -43
  79. data/cruft.md +0 -19
  80. data/lib/active_model/array_serializer.rb +0 -104
  81. data/lib/active_model/serializer/associations.rb +0 -233
  82. data/lib/active_model/serializers/version.rb +0 -5
  83. data/lib/active_record/serializer_override.rb +0 -16
  84. data/lib/generators/resource_override.rb +0 -13
  85. data/lib/generators/serializer/USAGE +0 -9
  86. data/lib/generators/serializer/serializer_generator.rb +0 -42
  87. data/lib/generators/serializer/templates/serializer.rb +0 -19
  88. data/test/array_serializer_test.rb +0 -54
  89. data/test/association_test.rb +0 -592
  90. data/test/caching_test.rb +0 -96
  91. data/test/generators_test.rb +0 -85
  92. data/test/no_serialization_scope_test.rb +0 -34
  93. data/test/serialization_scope_name_test.rb +0 -67
  94. data/test/serialization_test.rb +0 -394
  95. data/test/serializer_support_test.rb +0 -51
  96. data/test/serializer_test.rb +0 -1452
  97. data/test/test_fakes.rb +0 -194
  98. data/test/test_helper.rb +0 -41
@@ -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,394 +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
- protect_from_forgery
88
-
89
- serialization_scope :current_user
90
- attr_reader :current_user
91
-
92
- def self.controller_path
93
- 'test'
94
- end
95
-
96
- def render_json_nil
97
- render :json => nil
98
- end
99
-
100
- def render_json_render_to_string
101
- render :text => render_to_string(:json => '[]')
102
- end
103
-
104
- def render_json_hello_world
105
- render :json => ActiveSupport::JSON.encode(:hello => 'world')
106
- end
107
-
108
- def render_json_hello_world_with_status
109
- render :json => ActiveSupport::JSON.encode(:hello => 'world'), :status => 401
110
- end
111
-
112
- def render_json_hello_world_with_callback
113
- render :json => ActiveSupport::JSON.encode(:hello => 'world'), :callback => 'alert'
114
- end
115
-
116
- def render_json_with_custom_content_type
117
- render :json => ActiveSupport::JSON.encode(:hello => 'world'), :content_type => 'text/javascript'
118
- end
119
-
120
- def render_symbol_json
121
- render :json => ActiveSupport::JSON.encode(:hello => 'world')
122
- end
123
-
124
- def render_json_nil_with_custom_serializer
125
- render :json => nil, :serializer => DummyCustomSerializer
126
- end
127
-
128
-
129
- def render_json_with_extra_options
130
- render :json => JsonRenderable.new, :except => [:c, :e]
131
- end
132
-
133
- def render_json_without_options
134
- render :json => JsonRenderable.new
135
- end
136
-
137
- def render_json_with_serializer
138
- @current_user = Struct.new(:as_json).new(:current_user => true)
139
- render :json => JsonSerializable.new
140
- end
141
-
142
- def render_json_with_serializer_and_implicit_root
143
- @current_user = Struct.new(:as_json).new(:current_user => true)
144
- render :json => [JsonSerializable.new]
145
- end
146
-
147
- def render_json_with_serializer_and_options
148
- @current_user = Struct.new(:as_json).new(:current_user => true)
149
- render :json => JsonSerializable.new, :options => true
150
- end
151
-
152
- def render_json_with_serializer_and_scope_option
153
- @current_user = Struct.new(:as_json).new(:current_user => true)
154
- scope = Struct.new(:as_json).new(:current_user => false)
155
- render :json => JsonSerializable.new, :scope => scope
156
- end
157
-
158
- def render_json_with_serializer_api_but_without_serializer
159
- @current_user = Struct.new(:as_json).new(:current_user => true)
160
- render :json => JsonSerializable.new(true)
161
- end
162
-
163
- # To specify a custom serializer for an object, use :serializer.
164
- def render_json_with_custom_serializer
165
- render :json => Object.new, :serializer => CustomSerializer
166
- end
167
-
168
- # To specify a custom serializer for each item in the Array, use :each_serializer.
169
- def render_json_array_with_custom_serializer
170
- render :json => [Object.new], :each_serializer => CustomSerializer
171
- end
172
-
173
- def render_json_array_with_wrong_option
174
- render :json => [Object.new], :serializer => CustomSerializer
175
- end
176
-
177
- def render_json_with_links
178
- render :json => HypermediaSerializable.new
179
- end
180
-
181
- def render_json_array_with_no_root
182
- render :json => [], :root => false
183
- end
184
-
185
- def render_json_empty_array
186
- render :json => []
187
- end
188
-
189
- def render_json_array_with_custom_array_serializer
190
- render :json => [], :serializer => CustomArraySerializer
191
- end
192
-
193
-
194
- private
195
- def default_serializer_options
196
- defaults = {}
197
- defaults.merge!(:check_defaults => true) if params[:check_defaults]
198
- defaults.merge!(:root => :awesome) if params[:check_default_root]
199
- defaults.merge!(:scope => :current_admin) if params[:check_default_scope]
200
- defaults.merge!(:serializer => AnotherCustomSerializer) if params[:check_default_serializer]
201
- defaults.merge!(:each_serializer => AnotherCustomSerializer) if params[:check_default_each_serializer]
202
- defaults
203
- end
204
- end
205
-
206
- tests TestController
207
-
208
- def setup
209
- # enable a logger so that (e.g.) the benchmarking stuff runs, so we can get
210
- # a more accurate simulation of what happens in "real life".
211
- super
212
- @controller.logger = Logger.new(nil)
213
-
214
- @request.host = "www.nextangle.com"
215
- end
216
-
217
- def test_render_json_nil
218
- get :render_json_nil
219
- assert_equal 'null', @response.body
220
- assert_equal 'application/json', @response.content_type
221
- end
222
-
223
- def test_render_json_render_to_string
224
- get :render_json_render_to_string
225
- assert_equal '[]', @response.body
226
- end
227
-
228
- def test_render_json_nil_with_custom_serializer
229
- get :render_json_nil_with_custom_serializer
230
- assert_equal "{\"dummy_custom\":null}", @response.body
231
- end
232
-
233
- def test_render_json
234
- get :render_json_hello_world
235
- assert_equal '{"hello":"world"}', @response.body
236
- assert_equal 'application/json', @response.content_type
237
- end
238
-
239
- def test_render_json_with_status
240
- get :render_json_hello_world_with_status
241
- assert_equal '{"hello":"world"}', @response.body
242
- assert_equal 401, @response.status
243
- end
244
-
245
- def test_render_json_with_callback
246
- get :render_json_hello_world_with_callback
247
- assert_equal 'alert({"hello":"world"})', @response.body
248
- # For JSONP, Rails 3 uses application/json, but Rails 4 uses text/javascript
249
- assert_match %r(application/json|text/javascript), @response.content_type.to_s
250
- end
251
-
252
- def test_render_json_with_custom_content_type
253
- get :render_json_with_custom_content_type
254
- assert_equal '{"hello":"world"}', @response.body
255
- assert_equal 'text/javascript', @response.content_type
256
- end
257
-
258
- def test_render_symbol_json
259
- get :render_symbol_json
260
- assert_equal '{"hello":"world"}', @response.body
261
- assert_equal 'application/json', @response.content_type
262
- end
263
-
264
- def test_render_json_forwards_extra_options
265
- get :render_json_with_extra_options
266
- assert_equal '{"a":"b"}', @response.body
267
- assert_equal 'application/json', @response.content_type
268
- end
269
-
270
- def test_render_json_calls_to_json_from_object
271
- get :render_json_without_options
272
- assert_equal '{"a":"b"}', @response.body
273
- end
274
-
275
- def test_render_json_with_serializer
276
- get :render_json_with_serializer
277
- assert_match '"scope":{"current_user":true}', @response.body
278
- assert_match '"object":{"serializable_object":true}', @response.body
279
- end
280
-
281
- def test_render_json_with_serializer_checking_defaults
282
- get :render_json_with_serializer, :check_defaults => true
283
- assert_match '"scope":{"current_user":true}', @response.body
284
- assert_match '"object":{"serializable_object":true}', @response.body
285
- assert_match '"check_defaults":true', @response.body
286
- end
287
-
288
- def test_render_json_with_serializer_checking_default_serailizer
289
- get :render_json_with_serializer, :check_default_serializer => true
290
- assert_match '{"rails":"rocks"}', @response.body
291
- end
292
-
293
- def test_render_json_with_serializer_checking_default_scope
294
- get :render_json_with_serializer, :check_default_scope => true
295
- assert_match '"scope":"current_admin"', @response.body
296
- end
297
-
298
- def test_render_json_with_serializer_and_implicit_root
299
- get :render_json_with_serializer_and_implicit_root
300
- assert_match '"test":[{"serializable_object":true}]', @response.body
301
- end
302
-
303
- def test_render_json_with_serializer_and_implicit_root_checking_default_each_serailizer
304
- get :render_json_with_serializer_and_implicit_root, :check_default_each_serializer => true
305
- assert_match '"test":[{"rails":"rocks"}]', @response.body
306
- end
307
-
308
- def test_render_json_with_serializer_and_options
309
- get :render_json_with_serializer_and_options
310
- assert_match '"scope":{"current_user":true}', @response.body
311
- assert_match '"object":{"serializable_object":true}', @response.body
312
- assert_match '"options":true', @response.body
313
- end
314
-
315
- def test_render_json_with_serializer_and_scope_option
316
- get :render_json_with_serializer_and_scope_option
317
- assert_match '"scope":{"current_user":false}', @response.body
318
- end
319
-
320
- def test_render_json_with_serializer_and_scope_option_checking_default_scope
321
- get :render_json_with_serializer_and_scope_option, :check_default_scope => true
322
- assert_match '"scope":{"current_user":false}', @response.body
323
- end
324
-
325
- def test_render_json_with_serializer_api_but_without_serializer
326
- get :render_json_with_serializer_api_but_without_serializer
327
- assert_match '{"serializable_object":true}', @response.body
328
- end
329
-
330
- def test_render_json_with_custom_serializer
331
- get :render_json_with_custom_serializer
332
- assert_match '{"hello":true}', @response.body
333
- end
334
-
335
- def test_render_json_with_custom_serializer_checking_default_serailizer
336
- get :render_json_with_custom_serializer, :check_default_serializer => true
337
- assert_match '{"hello":true}', @response.body
338
- end
339
-
340
- def test_render_json_array_with_custom_serializer
341
- get :render_json_array_with_custom_serializer
342
- assert_match '{"test":[{"hello":true}]}', @response.body
343
- end
344
-
345
- def test_render_json_array_with_wrong_option
346
- assert_raise ArgumentError do
347
- get :render_json_array_with_wrong_option
348
- end
349
- end
350
-
351
- def test_render_json_array_with_custom_serializer_checking_default_each_serailizer
352
- get :render_json_array_with_custom_serializer, :check_default_each_serializer => true
353
- assert_match '{"test":[{"hello":true}]}', @response.body
354
- end
355
-
356
- def test_render_json_with_links
357
- get :render_json_with_links
358
- assert_match '{"link":"http://www.nextangle.com/hypermedia"}', @response.body
359
- end
360
-
361
- def test_render_json_array_with_no_root
362
- get :render_json_array_with_no_root
363
- assert_equal '[]', @response.body
364
- end
365
-
366
- def test_render_json_array_with_no_root_checking_default_root
367
- get :render_json_array_with_no_root, :check_default_root => true
368
- assert_equal '[]', @response.body
369
- end
370
-
371
- def test_render_json_empty_array
372
- get :render_json_empty_array
373
- assert_equal '{"test":[]}', @response.body
374
- end
375
-
376
- def test_render_json_empty_array_checking_default_root
377
- get :render_json_empty_array, :check_default_root => true
378
- assert_equal '{"awesome":[]}', @response.body
379
- end
380
-
381
- def test_render_json_empty_array_with_array_serializer_root_false
382
- ActiveModel::ArraySerializer.root = false
383
- get :render_json_empty_array
384
- assert_equal '[]', @response.body
385
- ensure # teardown
386
- ActiveModel::ArraySerializer.root = nil
387
- end
388
-
389
- def test_render_json_array_with_custom_array_serializer
390
- get :render_json_array_with_custom_array_serializer
391
- assert_equal '{"items":[]}', @response.body
392
- end
393
-
394
- 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
-