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.
Files changed (215) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +239 -2
  3. data/README.md +171 -34
  4. data/lib/action_controller/serialization.rb +23 -3
  5. data/lib/active_model/serializable_resource.rb +2 -0
  6. data/lib/active_model/serializer/adapter/attributes.rb +2 -0
  7. data/lib/active_model/serializer/adapter/base.rb +4 -0
  8. data/lib/active_model/serializer/adapter/json.rb +2 -0
  9. data/lib/active_model/serializer/adapter/json_api.rb +2 -0
  10. data/lib/active_model/serializer/adapter/null.rb +2 -0
  11. data/lib/active_model/serializer/adapter.rb +2 -0
  12. data/lib/active_model/serializer/array_serializer.rb +10 -5
  13. data/lib/active_model/serializer/association.rb +64 -10
  14. data/lib/active_model/serializer/attribute.rb +2 -0
  15. data/lib/active_model/serializer/belongs_to_reflection.rb +6 -3
  16. data/lib/active_model/serializer/collection_serializer.rb +48 -13
  17. data/lib/active_model/serializer/{caching.rb → concerns/caching.rb} +89 -117
  18. data/lib/active_model/serializer/error_serializer.rb +13 -7
  19. data/lib/active_model/serializer/errors_serializer.rb +27 -20
  20. data/lib/active_model/serializer/field.rb +2 -0
  21. data/lib/active_model/serializer/fieldset.rb +3 -1
  22. data/lib/active_model/serializer/has_many_reflection.rb +5 -3
  23. data/lib/active_model/serializer/has_one_reflection.rb +3 -4
  24. data/lib/active_model/serializer/lazy_association.rb +99 -0
  25. data/lib/active_model/serializer/link.rb +23 -0
  26. data/lib/active_model/serializer/lint.rb +136 -130
  27. data/lib/active_model/serializer/null.rb +2 -0
  28. data/lib/active_model/serializer/reflection.rb +130 -65
  29. data/lib/active_model/serializer/version.rb +3 -1
  30. data/lib/active_model/serializer.rb +321 -86
  31. data/lib/active_model_serializers/adapter/attributes.rb +17 -57
  32. data/lib/active_model_serializers/adapter/base.rb +41 -39
  33. data/lib/active_model_serializers/adapter/json.rb +2 -0
  34. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +4 -2
  35. data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
  36. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
  37. data/lib/active_model_serializers/adapter/json_api/link.rb +3 -1
  38. data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
  39. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +52 -20
  40. data/lib/active_model_serializers/adapter/json_api/relationship.rb +77 -23
  41. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +41 -10
  42. data/lib/active_model_serializers/adapter/json_api.rb +84 -65
  43. data/lib/active_model_serializers/adapter/null.rb +2 -0
  44. data/lib/active_model_serializers/adapter.rb +9 -1
  45. data/lib/active_model_serializers/callbacks.rb +2 -0
  46. data/lib/active_model_serializers/deprecate.rb +3 -2
  47. data/lib/active_model_serializers/deserialization.rb +4 -0
  48. data/lib/active_model_serializers/json_pointer.rb +2 -0
  49. data/lib/active_model_serializers/logging.rb +2 -0
  50. data/lib/active_model_serializers/lookup_chain.rb +82 -0
  51. data/lib/active_model_serializers/model/caching.rb +26 -0
  52. data/lib/active_model_serializers/model.rb +111 -28
  53. data/lib/active_model_serializers/railtie.rb +7 -1
  54. data/lib/active_model_serializers/register_jsonapi_renderer.rb +46 -31
  55. data/lib/active_model_serializers/serializable_resource.rb +10 -7
  56. data/lib/active_model_serializers/serialization_context.rb +12 -3
  57. data/lib/active_model_serializers/test/schema.rb +4 -2
  58. data/lib/active_model_serializers/test/serializer.rb +2 -0
  59. data/lib/active_model_serializers/test.rb +2 -0
  60. data/lib/active_model_serializers.rb +35 -10
  61. data/lib/generators/rails/resource_override.rb +3 -1
  62. data/lib/generators/rails/serializer_generator.rb +6 -4
  63. data/lib/grape/active_model_serializers.rb +9 -5
  64. data/lib/grape/formatters/active_model_serializers.rb +21 -2
  65. data/lib/grape/helpers/active_model_serializers.rb +3 -0
  66. data/lib/tasks/rubocop.rake +55 -0
  67. metadata +104 -296
  68. data/.github/ISSUE_TEMPLATE.md +0 -29
  69. data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
  70. data/.gitignore +0 -35
  71. data/.rubocop.yml +0 -104
  72. data/.rubocop_todo.yml +0 -167
  73. data/.simplecov +0 -110
  74. data/.travis.yml +0 -43
  75. data/CONTRIBUTING.md +0 -105
  76. data/Gemfile +0 -53
  77. data/Rakefile +0 -103
  78. data/active_model_serializers.gemspec +0 -66
  79. data/appveyor.yml +0 -24
  80. data/bin/bench +0 -171
  81. data/bin/bench_regression +0 -316
  82. data/bin/serve_benchmark +0 -39
  83. data/docs/ARCHITECTURE.md +0 -126
  84. data/docs/README.md +0 -40
  85. data/docs/STYLE.md +0 -58
  86. data/docs/general/adapters.md +0 -245
  87. data/docs/general/caching.md +0 -52
  88. data/docs/general/configuration_options.md +0 -100
  89. data/docs/general/deserialization.md +0 -100
  90. data/docs/general/getting_started.md +0 -133
  91. data/docs/general/instrumentation.md +0 -40
  92. data/docs/general/key_transforms.md +0 -40
  93. data/docs/general/logging.md +0 -14
  94. data/docs/general/rendering.md +0 -255
  95. data/docs/general/serializers.md +0 -372
  96. data/docs/how-open-source-maintained.jpg +0 -0
  97. data/docs/howto/add_pagination_links.md +0 -139
  98. data/docs/howto/add_root_key.md +0 -51
  99. data/docs/howto/outside_controller_use.md +0 -58
  100. data/docs/howto/passing_arbitrary_options.md +0 -27
  101. data/docs/howto/serialize_poro.md +0 -32
  102. data/docs/howto/test.md +0 -152
  103. data/docs/integrations/ember-and-json-api.md +0 -112
  104. data/docs/integrations/grape.md +0 -19
  105. data/docs/jsonapi/errors.md +0 -56
  106. data/docs/jsonapi/schema/schema.json +0 -366
  107. data/docs/jsonapi/schema.md +0 -151
  108. data/docs/rfcs/0000-namespace.md +0 -106
  109. data/docs/rfcs/template.md +0 -15
  110. data/lib/active_model/serializer/associations.rb +0 -100
  111. data/lib/active_model/serializer/attributes.rb +0 -82
  112. data/lib/active_model/serializer/collection_reflection.rb +0 -7
  113. data/lib/active_model/serializer/configuration.rb +0 -35
  114. data/lib/active_model/serializer/include_tree.rb +0 -111
  115. data/lib/active_model/serializer/links.rb +0 -35
  116. data/lib/active_model/serializer/meta.rb +0 -29
  117. data/lib/active_model/serializer/singular_reflection.rb +0 -7
  118. data/lib/active_model/serializer/type.rb +0 -25
  119. data/lib/active_model_serializers/key_transform.rb +0 -70
  120. data/test/action_controller/adapter_selector_test.rb +0 -53
  121. data/test/action_controller/explicit_serializer_test.rb +0 -134
  122. data/test/action_controller/json/include_test.rb +0 -167
  123. data/test/action_controller/json_api/deserialization_test.rb +0 -112
  124. data/test/action_controller/json_api/errors_test.rb +0 -41
  125. data/test/action_controller/json_api/linked_test.rb +0 -197
  126. data/test/action_controller/json_api/pagination_test.rb +0 -116
  127. data/test/action_controller/json_api/transform_test.rb +0 -181
  128. data/test/action_controller/serialization_scope_name_test.rb +0 -229
  129. data/test/action_controller/serialization_test.rb +0 -469
  130. data/test/active_model_serializers/adapter_for_test.rb +0 -208
  131. data/test/active_model_serializers/json_pointer_test.rb +0 -20
  132. data/test/active_model_serializers/key_transform_test.rb +0 -263
  133. data/test/active_model_serializers/logging_test.rb +0 -77
  134. data/test/active_model_serializers/model_test.rb +0 -9
  135. data/test/active_model_serializers/railtie_test_isolated.rb +0 -63
  136. data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -58
  137. data/test/active_model_serializers/test/schema_test.rb +0 -130
  138. data/test/active_model_serializers/test/serializer_test.rb +0 -62
  139. data/test/active_record_test.rb +0 -9
  140. data/test/adapter/deprecation_test.rb +0 -100
  141. data/test/adapter/json/belongs_to_test.rb +0 -45
  142. data/test/adapter/json/collection_test.rb +0 -90
  143. data/test/adapter/json/has_many_test.rb +0 -45
  144. data/test/adapter/json/transform_test.rb +0 -93
  145. data/test/adapter/json_api/belongs_to_test.rb +0 -155
  146. data/test/adapter/json_api/collection_test.rb +0 -95
  147. data/test/adapter/json_api/errors_test.rb +0 -78
  148. data/test/adapter/json_api/fields_test.rb +0 -87
  149. data/test/adapter/json_api/has_many_embed_ids_test.rb +0 -43
  150. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -96
  151. data/test/adapter/json_api/has_many_test.rb +0 -144
  152. data/test/adapter/json_api/has_one_test.rb +0 -80
  153. data/test/adapter/json_api/json_api_test.rb +0 -35
  154. data/test/adapter/json_api/linked_test.rb +0 -392
  155. data/test/adapter/json_api/links_test.rb +0 -93
  156. data/test/adapter/json_api/pagination_links_test.rb +0 -166
  157. data/test/adapter/json_api/parse_test.rb +0 -137
  158. data/test/adapter/json_api/relationship_test.rb +0 -161
  159. data/test/adapter/json_api/relationships_test.rb +0 -199
  160. data/test/adapter/json_api/resource_identifier_test.rb +0 -85
  161. data/test/adapter/json_api/resource_meta_test.rb +0 -100
  162. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -82
  163. data/test/adapter/json_api/transform_test.rb +0 -502
  164. data/test/adapter/json_api/type_test.rb +0 -61
  165. data/test/adapter/json_test.rb +0 -45
  166. data/test/adapter/null_test.rb +0 -23
  167. data/test/adapter/polymorphic_test.rb +0 -171
  168. data/test/adapter_test.rb +0 -67
  169. data/test/array_serializer_test.rb +0 -22
  170. data/test/benchmark/app.rb +0 -65
  171. data/test/benchmark/benchmarking_support.rb +0 -67
  172. data/test/benchmark/bm_caching.rb +0 -119
  173. data/test/benchmark/bm_transform.rb +0 -34
  174. data/test/benchmark/config.ru +0 -3
  175. data/test/benchmark/controllers.rb +0 -84
  176. data/test/benchmark/fixtures.rb +0 -219
  177. data/test/cache_test.rb +0 -485
  178. data/test/collection_serializer_test.rb +0 -110
  179. data/test/fixtures/active_record.rb +0 -78
  180. data/test/fixtures/poro.rb +0 -282
  181. data/test/generators/scaffold_controller_generator_test.rb +0 -24
  182. data/test/generators/serializer_generator_test.rb +0 -57
  183. data/test/grape_test.rb +0 -82
  184. data/test/include_tree/from_include_args_test.rb +0 -26
  185. data/test/include_tree/from_string_test.rb +0 -94
  186. data/test/include_tree/include_args_to_hash_test.rb +0 -64
  187. data/test/lint_test.rb +0 -49
  188. data/test/logger_test.rb +0 -18
  189. data/test/poro_test.rb +0 -9
  190. data/test/serializable_resource_test.rb +0 -83
  191. data/test/serializers/association_macros_test.rb +0 -36
  192. data/test/serializers/associations_test.rb +0 -295
  193. data/test/serializers/attribute_test.rb +0 -151
  194. data/test/serializers/attributes_test.rb +0 -52
  195. data/test/serializers/caching_configuration_test_isolated.rb +0 -170
  196. data/test/serializers/configuration_test.rb +0 -32
  197. data/test/serializers/fieldset_test.rb +0 -14
  198. data/test/serializers/meta_test.rb +0 -196
  199. data/test/serializers/options_test.rb +0 -21
  200. data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
  201. data/test/serializers/root_test.rb +0 -21
  202. data/test/serializers/serialization_test.rb +0 -55
  203. data/test/serializers/serializer_for_test.rb +0 -134
  204. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  205. data/test/support/isolated_unit.rb +0 -79
  206. data/test/support/rails5_shims.rb +0 -47
  207. data/test/support/rails_app.rb +0 -45
  208. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  209. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  210. data/test/support/schemas/custom/show.json +0 -7
  211. data/test/support/schemas/hyper_schema.json +0 -93
  212. data/test/support/schemas/render_using_json_api.json +0 -43
  213. data/test/support/schemas/simple_json_pointers.json +0 -10
  214. data/test/support/serialization_testing.rb +0 -53
  215. data/test/test_helper.rb +0 -57
