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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +726 -6
- data/{MIT-LICENSE.txt → MIT-LICENSE} +3 -2
- data/README.md +194 -545
- data/lib/action_controller/serialization.rb +53 -38
- data/lib/active_model/serializable_resource.rb +13 -0
- data/lib/active_model/serializer/adapter/attributes.rb +17 -0
- data/lib/active_model/serializer/adapter/base.rb +20 -0
- data/lib/active_model/serializer/adapter/json.rb +17 -0
- data/lib/active_model/serializer/adapter/json_api.rb +17 -0
- data/lib/active_model/serializer/adapter/null.rb +17 -0
- data/lib/active_model/serializer/adapter.rb +26 -0
- data/lib/active_model/serializer/array_serializer.rb +14 -0
- data/lib/active_model/serializer/association.rb +73 -0
- data/lib/active_model/serializer/attribute.rb +27 -0
- data/lib/active_model/serializer/belongs_to_reflection.rb +13 -0
- data/lib/active_model/serializer/collection_serializer.rb +99 -0
- data/lib/active_model/serializer/concerns/caching.rb +305 -0
- data/lib/active_model/serializer/error_serializer.rb +16 -0
- data/lib/active_model/serializer/errors_serializer.rb +34 -0
- data/lib/active_model/serializer/field.rb +92 -0
- data/lib/active_model/serializer/fieldset.rb +33 -0
- data/lib/active_model/serializer/has_many_reflection.rb +12 -0
- data/lib/active_model/serializer/has_one_reflection.rb +9 -0
- data/lib/active_model/serializer/lazy_association.rb +99 -0
- data/lib/active_model/serializer/link.rb +23 -0
- data/lib/active_model/serializer/lint.rb +152 -0
- data/lib/active_model/serializer/null.rb +19 -0
- data/lib/active_model/serializer/reflection.rb +212 -0
- data/lib/active_model/serializer/version.rb +7 -0
- data/lib/active_model/serializer.rb +354 -442
- data/lib/active_model_serializers/adapter/attributes.rb +36 -0
- data/lib/active_model_serializers/adapter/base.rb +85 -0
- data/lib/active_model_serializers/adapter/json.rb +23 -0
- data/lib/active_model_serializers/adapter/json_api/deserialization.rb +215 -0
- data/lib/active_model_serializers/adapter/json_api/error.rb +98 -0
- data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +51 -0
- data/lib/active_model_serializers/adapter/json_api/link.rb +85 -0
- data/lib/active_model_serializers/adapter/json_api/meta.rb +39 -0
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +94 -0
- data/lib/active_model_serializers/adapter/json_api/relationship.rb +106 -0
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +68 -0
- data/lib/active_model_serializers/adapter/json_api.rb +535 -0
- data/lib/active_model_serializers/adapter/null.rb +11 -0
- data/lib/active_model_serializers/adapter.rb +100 -0
- data/lib/active_model_serializers/callbacks.rb +57 -0
- data/lib/active_model_serializers/deprecate.rb +56 -0
- data/lib/active_model_serializers/deserialization.rb +17 -0
- data/lib/active_model_serializers/json_pointer.rb +16 -0
- data/lib/active_model_serializers/logging.rb +124 -0
- data/lib/active_model_serializers/lookup_chain.rb +82 -0
- data/lib/active_model_serializers/model.rb +132 -0
- data/lib/active_model_serializers/railtie.rb +62 -0
- data/lib/active_model_serializers/register_jsonapi_renderer.rb +80 -0
- data/lib/active_model_serializers/serializable_resource.rb +84 -0
- data/lib/active_model_serializers/serialization_context.rb +41 -0
- data/lib/active_model_serializers/test/schema.rb +140 -0
- data/lib/active_model_serializers/test/serializer.rb +127 -0
- data/lib/active_model_serializers/test.rb +9 -0
- data/lib/active_model_serializers.rb +49 -81
- data/lib/generators/rails/USAGE +6 -0
- data/lib/generators/rails/resource_override.rb +12 -0
- data/lib/generators/rails/serializer_generator.rb +38 -0
- data/lib/generators/rails/templates/serializer.rb.erb +8 -0
- data/lib/grape/active_model_serializers.rb +18 -0
- data/lib/grape/formatters/active_model_serializers.rb +34 -0
- data/lib/grape/helpers/active_model_serializers.rb +19 -0
- data/lib/tasks/rubocop.rake +60 -0
- metadata +240 -51
- data/.gitignore +0 -18
- data/.travis.yml +0 -28
- data/DESIGN.textile +0 -586
- data/Gemfile +0 -4
- data/Gemfile.edge +0 -9
- data/Rakefile +0 -18
- data/active_model_serializers.gemspec +0 -24
- data/bench/perf.rb +0 -43
- data/cruft.md +0 -19
- data/lib/active_model/array_serializer.rb +0 -104
- data/lib/active_model/serializer/associations.rb +0 -233
- data/lib/active_model/serializers/version.rb +0 -5
- data/lib/active_record/serializer_override.rb +0 -16
- data/lib/generators/resource_override.rb +0 -13
- data/lib/generators/serializer/USAGE +0 -9
- data/lib/generators/serializer/serializer_generator.rb +0 -42
- data/lib/generators/serializer/templates/serializer.rb +0 -19
- data/test/array_serializer_test.rb +0 -75
- data/test/association_test.rb +0 -592
- data/test/caching_test.rb +0 -96
- data/test/generators_test.rb +0 -85
- data/test/no_serialization_scope_test.rb +0 -34
- data/test/serialization_scope_name_test.rb +0 -67
- data/test/serialization_test.rb +0 -392
- data/test/serializer_support_test.rb +0 -51
- data/test/serializer_test.rb +0 -1465
- data/test/test_fakes.rb +0 -217
- data/test/test_helper.rb +0 -32
data/test/generators_test.rb
DELETED
@@ -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
|
data/test/serialization_test.rb
DELETED
@@ -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
|
-
|