active_model_serializers 0.10.0 → 0.10.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CHANGELOG.md +239 -2
- data/README.md +171 -34
- data/lib/action_controller/serialization.rb +23 -3
- data/lib/active_model/serializable_resource.rb +2 -0
- data/lib/active_model/serializer/adapter/attributes.rb +2 -0
- data/lib/active_model/serializer/adapter/base.rb +4 -0
- data/lib/active_model/serializer/adapter/json.rb +2 -0
- data/lib/active_model/serializer/adapter/json_api.rb +2 -0
- data/lib/active_model/serializer/adapter/null.rb +2 -0
- data/lib/active_model/serializer/adapter.rb +2 -0
- data/lib/active_model/serializer/array_serializer.rb +10 -5
- data/lib/active_model/serializer/association.rb +64 -10
- data/lib/active_model/serializer/attribute.rb +2 -0
- data/lib/active_model/serializer/belongs_to_reflection.rb +6 -3
- data/lib/active_model/serializer/collection_serializer.rb +48 -13
- data/lib/active_model/serializer/{caching.rb → concerns/caching.rb} +89 -117
- data/lib/active_model/serializer/error_serializer.rb +13 -7
- data/lib/active_model/serializer/errors_serializer.rb +27 -20
- data/lib/active_model/serializer/field.rb +2 -0
- data/lib/active_model/serializer/fieldset.rb +3 -1
- data/lib/active_model/serializer/has_many_reflection.rb +5 -3
- data/lib/active_model/serializer/has_one_reflection.rb +3 -4
- 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 +136 -130
- data/lib/active_model/serializer/null.rb +2 -0
- data/lib/active_model/serializer/reflection.rb +130 -65
- data/lib/active_model/serializer/version.rb +3 -1
- data/lib/active_model/serializer.rb +321 -86
- data/lib/active_model_serializers/adapter/attributes.rb +17 -57
- data/lib/active_model_serializers/adapter/base.rb +41 -39
- data/lib/active_model_serializers/adapter/json.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/deserialization.rb +4 -2
- data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/link.rb +3 -1
- data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +52 -20
- data/lib/active_model_serializers/adapter/json_api/relationship.rb +77 -23
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +41 -10
- data/lib/active_model_serializers/adapter/json_api.rb +84 -65
- data/lib/active_model_serializers/adapter/null.rb +2 -0
- data/lib/active_model_serializers/adapter.rb +9 -1
- data/lib/active_model_serializers/callbacks.rb +2 -0
- data/lib/active_model_serializers/deprecate.rb +3 -2
- data/lib/active_model_serializers/deserialization.rb +4 -0
- data/lib/active_model_serializers/json_pointer.rb +2 -0
- data/lib/active_model_serializers/logging.rb +2 -0
- data/lib/active_model_serializers/lookup_chain.rb +82 -0
- data/lib/active_model_serializers/model/caching.rb +26 -0
- data/lib/active_model_serializers/model.rb +111 -28
- data/lib/active_model_serializers/railtie.rb +7 -1
- data/lib/active_model_serializers/register_jsonapi_renderer.rb +46 -31
- data/lib/active_model_serializers/serializable_resource.rb +10 -7
- data/lib/active_model_serializers/serialization_context.rb +12 -3
- data/lib/active_model_serializers/test/schema.rb +4 -2
- data/lib/active_model_serializers/test/serializer.rb +2 -0
- data/lib/active_model_serializers/test.rb +2 -0
- data/lib/active_model_serializers.rb +35 -10
- data/lib/generators/rails/resource_override.rb +3 -1
- data/lib/generators/rails/serializer_generator.rb +6 -4
- data/lib/grape/active_model_serializers.rb +9 -5
- data/lib/grape/formatters/active_model_serializers.rb +21 -2
- data/lib/grape/helpers/active_model_serializers.rb +3 -0
- data/lib/tasks/rubocop.rake +55 -0
- metadata +104 -296
- data/.github/ISSUE_TEMPLATE.md +0 -29
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
- data/.gitignore +0 -35
- data/.rubocop.yml +0 -104
- data/.rubocop_todo.yml +0 -167
- data/.simplecov +0 -110
- data/.travis.yml +0 -43
- data/CONTRIBUTING.md +0 -105
- data/Gemfile +0 -53
- data/Rakefile +0 -103
- data/active_model_serializers.gemspec +0 -66
- data/appveyor.yml +0 -24
- data/bin/bench +0 -171
- data/bin/bench_regression +0 -316
- data/bin/serve_benchmark +0 -39
- data/docs/ARCHITECTURE.md +0 -126
- data/docs/README.md +0 -40
- data/docs/STYLE.md +0 -58
- data/docs/general/adapters.md +0 -245
- data/docs/general/caching.md +0 -52
- data/docs/general/configuration_options.md +0 -100
- data/docs/general/deserialization.md +0 -100
- data/docs/general/getting_started.md +0 -133
- data/docs/general/instrumentation.md +0 -40
- data/docs/general/key_transforms.md +0 -40
- data/docs/general/logging.md +0 -14
- data/docs/general/rendering.md +0 -255
- data/docs/general/serializers.md +0 -372
- data/docs/how-open-source-maintained.jpg +0 -0
- data/docs/howto/add_pagination_links.md +0 -139
- data/docs/howto/add_root_key.md +0 -51
- data/docs/howto/outside_controller_use.md +0 -58
- data/docs/howto/passing_arbitrary_options.md +0 -27
- data/docs/howto/serialize_poro.md +0 -32
- data/docs/howto/test.md +0 -152
- data/docs/integrations/ember-and-json-api.md +0 -112
- data/docs/integrations/grape.md +0 -19
- data/docs/jsonapi/errors.md +0 -56
- data/docs/jsonapi/schema/schema.json +0 -366
- data/docs/jsonapi/schema.md +0 -151
- data/docs/rfcs/0000-namespace.md +0 -106
- data/docs/rfcs/template.md +0 -15
- data/lib/active_model/serializer/associations.rb +0 -100
- data/lib/active_model/serializer/attributes.rb +0 -82
- data/lib/active_model/serializer/collection_reflection.rb +0 -7
- data/lib/active_model/serializer/configuration.rb +0 -35
- data/lib/active_model/serializer/include_tree.rb +0 -111
- data/lib/active_model/serializer/links.rb +0 -35
- data/lib/active_model/serializer/meta.rb +0 -29
- data/lib/active_model/serializer/singular_reflection.rb +0 -7
- data/lib/active_model/serializer/type.rb +0 -25
- data/lib/active_model_serializers/key_transform.rb +0 -70
- data/test/action_controller/adapter_selector_test.rb +0 -53
- data/test/action_controller/explicit_serializer_test.rb +0 -134
- data/test/action_controller/json/include_test.rb +0 -167
- data/test/action_controller/json_api/deserialization_test.rb +0 -112
- data/test/action_controller/json_api/errors_test.rb +0 -41
- data/test/action_controller/json_api/linked_test.rb +0 -197
- data/test/action_controller/json_api/pagination_test.rb +0 -116
- data/test/action_controller/json_api/transform_test.rb +0 -181
- data/test/action_controller/serialization_scope_name_test.rb +0 -229
- data/test/action_controller/serialization_test.rb +0 -469
- data/test/active_model_serializers/adapter_for_test.rb +0 -208
- data/test/active_model_serializers/json_pointer_test.rb +0 -20
- data/test/active_model_serializers/key_transform_test.rb +0 -263
- data/test/active_model_serializers/logging_test.rb +0 -77
- data/test/active_model_serializers/model_test.rb +0 -9
- data/test/active_model_serializers/railtie_test_isolated.rb +0 -63
- data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -58
- data/test/active_model_serializers/test/schema_test.rb +0 -130
- data/test/active_model_serializers/test/serializer_test.rb +0 -62
- data/test/active_record_test.rb +0 -9
- data/test/adapter/deprecation_test.rb +0 -100
- data/test/adapter/json/belongs_to_test.rb +0 -45
- data/test/adapter/json/collection_test.rb +0 -90
- data/test/adapter/json/has_many_test.rb +0 -45
- data/test/adapter/json/transform_test.rb +0 -93
- data/test/adapter/json_api/belongs_to_test.rb +0 -155
- data/test/adapter/json_api/collection_test.rb +0 -95
- data/test/adapter/json_api/errors_test.rb +0 -78
- data/test/adapter/json_api/fields_test.rb +0 -87
- data/test/adapter/json_api/has_many_embed_ids_test.rb +0 -43
- data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -96
- data/test/adapter/json_api/has_many_test.rb +0 -144
- data/test/adapter/json_api/has_one_test.rb +0 -80
- data/test/adapter/json_api/json_api_test.rb +0 -35
- data/test/adapter/json_api/linked_test.rb +0 -392
- data/test/adapter/json_api/links_test.rb +0 -93
- data/test/adapter/json_api/pagination_links_test.rb +0 -166
- data/test/adapter/json_api/parse_test.rb +0 -137
- data/test/adapter/json_api/relationship_test.rb +0 -161
- data/test/adapter/json_api/relationships_test.rb +0 -199
- data/test/adapter/json_api/resource_identifier_test.rb +0 -85
- data/test/adapter/json_api/resource_meta_test.rb +0 -100
- data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -82
- data/test/adapter/json_api/transform_test.rb +0 -502
- data/test/adapter/json_api/type_test.rb +0 -61
- data/test/adapter/json_test.rb +0 -45
- data/test/adapter/null_test.rb +0 -23
- data/test/adapter/polymorphic_test.rb +0 -171
- data/test/adapter_test.rb +0 -67
- data/test/array_serializer_test.rb +0 -22
- data/test/benchmark/app.rb +0 -65
- data/test/benchmark/benchmarking_support.rb +0 -67
- data/test/benchmark/bm_caching.rb +0 -119
- data/test/benchmark/bm_transform.rb +0 -34
- data/test/benchmark/config.ru +0 -3
- data/test/benchmark/controllers.rb +0 -84
- data/test/benchmark/fixtures.rb +0 -219
- data/test/cache_test.rb +0 -485
- data/test/collection_serializer_test.rb +0 -110
- data/test/fixtures/active_record.rb +0 -78
- data/test/fixtures/poro.rb +0 -282
- data/test/generators/scaffold_controller_generator_test.rb +0 -24
- data/test/generators/serializer_generator_test.rb +0 -57
- data/test/grape_test.rb +0 -82
- data/test/include_tree/from_include_args_test.rb +0 -26
- data/test/include_tree/from_string_test.rb +0 -94
- data/test/include_tree/include_args_to_hash_test.rb +0 -64
- data/test/lint_test.rb +0 -49
- data/test/logger_test.rb +0 -18
- data/test/poro_test.rb +0 -9
- data/test/serializable_resource_test.rb +0 -83
- data/test/serializers/association_macros_test.rb +0 -36
- data/test/serializers/associations_test.rb +0 -295
- data/test/serializers/attribute_test.rb +0 -151
- data/test/serializers/attributes_test.rb +0 -52
- data/test/serializers/caching_configuration_test_isolated.rb +0 -170
- data/test/serializers/configuration_test.rb +0 -32
- data/test/serializers/fieldset_test.rb +0 -14
- data/test/serializers/meta_test.rb +0 -196
- data/test/serializers/options_test.rb +0 -21
- data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
- data/test/serializers/root_test.rb +0 -21
- data/test/serializers/serialization_test.rb +0 -55
- data/test/serializers/serializer_for_test.rb +0 -134
- data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
- data/test/support/isolated_unit.rb +0 -79
- data/test/support/rails5_shims.rb +0 -47
- data/test/support/rails_app.rb +0 -45
- data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
- data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
- data/test/support/schemas/custom/show.json +0 -7
- data/test/support/schemas/hyper_schema.json +0 -93
- data/test/support/schemas/render_using_json_api.json +0 -43
- data/test/support/schemas/simple_json_pointers.json +0 -10
- data/test/support/serialization_testing.rb +0 -53
- data/test/test_helper.rb +0 -57
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
module ActiveModel
|
|
4
|
-
class Serializer
|
|
5
|
-
class IncludeTree
|
|
6
|
-
class FromStringTest < ActiveSupport::TestCase
|
|
7
|
-
def test_single_string
|
|
8
|
-
input = 'author'
|
|
9
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
10
|
-
assert(actual.key?(:author))
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_multiple_strings
|
|
14
|
-
input = 'author,comments'
|
|
15
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
16
|
-
assert(actual.key?(:author))
|
|
17
|
-
assert(actual.key?(:comments))
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def test_multiple_strings_with_space
|
|
21
|
-
input = 'author, comments'
|
|
22
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
23
|
-
assert(actual.key?(:author))
|
|
24
|
-
assert(actual.key?(:comments))
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def test_nested_string
|
|
28
|
-
input = 'posts.author'
|
|
29
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
30
|
-
assert(actual.key?(:posts))
|
|
31
|
-
assert(actual[:posts].key?(:author))
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def test_multiple_nested_string
|
|
35
|
-
input = 'posts.author,posts.comments.author,comments'
|
|
36
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
37
|
-
assert(actual.key?(:posts))
|
|
38
|
-
assert(actual[:posts].key?(:author))
|
|
39
|
-
assert(actual[:posts].key?(:comments))
|
|
40
|
-
assert(actual[:posts][:comments].key?(:author))
|
|
41
|
-
assert(actual.key?(:comments))
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def test_toplevel_star_string
|
|
45
|
-
input = '*'
|
|
46
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
47
|
-
assert(actual.key?(:comments))
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def test_nested_star_string
|
|
51
|
-
input = 'posts.*'
|
|
52
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
53
|
-
assert(actual.key?(:posts))
|
|
54
|
-
assert(actual[:posts].key?(:comments))
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def test_nested_star_middle_string
|
|
58
|
-
input = 'posts.*.author'
|
|
59
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
60
|
-
assert(actual.key?(:posts))
|
|
61
|
-
assert(actual[:posts].key?(:comments))
|
|
62
|
-
assert(actual[:posts][:comments].key?(:author))
|
|
63
|
-
refute(actual[:posts][:comments].key?(:unspecified))
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def test_nested_star_lower_precedence_string
|
|
67
|
-
input = 'posts.comments.author,posts.*'
|
|
68
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
69
|
-
assert(actual.key?(:posts))
|
|
70
|
-
assert(actual[:posts].key?(:comments))
|
|
71
|
-
assert(actual[:posts][:comments].key?(:author))
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
def test_toplevel_double_star_string
|
|
75
|
-
input = '**'
|
|
76
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
77
|
-
assert(actual.key?(:posts))
|
|
78
|
-
assert(actual[:posts].key?(:comments))
|
|
79
|
-
assert(actual[:posts][:comments].key?(:posts))
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
def test_nested_double_star_string
|
|
83
|
-
input = 'comments, posts.**'
|
|
84
|
-
actual = ActiveModel::Serializer::IncludeTree.from_string(input)
|
|
85
|
-
assert(actual.key?(:comments))
|
|
86
|
-
refute(actual[:comments].key?(:author))
|
|
87
|
-
assert(actual.key?(:posts))
|
|
88
|
-
assert(actual[:posts].key?(:comments))
|
|
89
|
-
assert(actual[:posts][:comments].key?(:posts))
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
module ActiveModel
|
|
4
|
-
class Serializer
|
|
5
|
-
class IncludeTree
|
|
6
|
-
module Parsing
|
|
7
|
-
class IncludeArgsToHashTest < MiniTest::Test
|
|
8
|
-
def test_include_args_to_hash_from_symbol
|
|
9
|
-
expected = { author: {} }
|
|
10
|
-
input = :author
|
|
11
|
-
actual = Parsing.include_args_to_hash(input)
|
|
12
|
-
|
|
13
|
-
assert_equal(expected, actual)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def test_include_args_to_hash_from_array
|
|
17
|
-
expected = { author: {}, comments: {} }
|
|
18
|
-
input = [:author, :comments]
|
|
19
|
-
actual = Parsing.include_args_to_hash(input)
|
|
20
|
-
|
|
21
|
-
assert_equal(expected, actual)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def test_include_args_to_hash_from_nested_array
|
|
25
|
-
expected = { author: {}, comments: { author: {} } }
|
|
26
|
-
input = [:author, comments: [:author]]
|
|
27
|
-
actual = Parsing.include_args_to_hash(input)
|
|
28
|
-
|
|
29
|
-
assert_equal(expected, actual)
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def test_include_args_to_hash_from_array_of_hashes
|
|
33
|
-
expected = {
|
|
34
|
-
author: {},
|
|
35
|
-
blogs: { posts: { contributors: {} } },
|
|
36
|
-
comments: { author: { blogs: { posts: {} } } }
|
|
37
|
-
}
|
|
38
|
-
input = [
|
|
39
|
-
:author,
|
|
40
|
-
blogs: [posts: :contributors],
|
|
41
|
-
comments: { author: { blogs: :posts } }
|
|
42
|
-
]
|
|
43
|
-
actual = Parsing.include_args_to_hash(input)
|
|
44
|
-
|
|
45
|
-
assert_equal(expected, actual)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def test_array_of_string
|
|
49
|
-
expected = {
|
|
50
|
-
comments: { author: {}, attachment: {} }
|
|
51
|
-
}
|
|
52
|
-
input = [
|
|
53
|
-
'comments.author',
|
|
54
|
-
'comments.attachment'
|
|
55
|
-
]
|
|
56
|
-
actual = Parsing.include_args_to_hash(input)
|
|
57
|
-
|
|
58
|
-
assert_equal(expected, actual)
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
data/test/lint_test.rb
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
module ActiveModel
|
|
4
|
-
class Serializer
|
|
5
|
-
class LintTest < ActiveSupport::TestCase
|
|
6
|
-
include ActiveModel::Serializer::Lint::Tests
|
|
7
|
-
|
|
8
|
-
class CompliantResource
|
|
9
|
-
def serializable_hash(options = nil)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def read_attribute_for_serialization(name)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def as_json(options = nil)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def to_json(options = nil)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def cache_key
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def id
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def updated_at
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def errors
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def self.human_attribute_name(attr, options = {})
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def self.lookup_ancestors
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def self.model_name
|
|
40
|
-
@_model_name ||= ActiveModel::Name.new(self)
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def setup
|
|
45
|
-
@resource = CompliantResource.new
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
data/test/logger_test.rb
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
class ActiveModelSerializers::LoggerTest < ActiveSupport::TestCase
|
|
4
|
-
def test_logger_is_set_to_action_controller_logger_when_initializer_runs
|
|
5
|
-
assert_equal $action_controller_logger, ActionController::Base.logger # rubocop:disable Style/GlobalVars
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
def test_logger_can_be_set
|
|
9
|
-
original_logger = ActiveModelSerializers.logger
|
|
10
|
-
logger = Logger.new(STDOUT)
|
|
11
|
-
|
|
12
|
-
ActiveModelSerializers.logger = logger
|
|
13
|
-
|
|
14
|
-
assert_equal ActiveModelSerializers.logger, logger
|
|
15
|
-
ensure
|
|
16
|
-
ActiveModelSerializers.logger = original_logger
|
|
17
|
-
end
|
|
18
|
-
end
|
data/test/poro_test.rb
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
module ActiveModelSerializers
|
|
4
|
-
class SerializableResourceTest < ActiveSupport::TestCase
|
|
5
|
-
def setup
|
|
6
|
-
@resource = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
|
|
7
|
-
@serializer = ProfileSerializer.new(@resource)
|
|
8
|
-
@adapter = ActiveModelSerializers::Adapter.create(@serializer)
|
|
9
|
-
@serializable_resource = SerializableResource.new(@resource)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def test_deprecation
|
|
13
|
-
assert_output(nil, /deprecated/) do
|
|
14
|
-
deprecated_serializable_resource = ActiveModel::SerializableResource.new(@resource)
|
|
15
|
-
assert_equal(@serializable_resource.as_json, deprecated_serializable_resource.as_json)
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def test_serializable_resource_delegates_serializable_hash_to_the_adapter
|
|
20
|
-
options = nil
|
|
21
|
-
assert_equal @adapter.serializable_hash(options), @serializable_resource.serializable_hash(options)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def test_serializable_resource_delegates_to_json_to_the_adapter
|
|
25
|
-
options = nil
|
|
26
|
-
assert_equal @adapter.to_json(options), @serializable_resource.to_json(options)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def test_serializable_resource_delegates_as_json_to_the_adapter
|
|
30
|
-
options = nil
|
|
31
|
-
assert_equal @adapter.as_json(options), @serializable_resource.as_json(options)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def test_use_adapter_with_adapter_option
|
|
35
|
-
assert SerializableResource.new(@resource, { adapter: 'json' }).use_adapter?
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def test_use_adapter_with_adapter_option_as_false
|
|
39
|
-
refute SerializableResource.new(@resource, { adapter: false }).use_adapter?
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
class SerializableResourceErrorsTest < Minitest::Test
|
|
43
|
-
def test_serializable_resource_with_errors
|
|
44
|
-
options = nil
|
|
45
|
-
resource = ModelWithErrors.new
|
|
46
|
-
resource.errors.add(:name, 'must be awesome')
|
|
47
|
-
serializable_resource = ActiveModelSerializers::SerializableResource.new(
|
|
48
|
-
resource, {
|
|
49
|
-
serializer: ActiveModel::Serializer::ErrorSerializer,
|
|
50
|
-
adapter: :json_api
|
|
51
|
-
})
|
|
52
|
-
expected_response_document =
|
|
53
|
-
{ :errors =>
|
|
54
|
-
[
|
|
55
|
-
{ :source => { :pointer => '/data/attributes/name' }, :detail => 'must be awesome' }
|
|
56
|
-
]
|
|
57
|
-
}
|
|
58
|
-
assert_equal serializable_resource.as_json(options), expected_response_document
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def test_serializable_resource_with_collection_containing_errors
|
|
62
|
-
options = nil
|
|
63
|
-
resources = []
|
|
64
|
-
resources << resource = ModelWithErrors.new
|
|
65
|
-
resource.errors.add(:title, 'must be amazing')
|
|
66
|
-
resources << ModelWithErrors.new
|
|
67
|
-
serializable_resource = SerializableResource.new(
|
|
68
|
-
resources, {
|
|
69
|
-
serializer: ActiveModel::Serializer::ErrorsSerializer,
|
|
70
|
-
each_serializer: ActiveModel::Serializer::ErrorSerializer,
|
|
71
|
-
adapter: :json_api
|
|
72
|
-
})
|
|
73
|
-
expected_response_document =
|
|
74
|
-
{ :errors =>
|
|
75
|
-
[
|
|
76
|
-
{ :source => { :pointer => '/data/attributes/title' }, :detail => 'must be amazing' }
|
|
77
|
-
]
|
|
78
|
-
}
|
|
79
|
-
assert_equal serializable_resource.as_json(options), expected_response_document
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
module ActiveModel
|
|
4
|
-
class Serializer
|
|
5
|
-
class AssociationMacrosTest < ActiveSupport::TestCase
|
|
6
|
-
AuthorSummarySerializer = Class.new
|
|
7
|
-
class AssociationsTestSerializer < Serializer
|
|
8
|
-
belongs_to :author, serializer: AuthorSummarySerializer
|
|
9
|
-
has_many :comments
|
|
10
|
-
has_one :category
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def before_setup
|
|
14
|
-
@reflections = AssociationsTestSerializer._reflections
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def test_has_one_defines_reflection
|
|
18
|
-
has_one_reflection = HasOneReflection.new(:category, {})
|
|
19
|
-
|
|
20
|
-
assert_includes(@reflections, has_one_reflection)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def test_has_many_defines_reflection
|
|
24
|
-
has_many_reflection = HasManyReflection.new(:comments, {})
|
|
25
|
-
|
|
26
|
-
assert_includes(@reflections, has_many_reflection)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def test_belongs_to_defines_reflection
|
|
30
|
-
belongs_to_reflection = BelongsToReflection.new(:author, serializer: AuthorSummarySerializer)
|
|
31
|
-
|
|
32
|
-
assert_includes(@reflections, belongs_to_reflection)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
|
|
3
|
-
module ActiveModel
|
|
4
|
-
class Serializer
|
|
5
|
-
class AssociationsTest < ActiveSupport::TestCase
|
|
6
|
-
def setup
|
|
7
|
-
@author = Author.new(name: 'Steve K.')
|
|
8
|
-
@author.bio = nil
|
|
9
|
-
@author.roles = []
|
|
10
|
-
@blog = Blog.new({ name: 'AMS Blog' })
|
|
11
|
-
@post = Post.new({ title: 'New Post', body: 'Body' })
|
|
12
|
-
@tag = Tag.new({ name: '#hashtagged' })
|
|
13
|
-
@comment = Comment.new({ id: 1, body: 'ZOMG A COMMENT' })
|
|
14
|
-
@post.comments = [@comment]
|
|
15
|
-
@post.tags = [@tag]
|
|
16
|
-
@post.blog = @blog
|
|
17
|
-
@comment.post = @post
|
|
18
|
-
@comment.author = nil
|
|
19
|
-
@post.author = @author
|
|
20
|
-
@author.posts = [@post]
|
|
21
|
-
|
|
22
|
-
@post_serializer = PostSerializer.new(@post, { custom_options: true })
|
|
23
|
-
@author_serializer = AuthorSerializer.new(@author)
|
|
24
|
-
@comment_serializer = CommentSerializer.new(@comment)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def test_has_many_and_has_one
|
|
28
|
-
@author_serializer.associations.each do |association|
|
|
29
|
-
key = association.key
|
|
30
|
-
serializer = association.serializer
|
|
31
|
-
options = association.options
|
|
32
|
-
|
|
33
|
-
case key
|
|
34
|
-
when :posts
|
|
35
|
-
assert_equal({ include_data: true }, options)
|
|
36
|
-
assert_kind_of(ActiveModelSerializers.config.collection_serializer, serializer)
|
|
37
|
-
when :bio
|
|
38
|
-
assert_equal({ include_data: true }, options)
|
|
39
|
-
assert_nil serializer
|
|
40
|
-
when :roles
|
|
41
|
-
assert_equal({ include_data: true }, options)
|
|
42
|
-
assert_kind_of(ActiveModelSerializers.config.collection_serializer, serializer)
|
|
43
|
-
else
|
|
44
|
-
flunk "Unknown association: #{key}"
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def test_has_many_with_no_serializer
|
|
50
|
-
PostWithTagsSerializer.new(@post).associations.each do |association|
|
|
51
|
-
key = association.key
|
|
52
|
-
serializer = association.serializer
|
|
53
|
-
options = association.options
|
|
54
|
-
|
|
55
|
-
assert_equal :tags, key
|
|
56
|
-
assert_nil serializer
|
|
57
|
-
assert_equal [{ name: '#hashtagged' }].to_json, options[:virtual_value].to_json
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def test_serializer_options_are_passed_into_associations_serializers
|
|
62
|
-
association = @post_serializer
|
|
63
|
-
.associations
|
|
64
|
-
.detect { |assoc| assoc.key == :comments }
|
|
65
|
-
|
|
66
|
-
assert association.serializer.first.custom_options[:custom_options]
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def test_belongs_to
|
|
70
|
-
@comment_serializer.associations.each do |association|
|
|
71
|
-
key = association.key
|
|
72
|
-
serializer = association.serializer
|
|
73
|
-
|
|
74
|
-
case key
|
|
75
|
-
when :post
|
|
76
|
-
assert_kind_of(PostSerializer, serializer)
|
|
77
|
-
when :author
|
|
78
|
-
assert_nil serializer
|
|
79
|
-
else
|
|
80
|
-
flunk "Unknown association: #{key}"
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
assert_equal({ include_data: true }, association.options)
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
def test_belongs_to_with_custom_method
|
|
88
|
-
assert(
|
|
89
|
-
@post_serializer.associations.any? do |association|
|
|
90
|
-
association.key == :blog
|
|
91
|
-
end
|
|
92
|
-
)
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def test_associations_inheritance
|
|
96
|
-
inherited_klass = Class.new(PostSerializer)
|
|
97
|
-
|
|
98
|
-
assert_equal(PostSerializer._reflections, inherited_klass._reflections)
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def test_associations_inheritance_with_new_association
|
|
102
|
-
inherited_klass = Class.new(PostSerializer) do
|
|
103
|
-
has_many :top_comments, serializer: CommentSerializer
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
assert(
|
|
107
|
-
PostSerializer._reflections.all? do |reflection|
|
|
108
|
-
inherited_klass._reflections.include?(reflection)
|
|
109
|
-
end
|
|
110
|
-
)
|
|
111
|
-
|
|
112
|
-
assert(
|
|
113
|
-
inherited_klass._reflections.any? do |reflection|
|
|
114
|
-
reflection.name == :top_comments
|
|
115
|
-
end
|
|
116
|
-
)
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
def test_associations_custom_keys
|
|
120
|
-
serializer = PostWithCustomKeysSerializer.new(@post)
|
|
121
|
-
|
|
122
|
-
expected_association_keys = serializer.associations.map(&:key)
|
|
123
|
-
|
|
124
|
-
assert expected_association_keys.include? :reviews
|
|
125
|
-
assert expected_association_keys.include? :writer
|
|
126
|
-
assert expected_association_keys.include? :site
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
class InlineAssociationTestPostSerializer < ActiveModel::Serializer
|
|
130
|
-
has_many :comments
|
|
131
|
-
has_many :comments, key: :last_comments do
|
|
132
|
-
object.comments.last(1)
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
def test_virtual_attribute_block
|
|
137
|
-
comment1 = ::ARModels::Comment.create!(contents: 'first comment')
|
|
138
|
-
comment2 = ::ARModels::Comment.create!(contents: 'last comment')
|
|
139
|
-
post = ::ARModels::Post.create!(
|
|
140
|
-
title: 'inline association test',
|
|
141
|
-
body: 'etc',
|
|
142
|
-
comments: [comment1, comment2]
|
|
143
|
-
)
|
|
144
|
-
actual = serializable(post, adapter: :attributes, serializer: InlineAssociationTestPostSerializer).as_json
|
|
145
|
-
expected = {
|
|
146
|
-
:comments => [
|
|
147
|
-
{ :id => 1, :contents => 'first comment' },
|
|
148
|
-
{ :id => 2, :contents => 'last comment' }
|
|
149
|
-
],
|
|
150
|
-
:last_comments => [
|
|
151
|
-
{ :id => 2, :contents => 'last comment' }
|
|
152
|
-
]
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
assert_equal expected, actual
|
|
156
|
-
ensure
|
|
157
|
-
::ARModels::Post.delete_all
|
|
158
|
-
::ARModels::Comment.delete_all
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
class NamespacedResourcesTest < ActiveSupport::TestCase
|
|
162
|
-
class ResourceNamespace
|
|
163
|
-
Post = Class.new(::Model)
|
|
164
|
-
Comment = Class.new(::Model)
|
|
165
|
-
Author = Class.new(::Model)
|
|
166
|
-
Description = Class.new(::Model)
|
|
167
|
-
class PostSerializer < ActiveModel::Serializer
|
|
168
|
-
has_many :comments
|
|
169
|
-
belongs_to :author
|
|
170
|
-
has_one :description
|
|
171
|
-
end
|
|
172
|
-
CommentSerializer = Class.new(ActiveModel::Serializer)
|
|
173
|
-
AuthorSerializer = Class.new(ActiveModel::Serializer)
|
|
174
|
-
DescriptionSerializer = Class.new(ActiveModel::Serializer)
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
def setup
|
|
178
|
-
@comment = ResourceNamespace::Comment.new
|
|
179
|
-
@author = ResourceNamespace::Author.new
|
|
180
|
-
@description = ResourceNamespace::Description.new
|
|
181
|
-
@post = ResourceNamespace::Post.new(comments: [@comment],
|
|
182
|
-
author: @author,
|
|
183
|
-
description: @description)
|
|
184
|
-
@post_serializer = ResourceNamespace::PostSerializer.new(@post)
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def test_associations_namespaced_resources
|
|
188
|
-
@post_serializer.associations.each do |association|
|
|
189
|
-
case association.key
|
|
190
|
-
when :comments
|
|
191
|
-
assert_instance_of(ResourceNamespace::CommentSerializer, association.serializer.first)
|
|
192
|
-
when :author
|
|
193
|
-
assert_instance_of(ResourceNamespace::AuthorSerializer, association.serializer)
|
|
194
|
-
when :description
|
|
195
|
-
assert_instance_of(ResourceNamespace::DescriptionSerializer, association.serializer)
|
|
196
|
-
else
|
|
197
|
-
flunk "Unknown association: #{key}"
|
|
198
|
-
end
|
|
199
|
-
end
|
|
200
|
-
end
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
class NestedSerializersTest < ActiveSupport::TestCase
|
|
204
|
-
Post = Class.new(::Model)
|
|
205
|
-
Comment = Class.new(::Model)
|
|
206
|
-
Author = Class.new(::Model)
|
|
207
|
-
Description = Class.new(::Model)
|
|
208
|
-
class PostSerializer < ActiveModel::Serializer
|
|
209
|
-
has_many :comments
|
|
210
|
-
CommentSerializer = Class.new(ActiveModel::Serializer)
|
|
211
|
-
belongs_to :author
|
|
212
|
-
AuthorSerializer = Class.new(ActiveModel::Serializer)
|
|
213
|
-
has_one :description
|
|
214
|
-
DescriptionSerializer = Class.new(ActiveModel::Serializer)
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
def setup
|
|
218
|
-
@comment = Comment.new
|
|
219
|
-
@author = Author.new
|
|
220
|
-
@description = Description.new
|
|
221
|
-
@post = Post.new(comments: [@comment],
|
|
222
|
-
author: @author,
|
|
223
|
-
description: @description)
|
|
224
|
-
@post_serializer = PostSerializer.new(@post)
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
def test_associations_namespaced_resources
|
|
228
|
-
@post_serializer.associations.each do |association|
|
|
229
|
-
case association.key
|
|
230
|
-
when :comments
|
|
231
|
-
assert_instance_of(PostSerializer::CommentSerializer, association.serializer.first)
|
|
232
|
-
when :author
|
|
233
|
-
assert_instance_of(PostSerializer::AuthorSerializer, association.serializer)
|
|
234
|
-
when :description
|
|
235
|
-
assert_instance_of(PostSerializer::DescriptionSerializer, association.serializer)
|
|
236
|
-
else
|
|
237
|
-
flunk "Unknown association: #{key}"
|
|
238
|
-
end
|
|
239
|
-
end
|
|
240
|
-
end
|
|
241
|
-
|
|
242
|
-
# rubocop:disable Metrics/AbcSize
|
|
243
|
-
def test_conditional_associations
|
|
244
|
-
model = ::Model.new(true: true, false: false)
|
|
245
|
-
|
|
246
|
-
scenarios = [
|
|
247
|
-
{ options: { if: :true }, included: true },
|
|
248
|
-
{ options: { if: :false }, included: false },
|
|
249
|
-
{ options: { unless: :false }, included: true },
|
|
250
|
-
{ options: { unless: :true }, included: false },
|
|
251
|
-
{ options: { if: 'object.true' }, included: true },
|
|
252
|
-
{ options: { if: 'object.false' }, included: false },
|
|
253
|
-
{ options: { unless: 'object.false' }, included: true },
|
|
254
|
-
{ options: { unless: 'object.true' }, included: false },
|
|
255
|
-
{ options: { if: -> { object.true } }, included: true },
|
|
256
|
-
{ options: { if: -> { object.false } }, included: false },
|
|
257
|
-
{ options: { unless: -> { object.false } }, included: true },
|
|
258
|
-
{ options: { unless: -> { object.true } }, included: false },
|
|
259
|
-
{ options: { if: -> (s) { s.object.true } }, included: true },
|
|
260
|
-
{ options: { if: -> (s) { s.object.false } }, included: false },
|
|
261
|
-
{ options: { unless: -> (s) { s.object.false } }, included: true },
|
|
262
|
-
{ options: { unless: -> (s) { s.object.true } }, included: false }
|
|
263
|
-
]
|
|
264
|
-
|
|
265
|
-
scenarios.each do |s|
|
|
266
|
-
serializer = Class.new(ActiveModel::Serializer) do
|
|
267
|
-
belongs_to :association, s[:options]
|
|
268
|
-
|
|
269
|
-
def true
|
|
270
|
-
true
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
def false
|
|
274
|
-
false
|
|
275
|
-
end
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
hash = serializable(model, serializer: serializer).serializable_hash
|
|
279
|
-
assert_equal(s[:included], hash.key?(:association), "Error with #{s[:options]}")
|
|
280
|
-
end
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
def test_illegal_conditional_associations
|
|
284
|
-
exception = assert_raises(TypeError) do
|
|
285
|
-
Class.new(ActiveModel::Serializer) do
|
|
286
|
-
belongs_to :x, if: nil
|
|
287
|
-
end
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
assert_match(/:if should be a Symbol, String or Proc/, exception.message)
|
|
291
|
-
end
|
|
292
|
-
end
|
|
293
|
-
end
|
|
294
|
-
end
|
|
295
|
-
end
|