@@ -1,208 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- class AdapterForTest < ::ActiveSupport::TestCase
5
- UnknownAdapterError = ::ActiveModelSerializers::Adapter::UnknownAdapterError
6
-
7
- def test_serializer_adapter_returns_configured_adapter
8
- assert_output(nil, /ActiveModelSerializers::Adapter.configured_adapter/) do
9
- assert_equal ActiveModelSerializers::Adapter.configured_adapter, ActiveModel::Serializer.adapter
10
- end
11
- end
12
-
13
- def test_returns_default_adapter
14
- with_adapter_config_setup do
15
- adapter = ActiveModelSerializers::Adapter.configured_adapter
16
- assert_equal ActiveModelSerializers::Adapter::Attributes, adapter
17
- end
18
- end
19
-
20
- def test_overwrite_adapter_with_symbol
21
- with_adapter_config_setup do
22
- ActiveModelSerializers.config.adapter = :null
23
-
24
- adapter = ActiveModelSerializers::Adapter.configured_adapter
25
- assert_equal ActiveModelSerializers::Adapter::Null, adapter
26
- end
27
- end
28
-
29
- def test_overwrite_adapter_with_camelcased_symbol
30
- with_adapter_config_setup do
31
- ActiveModelSerializers.config.adapter = :JsonApi
32
-
33
- adapter = ActiveModelSerializers::Adapter.configured_adapter
34
- assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter
35
- end
36
- end
37
-
38
- def test_overwrite_adapter_with_string
39
- with_adapter_config_setup do
40
- ActiveModelSerializers.config.adapter = 'json_api'
41
-
42
- adapter = ActiveModelSerializers::Adapter.configured_adapter
43
- assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter
44
- end
45
- end
46
-
47
- def test_overwrite_adapter_with_a_camelcased_string
48
- with_adapter_config_setup do
49
- ActiveModelSerializers.config.adapter = 'JsonApi'
50
-
51
- adapter = ActiveModelSerializers::Adapter.configured_adapter
52
- assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter
53
- end
54
- end
55
-
56
- def test_overwrite_adapter_with_class
57
- with_adapter_config_setup do
58
- ActiveModelSerializers.config.adapter = ActiveModelSerializers::Adapter::Null
59
-
60
- adapter = ActiveModelSerializers::Adapter.configured_adapter
61
- assert_equal ActiveModelSerializers::Adapter::Null, adapter
62
- end
63
- end
64
-
65
- def test_raises_exception_if_invalid_symbol_given
66
- with_adapter_config_setup do
67
- ActiveModelSerializers.config.adapter = :unknown
68
-
69
- assert_raises UnknownAdapterError do
70
- ActiveModelSerializers::Adapter.configured_adapter
71
- end
72
- end
73
- end
74
-
75
- def test_raises_exception_if_it_does_not_know_hot_to_infer_adapter
76
- with_adapter_config_setup do
77
- ActiveModelSerializers.config.adapter = 42
78
-
79
- assert_raises UnknownAdapterError do
80
- ActiveModelSerializers::Adapter.configured_adapter
81
- end
82
- end
83
- end
84
-
85
- def test_adapter_class_for_known_adapter
86
- klass = ActiveModelSerializers::Adapter.adapter_class(:json_api)
87
- assert_equal ActiveModelSerializers::Adapter::JsonApi, klass
88
- end
89
-
90
- def test_adapter_class_for_unknown_adapter
91
- assert_raises UnknownAdapterError do
92
- ActiveModelSerializers::Adapter.adapter_class(:json_simple)
93
- end
94
- end
95
-
96
- def test_adapter_map
97
- expected_adapter_map = {
98
- 'null'.freeze => ActiveModelSerializers::Adapter::Null,
99
- 'json'.freeze => ActiveModelSerializers::Adapter::Json,
100
- 'attributes'.freeze => ActiveModelSerializers::Adapter::Attributes,
101
- 'json_api'.freeze => ActiveModelSerializers::Adapter::JsonApi
102
- }
103
- actual = ActiveModelSerializers::Adapter.adapter_map
104
- assert_equal actual, expected_adapter_map
105
- end
106
-
107
- def test_adapters
108
- assert_equal ActiveModelSerializers::Adapter.adapters.sort, [
109
- 'attributes'.freeze,
110
- 'json'.freeze,
111
- 'json_api'.freeze,
112
- 'null'.freeze
113
- ]
114
- end
115
-
116
- def test_lookup_adapter_by_string_name
117
- assert_equal ActiveModelSerializers::Adapter.lookup('json'.freeze), ActiveModelSerializers::Adapter::Json
118
- end
119
-
120
- def test_lookup_adapter_by_symbol_name
121
- assert_equal ActiveModelSerializers::Adapter.lookup(:json), ActiveModelSerializers::Adapter::Json
122
- end
123
-
124
- def test_lookup_adapter_by_class
125
- klass = ActiveModelSerializers::Adapter::Json
126
- assert_equal ActiveModelSerializers::Adapter.lookup(klass), klass
127
- end
128
-
129
- def test_lookup_adapter_from_environment_registers_adapter
130
- ActiveModelSerializers::Adapter.const_set(:AdapterFromEnvironment, Class.new)
131
- klass = ::ActiveModelSerializers::Adapter::AdapterFromEnvironment
132
- name = 'adapter_from_environment'.freeze
133
- assert_equal ActiveModelSerializers::Adapter.lookup(name), klass
134
- assert ActiveModelSerializers::Adapter.adapters.include?(name)
135
- ensure
136
- ActiveModelSerializers::Adapter.adapter_map.delete(name)
137
- ActiveModelSerializers::Adapter.send(:remove_const, :AdapterFromEnvironment)
138
- end
139
-
140
- def test_lookup_adapter_for_unknown_name
141
- assert_raises UnknownAdapterError do
142
- ActiveModelSerializers::Adapter.lookup(:json_simple)
143
- end
144
- end
145
-
146
- def test_adapter
147
- assert_equal ActiveModelSerializers.config.adapter, :attributes
148
- assert_equal ActiveModelSerializers::Adapter.configured_adapter, ActiveModelSerializers::Adapter::Attributes
149
- end
150
-
151
- def test_register_adapter
152
- new_adapter_name = :foo
153
- new_adapter_klass = Class.new
154
- ActiveModelSerializers::Adapter.register(new_adapter_name, new_adapter_klass)
155
- assert ActiveModelSerializers::Adapter.adapters.include?('foo'.freeze)
156
- assert ActiveModelSerializers::Adapter.lookup(:foo), new_adapter_klass
157
- ensure
158
- ActiveModelSerializers::Adapter.adapter_map.delete(new_adapter_name.to_s)
159
- end
160
-
161
- def test_inherited_adapter_hooks_register_adapter
162
- Object.const_set(:MyAdapter, Class.new)
163
- my_adapter = MyAdapter
164
- ActiveModelSerializers::Adapter::Base.inherited(my_adapter)
165
- assert_equal ActiveModelSerializers::Adapter.lookup(:my_adapter), my_adapter
166
- ensure
167
- ActiveModelSerializers::Adapter.adapter_map.delete('my_adapter'.freeze)
168
- Object.send(:remove_const, :MyAdapter)
169
- end
170
-
171
- def test_inherited_adapter_hooks_register_namespaced_adapter
172
- Object.const_set(:MyNamespace, Module.new)
173
- MyNamespace.const_set(:MyAdapter, Class.new)
174
- my_adapter = MyNamespace::MyAdapter
175
- ActiveModelSerializers::Adapter::Base.inherited(my_adapter)
176
- assert_equal ActiveModelSerializers::Adapter.lookup(:'my_namespace/my_adapter'), my_adapter
177
- ensure
178
- ActiveModelSerializers::Adapter.adapter_map.delete('my_namespace/my_adapter'.freeze)
179
- MyNamespace.send(:remove_const, :MyAdapter)
180
- Object.send(:remove_const, :MyNamespace)
181
- end
182
-
183
- def test_inherited_adapter_hooks_register_subclass_of_registered_adapter
184
- Object.const_set(:MyAdapter, Class.new)
185
- my_adapter = MyAdapter
186
- Object.const_set(:MySubclassedAdapter, Class.new(MyAdapter))
187
- my_subclassed_adapter = MySubclassedAdapter
188
- ActiveModelSerializers::Adapter::Base.inherited(my_adapter)
189
- ActiveModelSerializers::Adapter::Base.inherited(my_subclassed_adapter)
190
- assert_equal ActiveModelSerializers::Adapter.lookup(:my_adapter), my_adapter
191
- assert_equal ActiveModelSerializers::Adapter.lookup(:my_subclassed_adapter), my_subclassed_adapter
192
- ensure
193
- ActiveModelSerializers::Adapter.adapter_map.delete('my_adapter'.freeze)
194
- ActiveModelSerializers::Adapter.adapter_map.delete('my_subclassed_adapter'.freeze)
195
- Object.send(:remove_const, :MyAdapter)
196
- Object.send(:remove_const, :MySubclassedAdapter)
197
- end
198
-
199
- private
200
-
201
- def with_adapter_config_setup
202
- previous_adapter = ActiveModelSerializers.config.adapter
203
- yield
204
- ensure
205
- ActiveModelSerializers.config.adapter = previous_adapter
206
- end
207
- end
208
- end
@@ -1,20 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ActiveModelSerializers::JsonPointerTest < ActiveSupport::TestCase
4
- def test_attribute_pointer
5
- attribute_name = 'title'
6
- pointer = ActiveModelSerializers::JsonPointer.new(:attribute, attribute_name)
7
- assert_equal '/data/attributes/title', pointer
8
- end
9
-
10
- def test_primary_data_pointer
11
- pointer = ActiveModelSerializers::JsonPointer.new(:primary_data)
12
- assert_equal '/data', pointer
13
- end
14
-
15
- def test_unkown_data_pointer
16
- assert_raises(TypeError) do
17
- ActiveModelSerializers::JsonPointer.new(:unknown)
18
- end
19
- end
20
- end
@@ -1,263 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ActiveModelSerializers::KeyTransformTest < ActiveSupport::TestCase
4
- def test_camel
5
- obj = Object.new
6
- scenarios = [
7
- {
8
- value: { :"some-key" => 'value' },
9
- expected: { :SomeKey => 'value' }
10
- },
11
- {
12
- value: { :someKey => 'value' },
13
- expected: { :SomeKey => 'value' }
14
- },
15
- {
16
- value: { :some_key => 'value' },
17
- expected: { :SomeKey => 'value' }
18
- },
19
- {
20
- value: { 'some-key' => 'value' },
21
- expected: { 'SomeKey' => 'value' }
22
- },
23
- {
24
- value: { 'someKey' => 'value' },
25
- expected: { 'SomeKey' => 'value' }
26
- },
27
- {
28
- value: { 'some_key' => 'value' },
29
- expected: { 'SomeKey' => 'value' }
30
- },
31
- {
32
- value: :"some-value",
33
- expected: :SomeValue
34
- },
35
- {
36
- value: :some_value,
37
- expected: :SomeValue
38
- },
39
- {
40
- value: :someValue,
41
- expected: :SomeValue
42
- },
43
- {
44
- value: 'some-value',
45
- expected: 'SomeValue'
46
- },
47
- {
48
- value: 'someValue',
49
- expected: 'SomeValue'
50
- },
51
- {
52
- value: 'some_value',
53
- expected: 'SomeValue'
54
- },
55
- {
56
- value: obj,
57
- expected: obj
58
- },
59
- {
60
- value: nil,
61
- expected: nil
62
- }
63
- ]
64
- scenarios.each do |s|
65
- result = ActiveModelSerializers::KeyTransform.camel(s[:value])
66
- assert_equal s[:expected], result
67
- end
68
- end
69
-
70
- def test_camel_lower
71
- obj = Object.new
72
- scenarios = [
73
- {
74
- value: { :"some-key" => 'value' },
75
- expected: { :someKey => 'value' }
76
- },
77
- {
78
- value: { :SomeKey => 'value' },
79
- expected: { :someKey => 'value' }
80
- },
81
- {
82
- value: { :some_key => 'value' },
83
- expected: { :someKey => 'value' }
84
- },
85
- {
86
- value: { 'some-key' => 'value' },
87
- expected: { 'someKey' => 'value' }
88
- },
89
- {
90
- value: { 'SomeKey' => 'value' },
91
- expected: { 'someKey' => 'value' }
92
- },
93
- {
94
- value: { 'some_key' => 'value' },
95
- expected: { 'someKey' => 'value' }
96
- },
97
- {
98
- value: :"some-value",
99
- expected: :someValue
100
- },
101
- {
102
- value: :SomeValue,
103
- expected: :someValue
104
- },
105
- {
106
- value: :some_value,
107
- expected: :someValue
108
- },
109
- {
110
- value: 'some-value',
111
- expected: 'someValue'
112
- },
113
- {
114
- value: 'SomeValue',
115
- expected: 'someValue'
116
- },
117
- {
118
- value: 'some_value',
119
- expected: 'someValue'
120
- },
121
- {
122
- value: obj,
123
- expected: obj
124
- },
125
- {
126
- value: nil,
127
- expected: nil
128
- }
129
- ]
130
- scenarios.each do |s|
131
- result = ActiveModelSerializers::KeyTransform.camel_lower(s[:value])
132
- assert_equal s[:expected], result
133
- end
134
- end
135
-
136
- def test_dash
137
- obj = Object.new
138
- scenarios = [
139
- {
140
- value: { :some_key => 'value' },
141
- expected: { :"some-key" => 'value' }
142
- },
143
- {
144
- value: { 'some_key' => 'value' },
145
- expected: { 'some-key' => 'value' }
146
- },
147
- {
148
- value: { :SomeKey => 'value' },
149
- expected: { :"some-key" => 'value' }
150
- },
151
- {
152
- value: { 'SomeKey' => 'value' },
153
- expected: { 'some-key' => 'value' }
154
- },
155
- {
156
- value: { :someKey => 'value' },
157
- expected: { :"some-key" => 'value' }
158
- },
159
- {
160
- value: { 'someKey' => 'value' },
161
- expected: { 'some-key' => 'value' }
162
- },
163
- {
164
- value: :some_value,
165
- expected: :"some-value"
166
- },
167
- {
168
- value: :SomeValue,
169
- expected: :"some-value"
170
- },
171
- {
172
- value: 'SomeValue',
173
- expected: 'some-value'
174
- },
175
- {
176
- value: :someValue,
177
- expected: :"some-value"
178
- },
179
- {
180
- value: 'someValue',
181
- expected: 'some-value'
182
- },
183
- {
184
- value: obj,
185
- expected: obj
186
- },
187
- {
188
- value: nil,
189
- expected: nil
190
- }
191
- ]
192
- scenarios.each do |s|
193
- result = ActiveModelSerializers::KeyTransform.dash(s[:value])
194
- assert_equal s[:expected], result
195
- end
196
- end
197
-
198
- def test_underscore
199
- obj = Object.new
200
- scenarios = [
201
- {
202
- value: { :"some-key" => 'value' },
203
- expected: { :some_key => 'value' }
204
- },
205
- {
206
- value: { 'some-key' => 'value' },
207
- expected: { 'some_key' => 'value' }
208
- },
209
- {
210
- value: { :SomeKey => 'value' },
211
- expected: { :some_key => 'value' }
212
- },
213
- {
214
- value: { 'SomeKey' => 'value' },
215
- expected: { 'some_key' => 'value' }
216
- },
217
- {
218
- value: { :someKey => 'value' },
219
- expected: { :some_key => 'value' }
220
- },
221
- {
222
- value: { 'someKey' => 'value' },
223
- expected: { 'some_key' => 'value' }
224
- },
225
- {
226
- value: :"some-value",
227
- expected: :some_value
228
- },
229
- {
230
- value: :SomeValue,
231
- expected: :some_value
232
- },
233
- {
234
- value: :someValue,
235
- expected: :some_value
236
- },
237
- {
238
- value: 'some-value',
239
- expected: 'some_value'
240
- },
241
- {
242
- value: 'SomeValue',
243
- expected: 'some_value'
244
- },
245
- {
246
- value: 'someValue',
247
- expected: 'some_value'
248
- },
249
- {
250
- value: obj,
251
- expected: obj
252
- },
253
- {
254
- value: nil,
255
- expected: nil
256
- }
257
- ]
258
- scenarios.each do |s|
259
- result = ActiveModelSerializers::KeyTransform.underscore(s[:value])
260
- assert_equal s[:expected], result
261
- end
262
- end
263
- end
@@ -1,77 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class LoggingTest < ActiveSupport::TestCase
6
- class TestLogger < ActiveSupport::Logger
7
- def initialize
8
- @file = StringIO.new
9
- super(@file)
10
- end
11
-
12
- def messages
13
- @file.rewind
14
- @file.read
15
- end
16
- end
17
-
18
- def setup
19
- @author = Author.new(name: 'Steve K.')
20
- @post = Post.new(title: 'New Post', body: 'Body')
21
- @comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
22
- @post.comments = [@comment]
23
- @comment.post = @post
24
- @post.author = @author
25
- @author.posts = [@post]
26
- @post_serializer = PostSerializer.new(@post, custom_options: true)
27
-
28
- @old_logger = ActiveModelSerializers.logger
29
- @logger = ActiveSupport::TaggedLogging.new(TestLogger.new)
30
- logger @logger
31
- end
32
-
33
- def teardown
34
- logger @old_logger
35
- end
36
-
37
- def logger(logger)
38
- ActiveModelSerializers.logger = logger
39
- end
40
-
41
- def test_uses_ams_as_tag
42
- ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
43
- assert_match(/\[active_model_serializers\]/, @logger.messages)
44
- end
45
-
46
- def test_logs_when_call_serializable_hash
47
- ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
48
- assert_match(/Rendered/, @logger.messages)
49
- end
50
-
51
- def test_logs_when_call_as_json
52
- ActiveModelSerializers::SerializableResource.new(@post).as_json
53
- assert_match(/Rendered/, @logger.messages)
54
- end
55
-
56
- def test_logs_when_call_to_json
57
- ActiveModelSerializers::SerializableResource.new(@post).to_json
58
- assert_match(/Rendered/, @logger.messages)
59
- end
60
-
61
- def test_logs_correct_serializer
62
- ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
63
- assert_match(/PostSerializer/, @logger.messages)
64
- end
65
-
66
- def test_logs_correct_adapter
67
- ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
68
- assert_match(/ActiveModelSerializers::Adapter::Attributes/, @logger.messages)
69
- end
70
-
71
- def test_logs_the_duration
72
- ActiveModelSerializers::SerializableResource.new(@post).serializable_hash
73
- assert_match(/\(\d+\.\d+ms\)/, @logger.messages)
74
- end
75
- end
76
- end
77
- end
@@ -1,9 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ActiveModelSerializers::ModelTest < ActiveSupport::TestCase
4
- include ActiveModel::Serializer::Lint::Tests
5
-
6
- def setup
7
- @resource = ActiveModelSerializers::Model.new
8
- end
9
- end
@@ -1,63 +0,0 @@
1
- # Execute this test in isolation
2
- require 'support/isolated_unit'
3
-
4
- class RailtieTest < ActiveSupport::TestCase
5
- include ActiveSupport::Testing::Isolation
6
-
7
- class WithRails < RailtieTest
8
- setup do
9
- require 'rails'
10
- require 'active_model_serializers'
11
- make_basic_app
12
- end
13
-
14
- test 'mixes ActionController::Serialization into ActionController::Base' do
15
- assert ActionController.const_defined?(:Serialization),
16
- "ActionController::Serialization should be defined, but isn't"
17
- assert ::ActionController::Base.included_modules.include?(::ActionController::Serialization),
18
- "ActionController::Serialization should be included in ActionController::Base, but isn't"
19
- end
20
-
21
- test 'prepares url_helpers for SerializationContext' do
22
- assert ActiveModelSerializers::SerializationContext.url_helpers.respond_to? :url_for
23
- assert_equal Rails.application.routes.default_url_options,
24
- ActiveModelSerializers::SerializationContext.default_url_options
25
- end
26
-
27
- test 'sets the ActiveModelSerializers.logger to Rails.logger' do
28
- refute_nil Rails.logger
29
- refute_nil ActiveModelSerializers.logger
30
- assert_equal Rails.logger, ActiveModelSerializers.logger
31
- end
32
-
33
- test 'it is configured for caching' do
34
- assert_equal ActionController::Base.cache_store, ActiveModelSerializers.config.cache_store
35
- assert_equal Rails.configuration.action_controller.perform_caching, ActiveModelSerializers.config.perform_caching
36
- end
37
- end
38
-
39
- class WithoutRails < RailtieTest
40
- setup do
41
- require 'active_model_serializers'
42
- make_basic_app
43
- end
44
-
45
- test 'does not mix ActionController::Serialization into ActionController::Base' do
46
- refute ActionController.const_defined?(:Serialization),
47
- 'ActionController::Serialization should not be defined, but is'
48
- end
49
-
50
- test 'has its own logger at ActiveModelSerializers.logger' do
51
- refute_nil Rails.logger
52
- refute_nil ActiveModelSerializers.logger
53
- refute_equal Rails.logger, ActiveModelSerializers.logger
54
- end
55
-
56
- test 'it is not configured for caching' do
57
- refute_nil ActionController::Base.cache_store
58
- assert_nil ActiveModelSerializers.config.cache_store
59
- refute Rails.configuration.action_controller.perform_caching
60
- refute ActiveModelSerializers.config.perform_caching
61
- end
62
- end
63
- end
@@ -1,58 +0,0 @@
1
- # Execute this test in isolation
2
- require 'support/isolated_unit'
3
- require 'minitest/mock'
4
-
5
- class SerializationContextTest < ActiveSupport::TestCase
6
- include ActiveSupport::Testing::Isolation
7
-
8
- def create_request
9
- request = Minitest::Mock.new
10
- request.expect(:original_url, 'original_url')
11
- request.expect(:query_parameters, 'query_parameters')
12
- end
13
-
14
- class WithRails < SerializationContextTest
15
- setup do
16
- require 'rails'
17
- require 'active_model_serializers'
18
- make_basic_app
19
- @context = ActiveModelSerializers::SerializationContext.new(create_request)
20
- end
21
-
22
- test 'create context with request url and query parameters' do
23
- assert_equal @context.request_url, 'original_url'
24
- assert_equal @context.query_parameters, 'query_parameters'
25
- end
26
-
27
- test 'url_helpers is set up for Rails url_helpers' do
28
- assert_equal Module, ActiveModelSerializers::SerializationContext.url_helpers.class
29
- assert ActiveModelSerializers::SerializationContext.url_helpers.respond_to? :url_for
30
- end
31
-
32
- test 'default_url_options returns Rails.application.routes.default_url_options' do
33
- assert_equal Rails.application.routes.default_url_options,
34
- ActiveModelSerializers::SerializationContext.default_url_options
35
- end
36
- end
37
-
38
- class WithoutRails < SerializationContextTest
39
- setup do
40
- require 'active_model_serializers/serialization_context'
41
- @context = ActiveModelSerializers::SerializationContext.new(create_request)
42
- end
43
-
44
- test 'create context with request url and query parameters' do
45
- assert_equal @context.request_url, 'original_url'
46
- assert_equal @context.query_parameters, 'query_parameters'
47
- end
48
-
49
- test 'url_helpers is a module when Rails is not present' do
50
- assert_equal Module, ActiveModelSerializers::SerializationContext.url_helpers.class
51
- refute ActiveModelSerializers::SerializationContext.url_helpers.respond_to? :url_for
52
- end
53
-
54
- test 'default_url_options return a Hash' do
55
- assert Hash, ActiveModelSerializers::SerializationContext.default_url_options.class
56
- end
57
- end
58
- end