active_model_serializers_custom 0.10.90
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 +7 -0
- data/.github/ISSUE_TEMPLATE.md +29 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +15 -0
- data/.gitignore +35 -0
- data/.rubocop.yml +109 -0
- data/.simplecov +110 -0
- data/.travis.yml +63 -0
- data/CHANGELOG.md +727 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTING.md +105 -0
- data/Gemfile +74 -0
- data/MIT-LICENSE +22 -0
- data/README.md +305 -0
- data/Rakefile +76 -0
- data/active_model_serializers.gemspec +64 -0
- data/appveyor.yml +28 -0
- data/bin/bench +171 -0
- data/bin/bench_regression +316 -0
- data/bin/rubocop +38 -0
- data/bin/serve_benchmark +39 -0
- data/docs/README.md +41 -0
- data/docs/STYLE.md +58 -0
- data/docs/general/adapters.md +269 -0
- data/docs/general/caching.md +58 -0
- data/docs/general/configuration_options.md +185 -0
- data/docs/general/deserialization.md +100 -0
- data/docs/general/fields.md +31 -0
- data/docs/general/getting_started.md +133 -0
- data/docs/general/instrumentation.md +40 -0
- data/docs/general/key_transforms.md +40 -0
- data/docs/general/logging.md +21 -0
- data/docs/general/rendering.md +293 -0
- data/docs/general/serializers.md +495 -0
- data/docs/how-open-source-maintained.jpg +0 -0
- data/docs/howto/add_pagination_links.md +138 -0
- data/docs/howto/add_relationship_links.md +140 -0
- data/docs/howto/add_root_key.md +62 -0
- data/docs/howto/grape_integration.md +42 -0
- data/docs/howto/outside_controller_use.md +66 -0
- data/docs/howto/passing_arbitrary_options.md +27 -0
- data/docs/howto/serialize_poro.md +73 -0
- data/docs/howto/test.md +154 -0
- data/docs/howto/upgrade_from_0_8_to_0_10.md +265 -0
- data/docs/integrations/ember-and-json-api.md +147 -0
- data/docs/integrations/grape.md +19 -0
- data/docs/jsonapi/errors.md +56 -0
- data/docs/jsonapi/schema.md +151 -0
- data/docs/jsonapi/schema/schema.json +366 -0
- data/docs/rfcs/0000-namespace.md +106 -0
- data/docs/rfcs/template.md +15 -0
- data/lib/action_controller/serialization.rb +76 -0
- data/lib/active_model/serializable_resource.rb +13 -0
- data/lib/active_model/serializer.rb +418 -0
- data/lib/active_model/serializer/adapter.rb +26 -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/array_serializer.rb +14 -0
- data/lib/active_model/serializer/association.rb +91 -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 +90 -0
- data/lib/active_model/serializer/concerns/caching.rb +304 -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_serializers.rb +63 -0
- data/lib/active_model_serializers/adapter.rb +100 -0
- data/lib/active_model_serializers/adapter/attributes.rb +15 -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.rb +535 -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 +90 -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/null.rb +11 -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 +52 -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.rb +9 -0
- data/lib/active_model_serializers/test/schema.rb +140 -0
- data/lib/active_model_serializers/test/serializer.rb +127 -0
- 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 +55 -0
- data/test/action_controller/adapter_selector_test.rb +64 -0
- data/test/action_controller/explicit_serializer_test.rb +137 -0
- data/test/action_controller/json/include_test.rb +248 -0
- data/test/action_controller/json_api/deserialization_test.rb +114 -0
- data/test/action_controller/json_api/errors_test.rb +42 -0
- data/test/action_controller/json_api/fields_test.rb +68 -0
- data/test/action_controller/json_api/linked_test.rb +204 -0
- data/test/action_controller/json_api/pagination_test.rb +126 -0
- data/test/action_controller/json_api/transform_test.rb +191 -0
- data/test/action_controller/lookup_proc_test.rb +51 -0
- data/test/action_controller/namespace_lookup_test.rb +239 -0
- data/test/action_controller/serialization_scope_name_test.rb +237 -0
- data/test/action_controller/serialization_test.rb +480 -0
- data/test/active_model_serializers/adapter_for_test.rb +210 -0
- data/test/active_model_serializers/json_pointer_test.rb +24 -0
- data/test/active_model_serializers/logging_test.rb +79 -0
- data/test/active_model_serializers/model_test.rb +144 -0
- data/test/active_model_serializers/railtie_test_isolated.rb +70 -0
- data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +163 -0
- data/test/active_model_serializers/serialization_context_test_isolated.rb +73 -0
- data/test/active_model_serializers/test/schema_test.rb +133 -0
- data/test/active_model_serializers/test/serializer_test.rb +64 -0
- data/test/active_record_test.rb +11 -0
- data/test/adapter/attributes_test.rb +42 -0
- data/test/adapter/deprecation_test.rb +102 -0
- data/test/adapter/json/belongs_to_test.rb +47 -0
- data/test/adapter/json/collection_test.rb +106 -0
- data/test/adapter/json/has_many_test.rb +55 -0
- data/test/adapter/json/transform_test.rb +95 -0
- data/test/adapter/json_api/belongs_to_test.rb +157 -0
- data/test/adapter/json_api/collection_test.rb +98 -0
- data/test/adapter/json_api/errors_test.rb +78 -0
- data/test/adapter/json_api/fields_test.rb +98 -0
- data/test/adapter/json_api/has_many_explicit_serializer_test.rb +98 -0
- data/test/adapter/json_api/has_many_test.rb +175 -0
- data/test/adapter/json_api/has_one_test.rb +82 -0
- data/test/adapter/json_api/include_data_if_sideloaded_test.rb +215 -0
- data/test/adapter/json_api/json_api_test.rb +35 -0
- data/test/adapter/json_api/linked_test.rb +415 -0
- data/test/adapter/json_api/links_test.rb +112 -0
- data/test/adapter/json_api/pagination_links_test.rb +208 -0
- data/test/adapter/json_api/parse_test.rb +139 -0
- data/test/adapter/json_api/relationship_test.rb +399 -0
- data/test/adapter/json_api/resource_meta_test.rb +102 -0
- data/test/adapter/json_api/toplevel_jsonapi_test.rb +84 -0
- data/test/adapter/json_api/transform_test.rb +514 -0
- data/test/adapter/json_api/type_test.rb +195 -0
- data/test/adapter/json_test.rb +48 -0
- data/test/adapter/null_test.rb +24 -0
- data/test/adapter/polymorphic_test.rb +220 -0
- data/test/adapter_test.rb +69 -0
- data/test/array_serializer_test.rb +24 -0
- data/test/benchmark/app.rb +67 -0
- data/test/benchmark/benchmarking_support.rb +69 -0
- data/test/benchmark/bm_active_record.rb +83 -0
- data/test/benchmark/bm_adapter.rb +40 -0
- data/test/benchmark/bm_caching.rb +121 -0
- data/test/benchmark/bm_lookup_chain.rb +85 -0
- data/test/benchmark/bm_transform.rb +47 -0
- data/test/benchmark/config.ru +3 -0
- data/test/benchmark/controllers.rb +85 -0
- data/test/benchmark/fixtures.rb +221 -0
- data/test/cache_test.rb +717 -0
- data/test/collection_serializer_test.rb +129 -0
- data/test/fixtures/active_record.rb +115 -0
- data/test/fixtures/poro.rb +227 -0
- data/test/generators/scaffold_controller_generator_test.rb +26 -0
- data/test/generators/serializer_generator_test.rb +77 -0
- data/test/grape_test.rb +198 -0
- data/test/lint_test.rb +51 -0
- data/test/logger_test.rb +22 -0
- data/test/poro_test.rb +11 -0
- data/test/serializable_resource_test.rb +81 -0
- data/test/serializers/association_macros_test.rb +39 -0
- data/test/serializers/associations_test.rb +520 -0
- data/test/serializers/attribute_test.rb +155 -0
- data/test/serializers/attributes_test.rb +54 -0
- data/test/serializers/caching_configuration_test_isolated.rb +172 -0
- data/test/serializers/configuration_test.rb +34 -0
- data/test/serializers/fieldset_test.rb +16 -0
- data/test/serializers/meta_test.rb +204 -0
- data/test/serializers/options_test.rb +34 -0
- data/test/serializers/read_attribute_for_serialization_test.rb +81 -0
- data/test/serializers/reflection_test.rb +481 -0
- data/test/serializers/root_test.rb +23 -0
- data/test/serializers/serialization_test.rb +57 -0
- data/test/serializers/serializer_for_test.rb +138 -0
- data/test/serializers/serializer_for_with_namespace_test.rb +90 -0
- data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +6 -0
- data/test/support/isolated_unit.rb +86 -0
- data/test/support/rails5_shims.rb +55 -0
- data/test/support/rails_app.rb +40 -0
- data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +6 -0
- data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +6 -0
- data/test/support/schemas/custom/show.json +7 -0
- data/test/support/schemas/hyper_schema.json +93 -0
- data/test/support/schemas/render_using_json_api.json +43 -0
- data/test/support/schemas/simple_json_pointers.json +10 -0
- data/test/support/serialization_testing.rb +81 -0
- data/test/test_helper.rb +72 -0
- metadata +622 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
module ActiveModelSerializers
|
|
6
|
+
class AdapterForTest < ::ActiveSupport::TestCase
|
|
7
|
+
UnknownAdapterError = ::ActiveModelSerializers::Adapter::UnknownAdapterError
|
|
8
|
+
|
|
9
|
+
def test_serializer_adapter_returns_configured_adapter
|
|
10
|
+
assert_output(nil, /ActiveModelSerializers::Adapter.configured_adapter/) do
|
|
11
|
+
assert_equal ActiveModelSerializers::Adapter.configured_adapter, ActiveModel::Serializer.adapter
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_returns_default_adapter
|
|
16
|
+
with_adapter_config_setup do
|
|
17
|
+
adapter = ActiveModelSerializers::Adapter.configured_adapter
|
|
18
|
+
assert_equal ActiveModelSerializers::Adapter::Attributes, adapter
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def test_overwrite_adapter_with_symbol
|
|
23
|
+
with_adapter_config_setup do
|
|
24
|
+
ActiveModelSerializers.config.adapter = :null
|
|
25
|
+
|
|
26
|
+
adapter = ActiveModelSerializers::Adapter.configured_adapter
|
|
27
|
+
assert_equal ActiveModelSerializers::Adapter::Null, adapter
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_overwrite_adapter_with_camelcased_symbol
|
|
32
|
+
with_adapter_config_setup do
|
|
33
|
+
ActiveModelSerializers.config.adapter = :JsonApi
|
|
34
|
+
|
|
35
|
+
adapter = ActiveModelSerializers::Adapter.configured_adapter
|
|
36
|
+
assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_overwrite_adapter_with_string
|
|
41
|
+
with_adapter_config_setup do
|
|
42
|
+
ActiveModelSerializers.config.adapter = 'json_api'
|
|
43
|
+
|
|
44
|
+
adapter = ActiveModelSerializers::Adapter.configured_adapter
|
|
45
|
+
assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_overwrite_adapter_with_a_camelcased_string
|
|
50
|
+
with_adapter_config_setup do
|
|
51
|
+
ActiveModelSerializers.config.adapter = 'JsonApi'
|
|
52
|
+
|
|
53
|
+
adapter = ActiveModelSerializers::Adapter.configured_adapter
|
|
54
|
+
assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_overwrite_adapter_with_class
|
|
59
|
+
with_adapter_config_setup do
|
|
60
|
+
ActiveModelSerializers.config.adapter = ActiveModelSerializers::Adapter::Null
|
|
61
|
+
|
|
62
|
+
adapter = ActiveModelSerializers::Adapter.configured_adapter
|
|
63
|
+
assert_equal ActiveModelSerializers::Adapter::Null, adapter
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_raises_exception_if_invalid_symbol_given
|
|
68
|
+
with_adapter_config_setup do
|
|
69
|
+
ActiveModelSerializers.config.adapter = :unknown
|
|
70
|
+
|
|
71
|
+
assert_raises UnknownAdapterError do
|
|
72
|
+
ActiveModelSerializers::Adapter.configured_adapter
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_raises_exception_if_it_does_not_know_hot_to_infer_adapter
|
|
78
|
+
with_adapter_config_setup do
|
|
79
|
+
ActiveModelSerializers.config.adapter = 42
|
|
80
|
+
|
|
81
|
+
assert_raises UnknownAdapterError do
|
|
82
|
+
ActiveModelSerializers::Adapter.configured_adapter
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def test_adapter_class_for_known_adapter
|
|
88
|
+
klass = ActiveModelSerializers::Adapter.adapter_class(:json_api)
|
|
89
|
+
assert_equal ActiveModelSerializers::Adapter::JsonApi, klass
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def test_adapter_class_for_unknown_adapter
|
|
93
|
+
assert_raises UnknownAdapterError do
|
|
94
|
+
ActiveModelSerializers::Adapter.adapter_class(:json_simple)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def test_adapter_map
|
|
99
|
+
expected_adapter_map = {
|
|
100
|
+
'null'.freeze => ActiveModelSerializers::Adapter::Null,
|
|
101
|
+
'json'.freeze => ActiveModelSerializers::Adapter::Json,
|
|
102
|
+
'attributes'.freeze => ActiveModelSerializers::Adapter::Attributes,
|
|
103
|
+
'json_api'.freeze => ActiveModelSerializers::Adapter::JsonApi
|
|
104
|
+
}
|
|
105
|
+
actual = ActiveModelSerializers::Adapter.adapter_map
|
|
106
|
+
assert_equal actual, expected_adapter_map
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def test_adapters
|
|
110
|
+
assert_equal ActiveModelSerializers::Adapter.adapters.sort, [
|
|
111
|
+
'attributes'.freeze,
|
|
112
|
+
'json'.freeze,
|
|
113
|
+
'json_api'.freeze,
|
|
114
|
+
'null'.freeze
|
|
115
|
+
]
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def test_lookup_adapter_by_string_name
|
|
119
|
+
assert_equal ActiveModelSerializers::Adapter.lookup('json'.freeze), ActiveModelSerializers::Adapter::Json
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def test_lookup_adapter_by_symbol_name
|
|
123
|
+
assert_equal ActiveModelSerializers::Adapter.lookup(:json), ActiveModelSerializers::Adapter::Json
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def test_lookup_adapter_by_class
|
|
127
|
+
klass = ActiveModelSerializers::Adapter::Json
|
|
128
|
+
assert_equal ActiveModelSerializers::Adapter.lookup(klass), klass
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_lookup_adapter_from_environment_registers_adapter
|
|
132
|
+
ActiveModelSerializers::Adapter.const_set(:AdapterFromEnvironment, Class.new)
|
|
133
|
+
klass = ::ActiveModelSerializers::Adapter::AdapterFromEnvironment
|
|
134
|
+
name = 'adapter_from_environment'.freeze
|
|
135
|
+
assert_equal ActiveModelSerializers::Adapter.lookup(name), klass
|
|
136
|
+
assert ActiveModelSerializers::Adapter.adapters.include?(name)
|
|
137
|
+
ensure
|
|
138
|
+
ActiveModelSerializers::Adapter.adapter_map.delete(name)
|
|
139
|
+
ActiveModelSerializers::Adapter.send(:remove_const, :AdapterFromEnvironment)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def test_lookup_adapter_for_unknown_name
|
|
143
|
+
assert_raises UnknownAdapterError do
|
|
144
|
+
ActiveModelSerializers::Adapter.lookup(:json_simple)
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_adapter
|
|
149
|
+
assert_equal ActiveModelSerializers.config.adapter, :attributes
|
|
150
|
+
assert_equal ActiveModelSerializers::Adapter.configured_adapter, ActiveModelSerializers::Adapter::Attributes
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
def test_register_adapter
|
|
154
|
+
new_adapter_name = :foo
|
|
155
|
+
new_adapter_klass = Class.new
|
|
156
|
+
ActiveModelSerializers::Adapter.register(new_adapter_name, new_adapter_klass)
|
|
157
|
+
assert ActiveModelSerializers::Adapter.adapters.include?('foo'.freeze)
|
|
158
|
+
assert ActiveModelSerializers::Adapter.lookup(:foo), new_adapter_klass
|
|
159
|
+
ensure
|
|
160
|
+
ActiveModelSerializers::Adapter.adapter_map.delete(new_adapter_name.to_s)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def test_inherited_adapter_hooks_register_adapter
|
|
164
|
+
Object.const_set(:MyAdapter, Class.new)
|
|
165
|
+
my_adapter = MyAdapter
|
|
166
|
+
ActiveModelSerializers::Adapter::Base.inherited(my_adapter)
|
|
167
|
+
assert_equal ActiveModelSerializers::Adapter.lookup(:my_adapter), my_adapter
|
|
168
|
+
ensure
|
|
169
|
+
ActiveModelSerializers::Adapter.adapter_map.delete('my_adapter'.freeze)
|
|
170
|
+
Object.send(:remove_const, :MyAdapter)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def test_inherited_adapter_hooks_register_namespaced_adapter
|
|
174
|
+
Object.const_set(:MyNamespace, Module.new)
|
|
175
|
+
MyNamespace.const_set(:MyAdapter, Class.new)
|
|
176
|
+
my_adapter = MyNamespace::MyAdapter
|
|
177
|
+
ActiveModelSerializers::Adapter::Base.inherited(my_adapter)
|
|
178
|
+
assert_equal ActiveModelSerializers::Adapter.lookup(:'my_namespace/my_adapter'), my_adapter
|
|
179
|
+
ensure
|
|
180
|
+
ActiveModelSerializers::Adapter.adapter_map.delete('my_namespace/my_adapter'.freeze)
|
|
181
|
+
MyNamespace.send(:remove_const, :MyAdapter)
|
|
182
|
+
Object.send(:remove_const, :MyNamespace)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def test_inherited_adapter_hooks_register_subclass_of_registered_adapter
|
|
186
|
+
Object.const_set(:MyAdapter, Class.new)
|
|
187
|
+
my_adapter = MyAdapter
|
|
188
|
+
Object.const_set(:MySubclassedAdapter, Class.new(MyAdapter))
|
|
189
|
+
my_subclassed_adapter = MySubclassedAdapter
|
|
190
|
+
ActiveModelSerializers::Adapter::Base.inherited(my_adapter)
|
|
191
|
+
ActiveModelSerializers::Adapter::Base.inherited(my_subclassed_adapter)
|
|
192
|
+
assert_equal ActiveModelSerializers::Adapter.lookup(:my_adapter), my_adapter
|
|
193
|
+
assert_equal ActiveModelSerializers::Adapter.lookup(:my_subclassed_adapter), my_subclassed_adapter
|
|
194
|
+
ensure
|
|
195
|
+
ActiveModelSerializers::Adapter.adapter_map.delete('my_adapter'.freeze)
|
|
196
|
+
ActiveModelSerializers::Adapter.adapter_map.delete('my_subclassed_adapter'.freeze)
|
|
197
|
+
Object.send(:remove_const, :MyAdapter)
|
|
198
|
+
Object.send(:remove_const, :MySubclassedAdapter)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
private
|
|
202
|
+
|
|
203
|
+
def with_adapter_config_setup
|
|
204
|
+
previous_adapter = ActiveModelSerializers.config.adapter
|
|
205
|
+
yield
|
|
206
|
+
ensure
|
|
207
|
+
ActiveModelSerializers.config.adapter = previous_adapter
|
|
208
|
+
end
|
|
209
|
+
end
|
|
210
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
module ActiveModelSerializers
|
|
6
|
+
class JsonPointerTest < ActiveSupport::TestCase
|
|
7
|
+
def test_attribute_pointer
|
|
8
|
+
attribute_name = 'title'
|
|
9
|
+
pointer = ActiveModelSerializers::JsonPointer.new(:attribute, attribute_name)
|
|
10
|
+
assert_equal '/data/attributes/title', pointer
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_primary_data_pointer
|
|
14
|
+
pointer = ActiveModelSerializers::JsonPointer.new(:primary_data)
|
|
15
|
+
assert_equal '/data', pointer
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def test_unknown_data_pointer
|
|
19
|
+
assert_raises(TypeError) do
|
|
20
|
+
ActiveModelSerializers::JsonPointer.new(:unknown)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
module ActiveModel
|
|
6
|
+
class Serializer
|
|
7
|
+
class LoggingTest < ActiveSupport::TestCase
|
|
8
|
+
class TestLogger < ActiveSupport::Logger
|
|
9
|
+
def initialize
|
|
10
|
+
@file = StringIO.new
|
|
11
|
+
super(@file)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def messages
|
|
15
|
+
@file.rewind
|
|
16
|
+
@file.read
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def setup
|
|
21
|
+
@author = Author.new(name: 'Steve K.')
|
|
22
|
+
@post = Post.new(title: 'New Post', body: 'Body')
|
|
23
|
+
@comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
|
|
24
|
+
@post.comments = [@comment]
|
|
25
|
+
@comment.post = @post
|
|
26
|
+
@post.author = @author
|
|
27
|
+
@author.posts = [@post]
|
|
28
|
+
@post_serializer = PostSerializer.new(@post, custom_options: true)
|
|
29
|
+
|
|
30
|
+
@old_logger = ActiveModelSerializers.logger
|
|
31
|
+
@logger = ActiveSupport::TaggedLogging.new(TestLogger.new)
|
|
32
|
+
logger @logger
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def teardown
|
|
36
|
+
logger @old_logger
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def logger(logger)
|
|
40
|
+
ActiveModelSerializers.logger = logger
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def test_uses_ams_as_tag
|
|
44
|
+
ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
|
|
45
|
+
assert_match(/\[active_model_serializers\]/, @logger.messages)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def test_logs_when_call_serializable_hash
|
|
49
|
+
ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
|
|
50
|
+
assert_match(/Rendered/, @logger.messages)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_logs_when_call_as_json
|
|
54
|
+
ActiveModelSerializers::SerializableResource.new(@post).as_json
|
|
55
|
+
assert_match(/Rendered/, @logger.messages)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_logs_when_call_to_json
|
|
59
|
+
ActiveModelSerializers::SerializableResource.new(@post).to_json
|
|
60
|
+
assert_match(/Rendered/, @logger.messages)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_logs_correct_serializer
|
|
64
|
+
ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
|
|
65
|
+
assert_match(/PostSerializer/, @logger.messages)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def test_logs_correct_adapter
|
|
69
|
+
ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
|
|
70
|
+
assert_match(/ActiveModelSerializers::Adapter::Attributes/, @logger.messages)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def test_logs_the_duration
|
|
74
|
+
ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
|
|
75
|
+
assert_match(/\(\d+\.\d+ms\)/, @logger.messages)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'test_helper'
|
|
4
|
+
|
|
5
|
+
module ActiveModelSerializers
|
|
6
|
+
class ModelTest < ActiveSupport::TestCase
|
|
7
|
+
include ActiveModel::Serializer::Lint::Tests
|
|
8
|
+
|
|
9
|
+
setup do
|
|
10
|
+
@resource = ActiveModelSerializers::Model.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_initialization_with_string_keys
|
|
14
|
+
klass = Class.new(ActiveModelSerializers::Model) do
|
|
15
|
+
attributes :key
|
|
16
|
+
end
|
|
17
|
+
value = 'value'
|
|
18
|
+
|
|
19
|
+
model_instance = klass.new('key' => value)
|
|
20
|
+
|
|
21
|
+
assert_equal model_instance.read_attribute_for_serialization(:key), value
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_attributes_can_be_read_for_serialization
|
|
25
|
+
klass = Class.new(ActiveModelSerializers::Model) do
|
|
26
|
+
attributes :one, :two, :three
|
|
27
|
+
end
|
|
28
|
+
original_attributes = { one: 1, two: 2, three: 3 }
|
|
29
|
+
original_instance = klass.new(original_attributes)
|
|
30
|
+
|
|
31
|
+
# Initial value
|
|
32
|
+
instance = original_instance
|
|
33
|
+
expected_attributes = { one: 1, two: 2, three: 3 }.with_indifferent_access
|
|
34
|
+
assert_equal expected_attributes, instance.attributes
|
|
35
|
+
assert_equal 1, instance.one
|
|
36
|
+
assert_equal 1, instance.read_attribute_for_serialization(:one)
|
|
37
|
+
|
|
38
|
+
# FIXME: Change via accessor has no effect on attributes.
|
|
39
|
+
instance = original_instance.dup
|
|
40
|
+
instance.one = :not_one
|
|
41
|
+
assert_equal expected_attributes, instance.attributes
|
|
42
|
+
assert_equal :not_one, instance.one
|
|
43
|
+
assert_equal :not_one, instance.read_attribute_for_serialization(:one)
|
|
44
|
+
|
|
45
|
+
# FIXME: Change via mutating attributes
|
|
46
|
+
instance = original_instance.dup
|
|
47
|
+
instance.attributes[:one] = :not_one
|
|
48
|
+
expected_attributes = { one: :not_one, two: 2, three: 3 }.with_indifferent_access
|
|
49
|
+
assert_equal expected_attributes, instance.attributes
|
|
50
|
+
assert_equal 1, instance.one
|
|
51
|
+
assert_equal 1, instance.read_attribute_for_serialization(:one)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_attributes_can_be_read_for_serialization_with_attributes_accessors_fix
|
|
55
|
+
klass = Class.new(ActiveModelSerializers::Model) do
|
|
56
|
+
derive_attributes_from_names_and_fix_accessors
|
|
57
|
+
attributes :one, :two, :three
|
|
58
|
+
end
|
|
59
|
+
original_attributes = { one: 1, two: 2, three: 3 }
|
|
60
|
+
original_instance = klass.new(original_attributes)
|
|
61
|
+
|
|
62
|
+
# Initial value
|
|
63
|
+
instance = original_instance
|
|
64
|
+
expected_attributes = { one: 1, two: 2, three: 3 }.with_indifferent_access
|
|
65
|
+
assert_equal expected_attributes, instance.attributes
|
|
66
|
+
assert_equal 1, instance.one
|
|
67
|
+
assert_equal 1, instance.read_attribute_for_serialization(:one)
|
|
68
|
+
|
|
69
|
+
expected_attributes = { one: :not_one, two: 2, three: 3 }.with_indifferent_access
|
|
70
|
+
# Change via accessor
|
|
71
|
+
instance = original_instance.dup
|
|
72
|
+
instance.one = :not_one
|
|
73
|
+
assert_equal expected_attributes, instance.attributes
|
|
74
|
+
assert_equal :not_one, instance.one
|
|
75
|
+
assert_equal :not_one, instance.read_attribute_for_serialization(:one)
|
|
76
|
+
|
|
77
|
+
# Attributes frozen
|
|
78
|
+
assert instance.attributes.frozen?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_id_attribute_can_be_read_for_serialization
|
|
82
|
+
klass = Class.new(ActiveModelSerializers::Model) do
|
|
83
|
+
attributes :id, :one, :two, :three
|
|
84
|
+
end
|
|
85
|
+
self.class.const_set(:SomeTestModel, klass)
|
|
86
|
+
original_attributes = { id: :ego, one: 1, two: 2, three: 3 }
|
|
87
|
+
original_instance = klass.new(original_attributes)
|
|
88
|
+
|
|
89
|
+
# Initial value
|
|
90
|
+
instance = original_instance.dup
|
|
91
|
+
expected_attributes = { id: :ego, one: 1, two: 2, three: 3 }.with_indifferent_access
|
|
92
|
+
assert_equal expected_attributes, instance.attributes
|
|
93
|
+
assert_equal :ego, instance.id
|
|
94
|
+
assert_equal :ego, instance.read_attribute_for_serialization(:id)
|
|
95
|
+
|
|
96
|
+
# FIXME: Change via accessor has no effect on attributes.
|
|
97
|
+
instance = original_instance.dup
|
|
98
|
+
instance.id = :superego
|
|
99
|
+
assert_equal expected_attributes, instance.attributes
|
|
100
|
+
assert_equal :superego, instance.id
|
|
101
|
+
assert_equal :superego, instance.read_attribute_for_serialization(:id)
|
|
102
|
+
|
|
103
|
+
# FIXME: Change via mutating attributes
|
|
104
|
+
instance = original_instance.dup
|
|
105
|
+
instance.attributes[:id] = :superego
|
|
106
|
+
expected_attributes = { id: :superego, one: 1, two: 2, three: 3 }.with_indifferent_access
|
|
107
|
+
assert_equal expected_attributes, instance.attributes
|
|
108
|
+
assert_equal :ego, instance.id
|
|
109
|
+
assert_equal :ego, instance.read_attribute_for_serialization(:id)
|
|
110
|
+
ensure
|
|
111
|
+
self.class.send(:remove_const, :SomeTestModel)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def test_id_attribute_can_be_read_for_serialization_with_attributes_accessors_fix
|
|
115
|
+
klass = Class.new(ActiveModelSerializers::Model) do
|
|
116
|
+
derive_attributes_from_names_and_fix_accessors
|
|
117
|
+
attributes :id, :one, :two, :three
|
|
118
|
+
end
|
|
119
|
+
self.class.const_set(:SomeTestModel, klass)
|
|
120
|
+
original_attributes = { id: :ego, one: 1, two: 2, three: 3 }
|
|
121
|
+
original_instance = klass.new(original_attributes)
|
|
122
|
+
|
|
123
|
+
# Initial value
|
|
124
|
+
instance = original_instance.dup
|
|
125
|
+
expected_attributes = { id: :ego, one: 1, two: 2, three: 3 }.with_indifferent_access
|
|
126
|
+
assert_equal expected_attributes, instance.attributes
|
|
127
|
+
assert_equal :ego, instance.id
|
|
128
|
+
assert_equal :ego, instance.read_attribute_for_serialization(:id)
|
|
129
|
+
|
|
130
|
+
expected_attributes = { id: :superego, one: 1, two: 2, three: 3 }.with_indifferent_access
|
|
131
|
+
# Change via accessor
|
|
132
|
+
instance = original_instance.dup
|
|
133
|
+
instance.id = :superego
|
|
134
|
+
assert_equal expected_attributes, instance.attributes
|
|
135
|
+
assert_equal :superego, instance.id
|
|
136
|
+
assert_equal :superego, instance.read_attribute_for_serialization(:id)
|
|
137
|
+
|
|
138
|
+
# Attributes frozen
|
|
139
|
+
assert instance.attributes.frozen?
|
|
140
|
+
ensure
|
|
141
|
+
self.class.send(:remove_const, :SomeTestModel)
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|