active_model_serializers 0.10.4 → 0.10.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +7 -3
- data/CHANGELOG.md +25 -1
- data/README.md +4 -4
- data/active_model_serializers.gemspec +1 -1
- data/appveyor.yml +9 -3
- data/docs/general/logging.md +7 -0
- data/docs/general/serializers.md +3 -3
- data/docs/howto/add_pagination_links.md +13 -13
- data/docs/howto/add_relationship_links.md +24 -21
- data/docs/howto/outside_controller_use.md +3 -2
- data/docs/howto/serialize_poro.md +46 -5
- data/docs/howto/upgrade_from_0_8_to_0_10.md +1 -1
- data/lib/active_model/serializer/version.rb +1 -1
- data/lib/active_model_serializers.rb +8 -0
- data/lib/active_model_serializers/model.rb +108 -30
- data/lib/active_model_serializers/test/schema.rb +2 -2
- data/lib/generators/rails/resource_override.rb +1 -1
- data/test/action_controller/adapter_selector_test.rb +11 -2
- data/test/action_controller/json_api/fields_test.rb +15 -6
- data/test/action_controller/json_api/transform_test.rb +11 -3
- data/test/action_controller/namespace_lookup_test.rb +14 -8
- data/test/action_controller/serialization_scope_name_test.rb +12 -6
- data/test/action_controller/serialization_test.rb +1 -1
- data/test/active_model_serializers/model_test.rb +122 -2
- data/test/active_model_serializers/railtie_test_isolated.rb +12 -7
- data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +37 -19
- data/test/adapter/attributes_test.rb +2 -5
- data/test/adapter/json/has_many_test.rb +10 -2
- data/test/adapter/json_api/fields_test.rb +11 -3
- data/test/adapter/json_api/has_many_test.rb +10 -2
- data/test/adapter/json_api/include_data_if_sideloaded_test.rb +22 -5
- data/test/adapter/json_api/linked_test.rb +3 -3
- data/test/adapter/json_api/links_test.rb +1 -1
- data/test/adapter/json_api/relationship_test.rb +1 -1
- data/test/adapter/json_api/transform_test.rb +11 -3
- data/test/cache_test.rb +100 -28
- data/test/collection_serializer_test.rb +23 -10
- data/test/fixtures/active_record.rb +45 -10
- data/test/fixtures/poro.rb +115 -176
- data/test/generators/serializer_generator_test.rb +1 -0
- data/test/grape_test.rb +20 -2
- data/test/serializers/associations_test.rb +28 -7
- data/test/serializers/attribute_test.rb +4 -2
- data/test/serializers/caching_configuration_test_isolated.rb +6 -6
- data/test/serializers/options_test.rb +17 -6
- data/test/serializers/read_attribute_for_serialization_test.rb +3 -3
- data/test/serializers/serialization_test.rb +2 -2
- data/test/serializers/serializer_for_test.rb +6 -6
- data/test/serializers/serializer_for_with_namespace_test.rb +6 -5
- data/test/support/rails_app.rb +2 -0
- data/test/test_helper.rb +12 -0
- metadata +13 -7
data/test/grape_test.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'test_helper'
|
2
|
-
|
2
|
+
TestHelper.silence_warnings do
|
3
|
+
require 'grape'
|
4
|
+
end
|
3
5
|
require 'grape/active_model_serializers'
|
4
6
|
require 'kaminari'
|
5
7
|
require 'kaminari/hooks'
|
@@ -53,7 +55,15 @@ module ActiveModelSerializers
|
|
53
55
|
|
54
56
|
class GrapeTest < Grape::API
|
55
57
|
format :json
|
56
|
-
|
58
|
+
TestHelper.silence_warnings do
|
59
|
+
include Grape::ActiveModelSerializers
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.resources(*)
|
63
|
+
TestHelper.silence_warnings do
|
64
|
+
super
|
65
|
+
end
|
66
|
+
end
|
57
67
|
|
58
68
|
resources :grape do
|
59
69
|
get '/render' do
|
@@ -93,6 +103,14 @@ module ActiveModelSerializers
|
|
93
103
|
Grape::Middleware::Globals.new(GrapeTest.new)
|
94
104
|
end
|
95
105
|
|
106
|
+
extend Minitest::Assertions
|
107
|
+
def self.run_one_method(*)
|
108
|
+
_, stderr = capture_io do
|
109
|
+
super
|
110
|
+
end
|
111
|
+
fail Minitest::Assertion, stderr if stderr !~ /grape/
|
112
|
+
end
|
113
|
+
|
96
114
|
def test_formatter_returns_json
|
97
115
|
get '/grape/render'
|
98
116
|
|
@@ -2,13 +2,17 @@ require 'test_helper'
|
|
2
2
|
module ActiveModel
|
3
3
|
class Serializer
|
4
4
|
class AssociationsTest < ActiveSupport::TestCase
|
5
|
+
class ModelWithoutSerializer < ::Model
|
6
|
+
attributes :id, :name
|
7
|
+
end
|
8
|
+
|
5
9
|
def setup
|
6
10
|
@author = Author.new(name: 'Steve K.')
|
7
11
|
@author.bio = nil
|
8
12
|
@author.roles = []
|
9
13
|
@blog = Blog.new(name: 'AMS Blog')
|
10
14
|
@post = Post.new(title: 'New Post', body: 'Body')
|
11
|
-
@tag =
|
15
|
+
@tag = ModelWithoutSerializer.new(id: 'tagid', name: '#hashtagged')
|
12
16
|
@comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
|
13
17
|
@post.comments = [@comment]
|
14
18
|
@post.tags = [@tag]
|
@@ -46,14 +50,18 @@ module ActiveModel
|
|
46
50
|
end
|
47
51
|
|
48
52
|
def test_has_many_with_no_serializer
|
49
|
-
|
53
|
+
post_serializer_class = Class.new(ActiveModel::Serializer) do
|
54
|
+
attributes :id
|
55
|
+
has_many :tags
|
56
|
+
end
|
57
|
+
post_serializer_class.new(@post).associations.each do |association|
|
50
58
|
key = association.key
|
51
59
|
serializer = association.serializer
|
52
60
|
options = association.options
|
53
61
|
|
54
62
|
assert_equal :tags, key
|
55
63
|
assert_nil serializer
|
56
|
-
assert_equal [{ name: '#hashtagged' }].to_json, options[:virtual_value].to_json
|
64
|
+
assert_equal [{ id: 'tagid', name: '#hashtagged' }].to_json, options[:virtual_value].to_json
|
57
65
|
end
|
58
66
|
end
|
59
67
|
|
@@ -62,7 +70,13 @@ module ActiveModel
|
|
62
70
|
.associations
|
63
71
|
.detect { |assoc| assoc.key == :comments }
|
64
72
|
|
65
|
-
|
73
|
+
comment_serializer = association.serializer.first
|
74
|
+
class << comment_serializer
|
75
|
+
def custom_options
|
76
|
+
instance_options
|
77
|
+
end
|
78
|
+
end
|
79
|
+
assert comment_serializer.custom_options.fetch(:custom_options)
|
66
80
|
end
|
67
81
|
|
68
82
|
def test_belongs_to
|
@@ -159,7 +173,9 @@ module ActiveModel
|
|
159
173
|
|
160
174
|
class NamespacedResourcesTest < ActiveSupport::TestCase
|
161
175
|
class ResourceNamespace
|
162
|
-
class Post
|
176
|
+
class Post < ::Model
|
177
|
+
associations :comments, :author, :description
|
178
|
+
end
|
163
179
|
class Comment < ::Model; end
|
164
180
|
class Author < ::Model; end
|
165
181
|
class Description < ::Model; end
|
@@ -200,7 +216,9 @@ module ActiveModel
|
|
200
216
|
end
|
201
217
|
|
202
218
|
class NestedSerializersTest < ActiveSupport::TestCase
|
203
|
-
class Post
|
219
|
+
class Post < ::Model
|
220
|
+
associations :comments, :author, :description
|
221
|
+
end
|
204
222
|
class Comment < ::Model; end
|
205
223
|
class Author < ::Model; end
|
206
224
|
class Description < ::Model; end
|
@@ -240,7 +258,10 @@ module ActiveModel
|
|
240
258
|
|
241
259
|
# rubocop:disable Metrics/AbcSize
|
242
260
|
def test_conditional_associations
|
243
|
-
model =
|
261
|
+
model = Class.new(::Model) do
|
262
|
+
attributes :true, :false
|
263
|
+
associations :association
|
264
|
+
end.new(true: true, false: false)
|
244
265
|
|
245
266
|
scenarios = [
|
246
267
|
{ options: { if: :true }, included: true },
|
@@ -81,7 +81,7 @@ module ActiveModel
|
|
81
81
|
assert_equal('custom', hash[:blog][:id])
|
82
82
|
end
|
83
83
|
|
84
|
-
class PostWithVirtualAttribute < ::Model; end
|
84
|
+
class PostWithVirtualAttribute < ::Model; attributes :first_name, :last_name end
|
85
85
|
class PostWithVirtualAttributeSerializer < ActiveModel::Serializer
|
86
86
|
attribute :name do
|
87
87
|
"#{object.first_name} #{object.last_name}"
|
@@ -98,7 +98,9 @@ module ActiveModel
|
|
98
98
|
|
99
99
|
# rubocop:disable Metrics/AbcSize
|
100
100
|
def test_conditional_associations
|
101
|
-
model =
|
101
|
+
model = Class.new(::Model) do
|
102
|
+
attributes :true, :false, :attribute
|
103
|
+
end.new(true: true, false: false)
|
102
104
|
|
103
105
|
scenarios = [
|
104
106
|
{ options: { if: :true }, included: true },
|
@@ -69,9 +69,9 @@ class CachingConfigurationTest < ActiveSupport::TestCase
|
|
69
69
|
end
|
70
70
|
|
71
71
|
test 'the non-cached serializer cache_store is nil' do
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
assert_nil @non_cached_serializer._cache
|
73
|
+
assert_nil @non_cached_serializer.cache_store
|
74
|
+
assert_nil @non_cached_serializer._cache
|
75
75
|
end
|
76
76
|
|
77
77
|
test 'the non-cached serializer does not have cache_enabled?' do
|
@@ -136,9 +136,9 @@ class CachingConfigurationTest < ActiveSupport::TestCase
|
|
136
136
|
end
|
137
137
|
|
138
138
|
test 'the non-cached serializer cache_store is nil' do
|
139
|
-
|
140
|
-
|
141
|
-
|
139
|
+
assert_nil @non_cached_serializer._cache
|
140
|
+
assert_nil @non_cached_serializer.cache_store
|
141
|
+
assert_nil @non_cached_serializer._cache
|
142
142
|
end
|
143
143
|
|
144
144
|
test 'the non-cached serializer does not have cache_enabled?' do
|
@@ -3,18 +3,29 @@ require 'test_helper'
|
|
3
3
|
module ActiveModel
|
4
4
|
class Serializer
|
5
5
|
class OptionsTest < ActiveSupport::TestCase
|
6
|
-
|
7
|
-
|
6
|
+
class ModelWithOptions < ActiveModelSerializers::Model
|
7
|
+
attributes :name, :description
|
8
|
+
end
|
9
|
+
class ModelWithOptionsSerializer < ActiveModel::Serializer
|
10
|
+
attributes :name, :description
|
11
|
+
|
12
|
+
def arguments_passed_in?
|
13
|
+
instance_options[:my_options] == :accessible
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
setup do
|
18
|
+
@model_with_options = ModelWithOptions.new(name: 'Name 1', description: 'Description 1')
|
8
19
|
end
|
9
20
|
|
10
21
|
def test_options_are_accessible
|
11
|
-
|
12
|
-
assert
|
22
|
+
model_with_options_serializer = ModelWithOptionsSerializer.new(@model_with_options, my_options: :accessible)
|
23
|
+
assert model_with_options_serializer.arguments_passed_in?
|
13
24
|
end
|
14
25
|
|
15
26
|
def test_no_option_is_passed_in
|
16
|
-
|
17
|
-
refute
|
27
|
+
model_with_options_serializer = ModelWithOptionsSerializer.new(@model_with_options)
|
28
|
+
refute model_with_options_serializer.arguments_passed_in?
|
18
29
|
end
|
19
30
|
end
|
20
31
|
end
|
@@ -5,10 +5,10 @@ module ActiveModel
|
|
5
5
|
class ReadAttributeForSerializationTest < ActiveSupport::TestCase
|
6
6
|
# https://github.com/rails-api/active_model_serializers/issues/1653
|
7
7
|
class Parent < ActiveModelSerializers::Model
|
8
|
-
|
8
|
+
attributes :id
|
9
9
|
end
|
10
10
|
class Child < Parent
|
11
|
-
|
11
|
+
attributes :name
|
12
12
|
end
|
13
13
|
class ParentSerializer < ActiveModel::Serializer
|
14
14
|
attributes :$id
|
@@ -30,7 +30,7 @@ module ActiveModel
|
|
30
30
|
|
31
31
|
# https://github.com/rails-api/active_model_serializers/issues/1658
|
32
32
|
class ErrorResponse < ActiveModelSerializers::Model
|
33
|
-
|
33
|
+
attributes :error
|
34
34
|
end
|
35
35
|
class ApplicationSerializer < ActiveModel::Serializer
|
36
36
|
attributes :status
|
@@ -2,10 +2,10 @@ module ActiveModel
|
|
2
2
|
class Serializer
|
3
3
|
class SerializationTest < ActiveSupport::TestCase
|
4
4
|
class Blog < ActiveModelSerializers::Model
|
5
|
-
|
5
|
+
attributes :id, :name, :authors
|
6
6
|
end
|
7
7
|
class Author < ActiveModelSerializers::Model
|
8
|
-
|
8
|
+
attributes :id, :name
|
9
9
|
end
|
10
10
|
class BlogSerializer < ActiveModel::Serializer
|
11
11
|
attributes :id
|
@@ -59,7 +59,7 @@ module ActiveModel
|
|
59
59
|
|
60
60
|
def test_serializer_for_non_ams_serializer
|
61
61
|
serializer = ActiveModel::Serializer.serializer_for(@tweet)
|
62
|
-
|
62
|
+
assert_nil serializer
|
63
63
|
end
|
64
64
|
|
65
65
|
def test_serializer_for_existing_serializer
|
@@ -71,12 +71,12 @@ module ActiveModel
|
|
71
71
|
serializer = with_serializer_lookup_disabled do
|
72
72
|
ActiveModel::Serializer.serializer_for(@profile)
|
73
73
|
end
|
74
|
-
|
74
|
+
assert_nil serializer
|
75
75
|
end
|
76
76
|
|
77
77
|
def test_serializer_for_not_existing_serializer
|
78
78
|
serializer = ActiveModel::Serializer.serializer_for(@model)
|
79
|
-
|
79
|
+
assert_nil serializer
|
80
80
|
end
|
81
81
|
|
82
82
|
def test_serializer_inherited_serializer
|
@@ -88,7 +88,7 @@ module ActiveModel
|
|
88
88
|
serializer = with_serializer_lookup_disabled do
|
89
89
|
ActiveModel::Serializer.serializer_for(@my_profile)
|
90
90
|
end
|
91
|
-
|
91
|
+
assert_nil serializer
|
92
92
|
end
|
93
93
|
|
94
94
|
def test_serializer_custom_serializer
|
@@ -114,7 +114,7 @@ module ActiveModel
|
|
114
114
|
serializer = with_serializer_lookup_disabled do
|
115
115
|
ActiveModel::Serializer.serializer_for(post)
|
116
116
|
end
|
117
|
-
|
117
|
+
assert_nil serializer
|
118
118
|
end
|
119
119
|
|
120
120
|
def test_serializer_for_nested_resource
|
@@ -128,7 +128,7 @@ module ActiveModel
|
|
128
128
|
serializer = with_serializer_lookup_disabled do
|
129
129
|
ResourceNamespace::PostSerializer.serializer_for(comment)
|
130
130
|
end
|
131
|
-
|
131
|
+
assert_nil serializer
|
132
132
|
end
|
133
133
|
end
|
134
134
|
end
|
@@ -3,9 +3,12 @@ require 'test_helper'
|
|
3
3
|
module ActiveModel
|
4
4
|
class Serializer
|
5
5
|
class SerializerForWithNamespaceTest < ActiveSupport::TestCase
|
6
|
-
class Book < ::Model
|
7
|
-
|
8
|
-
|
6
|
+
class Book < ::Model
|
7
|
+
attributes :title, :author_name
|
8
|
+
associations :publisher, :pages
|
9
|
+
end
|
10
|
+
class Page < ::Model; attributes :number, :text end
|
11
|
+
class Publisher < ::Model; attributes :name end
|
9
12
|
|
10
13
|
module Api
|
11
14
|
module V3
|
@@ -18,8 +21,6 @@ module ActiveModel
|
|
18
21
|
|
19
22
|
class PageSerializer < ActiveModel::Serializer
|
20
23
|
attributes :number, :text
|
21
|
-
|
22
|
-
belongs_to :book
|
23
24
|
end
|
24
25
|
|
25
26
|
class PublisherSerializer < ActiveModel::Serializer
|
data/test/support/rails_app.rb
CHANGED
@@ -6,6 +6,8 @@ module ActiveModelSerializers
|
|
6
6
|
config.active_support.test_order = :random
|
7
7
|
config.action_controller.perform_caching = true
|
8
8
|
config.action_controller.cache_store = :memory_store
|
9
|
+
|
10
|
+
config.filter_parameters += [:password]
|
9
11
|
end
|
10
12
|
|
11
13
|
app.routes.default_url_options = { host: 'example.com' }
|
data/test/test_helper.rb
CHANGED
@@ -40,6 +40,18 @@ require 'minitest'
|
|
40
40
|
require 'minitest/autorun'
|
41
41
|
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
|
42
42
|
|
43
|
+
module TestHelper
|
44
|
+
module_function
|
45
|
+
|
46
|
+
def silence_warnings
|
47
|
+
original_verbose = $VERBOSE
|
48
|
+
$VERBOSE = nil
|
49
|
+
yield
|
50
|
+
ensure
|
51
|
+
$VERBOSE = original_verbose
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
43
55
|
require 'support/rails_app'
|
44
56
|
|
45
57
|
# require "rails/test_help"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_model_serializers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Klabnik
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -71,19 +71,25 @@ dependencies:
|
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '6'
|
73
73
|
- !ruby/object:Gem::Dependency
|
74
|
-
name: jsonapi
|
74
|
+
name: jsonapi-renderer
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
|
-
- -
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 0.1.1.beta1
|
80
|
+
- - "<"
|
78
81
|
- !ruby/object:Gem::Version
|
79
|
-
version: 0.
|
82
|
+
version: '0.2'
|
80
83
|
type: :runtime
|
81
84
|
prerelease: false
|
82
85
|
version_requirements: !ruby/object:Gem::Requirement
|
83
86
|
requirements:
|
84
|
-
- -
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.1.1.beta1
|
90
|
+
- - "<"
|
85
91
|
- !ruby/object:Gem::Version
|
86
|
-
version: 0.
|
92
|
+
version: '0.2'
|
87
93
|
- !ruby/object:Gem::Dependency
|
88
94
|
name: case_transform
|
89
95
|
requirement: !ruby/object:Gem::Requirement
|