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,130 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Test
5
- class SchemaTest < ActionController::TestCase
6
- include ActiveModelSerializers::Test::Schema
7
-
8
- class MyController < ActionController::Base
9
- def index
10
- render json: profile
11
- end
12
-
13
- def show
14
- index
15
- end
16
-
17
- def name_as_a_integer
18
- profile.name = 1
19
- index
20
- end
21
-
22
- def render_using_json_api
23
- render json: profile, adapter: :json_api
24
- end
25
-
26
- def invalid_json_body
27
- render json: ''
28
- end
29
-
30
- private
31
-
32
- def profile
33
- @profile ||= Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
34
- end
35
- end
36
-
37
- tests MyController
38
-
39
- def test_that_assert_with_a_valid_schema
40
- get :index
41
- assert_response_schema
42
- end
43
-
44
- def test_that_raises_a_minitest_error_with_a_invalid_schema
45
- message = "#/name: failed schema #/properties/name: For 'properties/name', \"Name 1\" is not an integer. and #/description: failed schema #/properties/description: For 'properties/description', \"Description 1\" is not a boolean."
46
-
47
- get :show
48
-
49
- error = assert_raises Minitest::Assertion do
50
- assert_response_schema
51
- end
52
- assert_equal(message, error.message)
53
- end
54
-
55
- def test_that_raises_error_with_a_custom_message_with_a_invalid_schema
56
- message = 'oh boy the show is broken'
57
- exception_message = "#/name: failed schema #/properties/name: For 'properties/name', \"Name 1\" is not an integer. and #/description: failed schema #/properties/description: For 'properties/description', \"Description 1\" is not a boolean."
58
- expected_message = "#{message}: #{exception_message}"
59
-
60
- get :show
61
-
62
- error = assert_raises Minitest::Assertion do
63
- assert_response_schema(nil, message)
64
- end
65
- assert_equal(expected_message, error.message)
66
- end
67
-
68
- def test_that_assert_with_a_custom_schema
69
- get :show
70
- assert_response_schema('custom/show.json')
71
- end
72
-
73
- def test_that_assert_with_a_hyper_schema
74
- get :show
75
- assert_response_schema('hyper_schema.json')
76
- end
77
-
78
- def test_simple_json_pointers
79
- get :show
80
- assert_response_schema('simple_json_pointers.json')
81
- end
82
-
83
- def test_simple_json_pointers_that_doesnt_match
84
- get :name_as_a_integer
85
-
86
- assert_raises Minitest::Assertion do
87
- assert_response_schema('simple_json_pointers.json')
88
- end
89
- end
90
-
91
- def test_json_api_schema
92
- get :render_using_json_api
93
- assert_response_schema('render_using_json_api.json')
94
- end
95
-
96
- def test_that_assert_with_a_custom_schema_directory
97
- original_schema_path = ActiveModelSerializers.config.schema_path
98
- ActiveModelSerializers.config.schema_path = 'test/support/custom_schemas'
99
-
100
- get :index
101
- assert_response_schema
102
-
103
- ActiveModelSerializers.config.schema_path = original_schema_path
104
- end
105
-
106
- def test_with_a_non_existent_file
107
- message = 'No Schema file at test/support/schemas/non-existent.json'
108
-
109
- get :show
110
-
111
- error = assert_raises ActiveModelSerializers::Test::Schema::MissingSchema do
112
- assert_response_schema('non-existent.json')
113
- end
114
- assert_equal(message, error.message)
115
- end
116
-
117
- def test_that_raises_with_a_invalid_json_body
118
- message = 'A JSON text must at least contain two octets!'
119
-
120
- get :invalid_json_body
121
-
122
- error = assert_raises ActiveModelSerializers::Test::Schema::InvalidSchemaError do
123
- assert_response_schema('custom/show.json')
124
- end
125
-
126
- assert_equal(message, error.message)
127
- end
128
- end
129
- end
130
- end
@@ -1,62 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Test
5
- class SerializerTest < ActionController::TestCase
6
- include ActiveModelSerializers::Test::Serializer
7
-
8
- class MyController < ActionController::Base
9
- def render_using_serializer
10
- render json: Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
11
- end
12
-
13
- def render_some_text
14
- render(plain: 'ok')
15
- end
16
- end
17
-
18
- tests MyController
19
-
20
- def test_supports_specifying_serializers_with_a_serializer_class
21
- get :render_using_serializer
22
- assert_serializer ProfileSerializer
23
- end
24
-
25
- def test_supports_specifying_serializers_with_a_regexp
26
- get :render_using_serializer
27
- assert_serializer(/\AProfile.+\Z/)
28
- end
29
-
30
- def test_supports_specifying_serializers_with_a_string
31
- get :render_using_serializer
32
- assert_serializer 'ProfileSerializer'
33
- end
34
-
35
- def test_supports_specifying_serializers_with_a_symbol
36
- get :render_using_serializer
37
- assert_serializer :profile_serializer
38
- end
39
-
40
- def test_supports_specifying_serializers_with_a_nil
41
- get :render_some_text
42
- assert_serializer nil
43
- end
44
-
45
- def test_raises_descriptive_error_message_when_serializer_was_not_rendered
46
- get :render_using_serializer
47
- e = assert_raise ActiveSupport::TestCase::Assertion do
48
- assert_serializer 'PostSerializer'
49
- end
50
- assert_match 'expecting <"PostSerializer"> but rendering with <["ProfileSerializer"]>', e.message
51
- end
52
-
53
- def test_raises_argument_error_when_asserting_with_invalid_object
54
- get :render_using_serializer
55
- e = assert_raise ArgumentError do
56
- assert_serializer Hash
57
- end
58
- assert_match 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil', e.message
59
- end
60
- end
61
- end
62
- end
@@ -1,9 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ActiveRecordTest < ActiveSupport::TestCase
4
- include ActiveModel::Serializer::Lint::Tests
5
-
6
- def setup
7
- @resource = ARModels::Post.new
8
- end
9
- end
@@ -1,100 +0,0 @@
1
- require 'test_helper'
2
- module ActiveModel
3
- class Serializer
4
- module Adapter
5
- class DeprecationTest < ActiveSupport::TestCase
6
- class PostSerializer < ActiveModel::Serializer
7
- attribute :body
8
- end
9
- setup do
10
- post = Post.new(id: 1, body: 'Hello')
11
- @serializer = PostSerializer.new(post)
12
- end
13
-
14
- def test_null_adapter_serialization_deprecation
15
- expected = {}
16
- assert_deprecated do
17
- assert_equal(expected, Null.new(@serializer).as_json)
18
- end
19
- end
20
-
21
- def test_json_adapter_serialization_deprecation
22
- expected = { post: { body: 'Hello' } }
23
- assert_deprecated do
24
- assert_equal(expected, Json.new(@serializer).as_json)
25
- end
26
- end
27
-
28
- def test_jsonapi_adapter_serialization_deprecation
29
- expected = {
30
- data: {
31
- id: '1',
32
- type: 'posts',
33
- attributes: {
34
- body: 'Hello'
35
- }
36
- }
37
- }
38
- assert_deprecated do
39
- assert_equal(expected, JsonApi.new(@serializer).as_json)
40
- end
41
- end
42
-
43
- def test_attributes_adapter_serialization_deprecation
44
- expected = { body: 'Hello' }
45
- assert_deprecated do
46
- assert_equal(expected, Attributes.new(@serializer).as_json)
47
- end
48
- end
49
-
50
- def test_adapter_create_deprecation
51
- assert_deprecated do
52
- Adapter.create(@serializer)
53
- end
54
- end
55
-
56
- def test_adapter_adapter_map_deprecation
57
- assert_deprecated do
58
- Adapter.adapter_map
59
- end
60
- end
61
-
62
- def test_adapter_adapters_deprecation
63
- assert_deprecated do
64
- Adapter.adapters
65
- end
66
- end
67
-
68
- def test_adapter_adapter_class_deprecation
69
- assert_deprecated do
70
- Adapter.adapter_class(:json_api)
71
- end
72
- end
73
-
74
- def test_adapter_register_deprecation
75
- assert_deprecated do
76
- begin
77
- Adapter.register(:test, Class.new)
78
- ensure
79
- Adapter.adapter_map.delete('test')
80
- end
81
- end
82
- end
83
-
84
- def test_adapter_lookup_deprecation
85
- assert_deprecated do
86
- Adapter.lookup(:json_api)
87
- end
88
- end
89
-
90
- private
91
-
92
- def assert_deprecated
93
- assert_output(nil, /deprecated/) do
94
- yield
95
- end
96
- end
97
- end
98
- end
99
- end
100
- end
@@ -1,45 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class Json
6
- class BelongsToTest < ActiveSupport::TestCase
7
- def setup
8
- @post = Post.new(id: 42, title: 'New Post', body: 'Body')
9
- @anonymous_post = Post.new(id: 43, title: 'Hello!!', body: 'Hello, world!!')
10
- @comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
11
- @post.comments = [@comment]
12
- @anonymous_post.comments = []
13
- @comment.post = @post
14
- @comment.author = nil
15
- @anonymous_post.author = nil
16
- @blog = Blog.new(id: 1, name: 'My Blog!!')
17
- @post.blog = @blog
18
- @anonymous_post.blog = nil
19
-
20
- @serializer = CommentSerializer.new(@comment)
21
- @adapter = ActiveModelSerializers::Adapter::Json.new(@serializer)
22
- ActionController::Base.cache_store.clear
23
- end
24
-
25
- def test_includes_post
26
- assert_equal({ id: 42, title: 'New Post', body: 'Body' }, @adapter.serializable_hash[:comment][:post])
27
- end
28
-
29
- def test_include_nil_author
30
- serializer = PostSerializer.new(@anonymous_post)
31
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
32
-
33
- assert_equal({ post: { title: 'Hello!!', body: 'Hello, world!!', id: 43, comments: [], blog: { id: 999, name: 'Custom blog' }, author: nil } }, adapter.serializable_hash)
34
- end
35
-
36
- def test_include_nil_author_with_specified_serializer
37
- serializer = PostPreviewSerializer.new(@anonymous_post)
38
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
39
-
40
- assert_equal({ post: { title: 'Hello!!', body: 'Hello, world!!', id: 43, comments: [], author: nil } }, adapter.serializable_hash)
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,90 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class Json
6
- class Collection < ActiveSupport::TestCase
7
- def setup
8
- @author = Author.new(id: 1, name: 'Steve K.')
9
- @first_post = Post.new(id: 1, title: 'Hello!!', body: 'Hello, world!!')
10
- @second_post = Post.new(id: 2, title: 'New Post', body: 'Body')
11
- @first_post.comments = []
12
- @second_post.comments = []
13
- @first_post.author = @author
14
- @second_post.author = @author
15
- @blog = Blog.new(id: 1, name: 'My Blog!!')
16
- @first_post.blog = @blog
17
- @second_post.blog = nil
18
-
19
- ActionController::Base.cache_store.clear
20
- end
21
-
22
- def test_with_serializer_option
23
- @blog.special_attribute = 'Special'
24
- @blog.articles = [@first_post, @second_post]
25
- serializer = ActiveModel::Serializer::CollectionSerializer.new([@blog], serializer: CustomBlogSerializer)
26
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
27
-
28
- expected = { blogs: [{
29
- id: 1,
30
- special_attribute: 'Special',
31
- articles: [{ id: 1, title: 'Hello!!', body: 'Hello, world!!' }, { id: 2, title: 'New Post', body: 'Body' }]
32
- }] }
33
- assert_equal expected, adapter.serializable_hash
34
- end
35
-
36
- def test_include_multiple_posts
37
- serializer = ActiveModel::Serializer::CollectionSerializer.new([@first_post, @second_post])
38
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
39
-
40
- expected = { posts: [{
41
- title: 'Hello!!',
42
- body: 'Hello, world!!',
43
- id: 1,
44
- comments: [],
45
- author: {
46
- id: 1,
47
- name: 'Steve K.'
48
- },
49
- blog: {
50
- id: 999,
51
- name: 'Custom blog'
52
- }
53
- }, {
54
- title: 'New Post',
55
- body: 'Body',
56
- id: 2,
57
- comments: [],
58
- author: {
59
- id: 1,
60
- name: 'Steve K.'
61
- },
62
- blog: {
63
- id: 999,
64
- name: 'Custom blog'
65
- }
66
- }] }
67
- assert_equal expected, adapter.serializable_hash
68
- end
69
-
70
- def test_root_is_underscored
71
- virtual_value = VirtualValue.new(id: 1)
72
- serializer = ActiveModel::Serializer::CollectionSerializer.new([virtual_value])
73
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
74
-
75
- assert_equal 1, adapter.serializable_hash[:virtual_values].length
76
- end
77
-
78
- def test_include_option
79
- serializer = ActiveModel::Serializer::CollectionSerializer.new([@first_post, @second_post])
80
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer, include: '')
81
- actual = adapter.serializable_hash
82
- expected = { posts: [{ id: 1, title: 'Hello!!', body: 'Hello, world!!' },
83
- { id: 2, title: 'New Post', body: 'Body' }] }
84
-
85
- assert_equal(expected, actual)
86
- end
87
- end
88
- end
89
- end
90
- end
@@ -1,45 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class Json
6
- class HasManyTestTest < ActiveSupport::TestCase
7
- def setup
8
- ActionController::Base.cache_store.clear
9
- @author = Author.new(id: 1, name: 'Steve K.')
10
- @post = Post.new(id: 42, title: 'New Post', body: 'Body')
11
- @first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
12
- @second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
13
- @post.comments = [@first_comment, @second_comment]
14
- @post.author = @author
15
- @first_comment.post = @post
16
- @second_comment.post = @post
17
- @blog = Blog.new(id: 1, name: 'My Blog!!')
18
- @post.blog = @blog
19
- @tag = Tag.new(id: 1, name: '#hash_tag')
20
- @post.tags = [@tag]
21
- end
22
-
23
- def test_has_many
24
- serializer = PostSerializer.new(@post)
25
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
26
- assert_equal([
27
- { id: 1, body: 'ZOMG A COMMENT' },
28
- { id: 2, body: 'ZOMG ANOTHER COMMENT' }
29
- ], adapter.serializable_hash[:post][:comments])
30
- end
31
-
32
- def test_has_many_with_no_serializer
33
- serializer = PostWithTagsSerializer.new(@post)
34
- adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
35
- assert_equal({
36
- id: 42,
37
- tags: [
38
- { 'id' => 1, 'name' => '#hash_tag' }
39
- ]
40
- }.to_json, adapter.serializable_hash[:post].to_json)
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,93 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class Json
6
- class KeyCaseTest < ActiveSupport::TestCase
7
- def mock_request(key_transform = nil)
8
- context = Minitest::Mock.new
9
- context.expect(:request_url, URI)
10
- context.expect(:query_parameters, {})
11
- options = {}
12
- options[:key_transform] = key_transform if key_transform
13
- options[:serialization_context] = context
14
- serializer = CustomBlogSerializer.new(@blog)
15
- @adapter = ActiveModelSerializers::Adapter::Json.new(serializer, options)
16
- end
17
-
18
- Post = Class.new(::Model)
19
- class PostSerializer < ActiveModel::Serializer
20
- attributes :id, :title, :body, :publish_at
21
- end
22
-
23
- setup do
24
- ActionController::Base.cache_store.clear
25
- @blog = Blog.new(id: 1, name: 'My Blog!!', special_attribute: 'neat')
26
- end
27
-
28
- def test_transform_default
29
- mock_request
30
- assert_equal({
31
- blog: { id: 1, special_attribute: 'neat', articles: nil }
32
- }, @adapter.serializable_hash)
33
- end
34
-
35
- def test_transform_global_config
36
- mock_request
37
- result = with_config(key_transform: :camel_lower) do
38
- @adapter.serializable_hash
39
- end
40
- assert_equal({
41
- blog: { id: 1, specialAttribute: 'neat', articles: nil }
42
- }, result)
43
- end
44
-
45
- def test_transform_serialization_ctx_overrides_global_config
46
- mock_request(:camel)
47
- result = with_config(key_transform: :camel_lower) do
48
- @adapter.serializable_hash
49
- end
50
- assert_equal({
51
- Blog: { Id: 1, SpecialAttribute: 'neat', Articles: nil }
52
- }, result)
53
- end
54
-
55
- def test_transform_undefined
56
- mock_request(:blam)
57
- result = nil
58
- assert_raises NoMethodError do
59
- result = @adapter.serializable_hash
60
- end
61
- end
62
-
63
- def test_transform_dash
64
- mock_request(:dash)
65
- assert_equal({
66
- blog: { id: 1, :"special-attribute" => 'neat', articles: nil }
67
- }, @adapter.serializable_hash)
68
- end
69
-
70
- def test_transform_unaltered
71
- mock_request(:unaltered)
72
- assert_equal({
73
- blog: { id: 1, special_attribute: 'neat', articles: nil }
74
- }, @adapter.serializable_hash)
75
- end
76
-
77
- def test_transform_camel
78
- mock_request(:camel)
79
- assert_equal({
80
- Blog: { Id: 1, SpecialAttribute: 'neat', Articles: nil }
81
- }, @adapter.serializable_hash)
82
- end
83
-
84
- def test_transform_camel_lower
85
- mock_request(:camel_lower)
86
- assert_equal({
87
- blog: { id: 1, specialAttribute: 'neat', articles: nil }
88
- }, @adapter.serializable_hash)
89
- end
90
- end
91
- end
92
- end
93
- end