active_model_serializers 0.10.0 → 0.10.9

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 (206) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +10 -5
  3. data/.travis.yml +41 -21
  4. data/CHANGELOG.md +200 -2
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +25 -4
  7. data/README.md +166 -28
  8. data/Rakefile +5 -32
  9. data/active_model_serializers.gemspec +23 -25
  10. data/appveyor.yml +10 -6
  11. data/bin/rubocop +38 -0
  12. data/docs/README.md +2 -1
  13. data/docs/general/adapters.md +35 -11
  14. data/docs/general/caching.md +7 -1
  15. data/docs/general/configuration_options.md +86 -1
  16. data/docs/general/deserialization.md +1 -1
  17. data/docs/general/fields.md +31 -0
  18. data/docs/general/getting_started.md +1 -1
  19. data/docs/general/logging.md +7 -0
  20. data/docs/general/rendering.md +63 -25
  21. data/docs/general/serializers.md +137 -14
  22. data/docs/howto/add_pagination_links.md +16 -17
  23. data/docs/howto/add_relationship_links.md +140 -0
  24. data/docs/howto/add_root_key.md +11 -0
  25. data/docs/howto/grape_integration.md +42 -0
  26. data/docs/howto/outside_controller_use.md +12 -4
  27. data/docs/howto/passing_arbitrary_options.md +2 -2
  28. data/docs/howto/serialize_poro.md +46 -5
  29. data/docs/howto/test.md +2 -0
  30. data/docs/howto/upgrade_from_0_8_to_0_10.md +265 -0
  31. data/docs/integrations/ember-and-json-api.md +67 -32
  32. data/docs/jsonapi/schema.md +1 -1
  33. data/lib/action_controller/serialization.rb +15 -3
  34. data/lib/active_model/serializable_resource.rb +2 -0
  35. data/lib/active_model/serializer/adapter/attributes.rb +2 -0
  36. data/lib/active_model/serializer/adapter/base.rb +4 -0
  37. data/lib/active_model/serializer/adapter/json.rb +2 -0
  38. data/lib/active_model/serializer/adapter/json_api.rb +2 -0
  39. data/lib/active_model/serializer/adapter/null.rb +2 -0
  40. data/lib/active_model/serializer/adapter.rb +2 -0
  41. data/lib/active_model/serializer/array_serializer.rb +10 -5
  42. data/lib/active_model/serializer/association.rb +64 -10
  43. data/lib/active_model/serializer/attribute.rb +2 -0
  44. data/lib/active_model/serializer/belongs_to_reflection.rb +6 -3
  45. data/lib/active_model/serializer/collection_serializer.rb +39 -13
  46. data/lib/active_model/serializer/{caching.rb → concerns/caching.rb} +87 -116
  47. data/lib/active_model/serializer/error_serializer.rb +13 -7
  48. data/lib/active_model/serializer/errors_serializer.rb +27 -20
  49. data/lib/active_model/serializer/field.rb +2 -0
  50. data/lib/active_model/serializer/fieldset.rb +2 -0
  51. data/lib/active_model/serializer/has_many_reflection.rb +5 -3
  52. data/lib/active_model/serializer/has_one_reflection.rb +3 -4
  53. data/lib/active_model/serializer/lazy_association.rb +99 -0
  54. data/lib/active_model/serializer/link.rb +23 -0
  55. data/lib/active_model/serializer/lint.rb +136 -130
  56. data/lib/active_model/serializer/null.rb +2 -0
  57. data/lib/active_model/serializer/reflection.rb +132 -67
  58. data/lib/active_model/serializer/version.rb +3 -1
  59. data/lib/active_model/serializer.rb +308 -82
  60. data/lib/active_model_serializers/adapter/attributes.rb +5 -66
  61. data/lib/active_model_serializers/adapter/base.rb +41 -39
  62. data/lib/active_model_serializers/adapter/json.rb +2 -0
  63. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +4 -2
  64. data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
  65. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
  66. data/lib/active_model_serializers/adapter/json_api/link.rb +3 -1
  67. data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
  68. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +49 -21
  69. data/lib/active_model_serializers/adapter/json_api/relationship.rb +77 -23
  70. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +41 -10
  71. data/lib/active_model_serializers/adapter/json_api.rb +84 -65
  72. data/lib/active_model_serializers/adapter/null.rb +2 -0
  73. data/lib/active_model_serializers/adapter.rb +9 -1
  74. data/lib/active_model_serializers/callbacks.rb +2 -0
  75. data/lib/active_model_serializers/deprecate.rb +3 -2
  76. data/lib/active_model_serializers/deserialization.rb +4 -0
  77. data/lib/active_model_serializers/json_pointer.rb +2 -0
  78. data/lib/active_model_serializers/logging.rb +2 -0
  79. data/lib/active_model_serializers/lookup_chain.rb +82 -0
  80. data/lib/active_model_serializers/model.rb +111 -28
  81. data/lib/active_model_serializers/railtie.rb +7 -1
  82. data/lib/active_model_serializers/register_jsonapi_renderer.rb +46 -31
  83. data/lib/active_model_serializers/serializable_resource.rb +10 -7
  84. data/lib/active_model_serializers/serialization_context.rb +12 -3
  85. data/lib/active_model_serializers/test/schema.rb +4 -2
  86. data/lib/active_model_serializers/test/serializer.rb +2 -0
  87. data/lib/active_model_serializers/test.rb +2 -0
  88. data/lib/active_model_serializers.rb +35 -10
  89. data/lib/generators/rails/resource_override.rb +3 -1
  90. data/lib/generators/rails/serializer_generator.rb +6 -4
  91. data/lib/grape/active_model_serializers.rb +9 -5
  92. data/lib/grape/formatters/active_model_serializers.rb +21 -2
  93. data/lib/grape/helpers/active_model_serializers.rb +3 -0
  94. data/lib/tasks/rubocop.rake +55 -0
  95. data/test/action_controller/adapter_selector_test.rb +16 -5
  96. data/test/action_controller/explicit_serializer_test.rb +7 -4
  97. data/test/action_controller/json/include_test.rb +108 -27
  98. data/test/action_controller/json_api/deserialization_test.rb +3 -1
  99. data/test/action_controller/json_api/errors_test.rb +10 -9
  100. data/test/action_controller/json_api/fields_test.rb +68 -0
  101. data/test/action_controller/json_api/linked_test.rb +31 -24
  102. data/test/action_controller/json_api/pagination_test.rb +33 -23
  103. data/test/action_controller/json_api/transform_test.rb +13 -3
  104. data/test/action_controller/lookup_proc_test.rb +51 -0
  105. data/test/action_controller/namespace_lookup_test.rb +234 -0
  106. data/test/action_controller/serialization_scope_name_test.rb +14 -6
  107. data/test/action_controller/serialization_test.rb +23 -12
  108. data/test/active_model_serializers/adapter_for_test.rb +2 -0
  109. data/test/active_model_serializers/json_pointer_test.rb +17 -13
  110. data/test/active_model_serializers/logging_test.rb +2 -0
  111. data/test/active_model_serializers/model_test.rb +139 -4
  112. data/test/active_model_serializers/railtie_test_isolated.rb +14 -7
  113. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +163 -0
  114. data/test/active_model_serializers/serialization_context_test_isolated.rb +25 -10
  115. data/test/active_model_serializers/test/schema_test.rb +5 -2
  116. data/test/active_model_serializers/test/serializer_test.rb +2 -0
  117. data/test/active_record_test.rb +2 -0
  118. data/test/adapter/attributes_test.rb +42 -0
  119. data/test/adapter/deprecation_test.rb +2 -0
  120. data/test/adapter/json/belongs_to_test.rb +2 -0
  121. data/test/adapter/json/collection_test.rb +16 -0
  122. data/test/adapter/json/has_many_test.rb +12 -2
  123. data/test/adapter/json/transform_test.rb +17 -15
  124. data/test/adapter/json_api/belongs_to_test.rb +2 -0
  125. data/test/adapter/json_api/collection_test.rb +6 -3
  126. data/test/adapter/json_api/errors_test.rb +19 -19
  127. data/test/adapter/json_api/fields_test.rb +14 -3
  128. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +2 -0
  129. data/test/adapter/json_api/has_many_test.rb +51 -20
  130. data/test/adapter/json_api/has_one_test.rb +2 -0
  131. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +215 -0
  132. data/test/adapter/json_api/json_api_test.rb +7 -7
  133. data/test/adapter/json_api/linked_test.rb +35 -12
  134. data/test/adapter/json_api/links_test.rb +22 -3
  135. data/test/adapter/json_api/pagination_links_test.rb +55 -13
  136. data/test/adapter/json_api/parse_test.rb +3 -1
  137. data/test/adapter/json_api/relationship_test.rb +311 -73
  138. data/test/adapter/json_api/resource_meta_test.rb +5 -3
  139. data/test/adapter/json_api/toplevel_jsonapi_test.rb +2 -0
  140. data/test/adapter/json_api/transform_test.rb +265 -253
  141. data/test/adapter/json_api/type_test.rb +170 -36
  142. data/test/adapter/json_test.rb +10 -7
  143. data/test/adapter/null_test.rb +3 -2
  144. data/test/adapter/polymorphic_test.rb +54 -5
  145. data/test/adapter_test.rb +3 -1
  146. data/test/array_serializer_test.rb +2 -0
  147. data/test/benchmark/app.rb +3 -1
  148. data/test/benchmark/benchmarking_support.rb +3 -1
  149. data/test/benchmark/bm_active_record.rb +83 -0
  150. data/test/benchmark/bm_adapter.rb +40 -0
  151. data/test/benchmark/bm_caching.rb +18 -16
  152. data/test/benchmark/bm_lookup_chain.rb +85 -0
  153. data/test/benchmark/bm_transform.rb +23 -10
  154. data/test/benchmark/controllers.rb +18 -17
  155. data/test/benchmark/fixtures.rb +74 -72
  156. data/test/cache_test.rb +301 -69
  157. data/test/collection_serializer_test.rb +33 -14
  158. data/test/fixtures/active_record.rb +47 -10
  159. data/test/fixtures/poro.rb +128 -183
  160. data/test/generators/scaffold_controller_generator_test.rb +2 -0
  161. data/test/generators/serializer_generator_test.rb +25 -5
  162. data/test/grape_test.rb +172 -56
  163. data/test/lint_test.rb +3 -1
  164. data/test/logger_test.rb +15 -11
  165. data/test/poro_test.rb +2 -0
  166. data/test/serializable_resource_test.rb +20 -22
  167. data/test/serializers/association_macros_test.rb +5 -2
  168. data/test/serializers/associations_test.rb +274 -49
  169. data/test/serializers/attribute_test.rb +7 -3
  170. data/test/serializers/attributes_test.rb +3 -1
  171. data/test/serializers/caching_configuration_test_isolated.rb +8 -6
  172. data/test/serializers/configuration_test.rb +2 -0
  173. data/test/serializers/fieldset_test.rb +3 -1
  174. data/test/serializers/meta_test.rb +14 -6
  175. data/test/serializers/options_test.rb +19 -6
  176. data/test/serializers/read_attribute_for_serialization_test.rb +5 -3
  177. data/test/serializers/reflection_test.rb +481 -0
  178. data/test/serializers/root_test.rb +3 -1
  179. data/test/serializers/serialization_test.rb +4 -2
  180. data/test/serializers/serializer_for_test.rb +14 -10
  181. data/test/serializers/serializer_for_with_namespace_test.rb +90 -0
  182. data/test/support/isolated_unit.rb +11 -4
  183. data/test/support/rails5_shims.rb +10 -2
  184. data/test/support/rails_app.rb +4 -9
  185. data/test/support/serialization_testing.rb +33 -5
  186. data/test/test_helper.rb +15 -0
  187. metadata +126 -46
  188. data/.rubocop_todo.yml +0 -167
  189. data/docs/ARCHITECTURE.md +0 -126
  190. data/lib/active_model/serializer/associations.rb +0 -100
  191. data/lib/active_model/serializer/attributes.rb +0 -82
  192. data/lib/active_model/serializer/collection_reflection.rb +0 -7
  193. data/lib/active_model/serializer/configuration.rb +0 -35
  194. data/lib/active_model/serializer/include_tree.rb +0 -111
  195. data/lib/active_model/serializer/links.rb +0 -35
  196. data/lib/active_model/serializer/meta.rb +0 -29
  197. data/lib/active_model/serializer/singular_reflection.rb +0 -7
  198. data/lib/active_model/serializer/type.rb +0 -25
  199. data/lib/active_model_serializers/key_transform.rb +0 -70
  200. data/test/active_model_serializers/key_transform_test.rb +0 -263
  201. data/test/adapter/json_api/has_many_embed_ids_test.rb +0 -43
  202. data/test/adapter/json_api/relationships_test.rb +0 -199
  203. data/test/adapter/json_api/resource_identifier_test.rb +0 -85
  204. data/test/include_tree/from_include_args_test.rb +0 -26
  205. data/test/include_tree/from_string_test.rb +0 -94
  206. data/test/include_tree/include_args_to_hash_test.rb +0 -64
data/test/grape_test.rb CHANGED
@@ -1,82 +1,198 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
- require 'grape'
4
+ TestHelper.silence_warnings do
5
+ require 'grape'
6
+ end
3
7
  require 'grape/active_model_serializers'
8
+ require 'kaminari'
9
+ require 'kaminari/hooks'
10
+ ::Kaminari::Hooks.init
11
+
12
+ module ActiveModelSerializers
13
+ class GrapeTest < ActiveSupport::TestCase
14
+ include Rack::Test::Methods
15
+ module Models
16
+ def self.model1
17
+ ARModels::Post.new(id: 1, title: 'Dummy Title', body: 'Lorem Ipsum')
18
+ end
4
19
 
5
- class ActiveModelSerializers::GrapeTest < ActiveSupport::TestCase
6
- include Rack::Test::Methods
7
- module Models
8
- def self.model1
9
- ARModels::Post.new(id: 1, title: 'Dummy Title', body: 'Lorem Ipsum')
10
- end
20
+ def self.model2
21
+ ARModels::Post.new(id: 2, title: 'Second Dummy Title', body: 'Second Lorem Ipsum')
22
+ end
11
23
 
12
- def self.model2
13
- ARModels::Post.new(id: 2, title: 'Second Dummy Title', body: 'Second Lorem Ipsum')
14
- end
24
+ def self.all
25
+ @all ||=
26
+ begin
27
+ model1.save!
28
+ model2.save!
29
+ ARModels::Post.all
30
+ end
31
+ end
15
32
 
16
- def self.all
17
- @all ||=
18
- begin
19
- model1.save!
20
- model2.save!
21
- ARModels::Post.all
22
- end
33
+ def self.reset_all
34
+ ARModels::Post.delete_all
35
+ @all = nil
36
+ end
37
+
38
+ def self.collection_per
39
+ 2
40
+ end
41
+
42
+ def self.collection
43
+ @collection ||=
44
+ begin
45
+ Kaminari.paginate_array(
46
+ [
47
+ Profile.new(id: 1, name: 'Name 1', description: 'Description 1', comments: 'Comments 1'),
48
+ Profile.new(id: 2, name: 'Name 2', description: 'Description 2', comments: 'Comments 2'),
49
+ Profile.new(id: 3, name: 'Name 3', description: 'Description 3', comments: 'Comments 3'),
50
+ Profile.new(id: 4, name: 'Name 4', description: 'Description 4', comments: 'Comments 4'),
51
+ Profile.new(id: 5, name: 'Name 5', description: 'Description 5', comments: 'Comments 5')
52
+ ]
53
+ ).page(1).per(collection_per)
54
+ end
55
+ end
23
56
  end
24
- end
25
57
 
26
- class GrapeTest < Grape::API
27
- format :json
28
- include Grape::ActiveModelSerializers
58
+ class GrapeTest < Grape::API
59
+ format :json
60
+ TestHelper.silence_warnings do
61
+ include Grape::ActiveModelSerializers
62
+ end
29
63
 
30
- resources :grape do
31
- get '/render' do
32
- render Models.model1
64
+ def self.resources(*)
65
+ TestHelper.silence_warnings do
66
+ super
67
+ end
33
68
  end
34
69
 
35
- get '/render_with_json_api' do
36
- post = Models.model1
37
- render post, meta: { page: 1, total_pages: 2 }, adapter: :json_api
70
+ resources :grape do
71
+ get '/render' do
72
+ render Models.model1
73
+ end
74
+
75
+ get '/render_with_json_api' do
76
+ post = Models.model1
77
+ render post, meta: { page: 1, total_pages: 2 }, adapter: :json_api
78
+ end
79
+
80
+ get '/render_array_with_json_api' do
81
+ posts = Models.all
82
+ render posts, adapter: :json_api
83
+ end
84
+
85
+ get '/render_collection_with_json_api' do
86
+ posts = Models.collection
87
+ render posts, adapter: :json_api
88
+ end
89
+
90
+ get '/render_with_implicit_formatter' do
91
+ Models.model1
92
+ end
93
+
94
+ get '/render_array_with_implicit_formatter' do
95
+ Models.all
96
+ end
97
+
98
+ get '/render_collection_with_implicit_formatter' do
99
+ Models.collection
100
+ end
38
101
  end
102
+ end
103
+
104
+ def app
105
+ Grape::Middleware::Globals.new(GrapeTest.new)
106
+ end
39
107
 
40
- get '/render_array_with_json_api' do
41
- posts = Models.all
42
- render posts, adapter: :json_api
108
+ extend Minitest::Assertions
109
+ def self.run_one_method(*)
110
+ _, stderr = capture_io do
111
+ super
43
112
  end
113
+ fail Minitest::Assertion, stderr if stderr !~ /grape/
44
114
  end
45
- end
46
115
 
47
- def app
48
- GrapeTest.new
49
- end
116
+ def test_formatter_returns_json
117
+ get '/grape/render'
118
+
119
+ post = Models.model1
120
+ serializable_resource = serializable(post)
50
121
 
51
- def test_formatter_returns_json
52
- get '/grape/render'
122
+ assert last_response.ok?
123
+ assert_equal serializable_resource.to_json, last_response.body
124
+ end
53
125
 
54
- post = Models.model1
55
- serializable_resource = serializable(post)
126
+ def test_render_helper_passes_through_options_correctly
127
+ get '/grape/render_with_json_api'
56
128
 
57
- assert last_response.ok?
58
- assert_equal serializable_resource.to_json, last_response.body
59
- end
129
+ post = Models.model1
130
+ serializable_resource = serializable(post, serializer: ARModels::PostSerializer, adapter: :json_api, meta: { page: 1, total_pages: 2 })
60
131
 
61
- def test_render_helper_passes_through_options_correctly
62
- get '/grape/render_with_json_api'
132
+ assert last_response.ok?
133
+ assert_equal serializable_resource.to_json, last_response.body
134
+ end
63
135
 
64
- post = Models.model1
65
- serializable_resource = serializable(post, serializer: ARModels::PostSerializer, adapter: :json_api, meta: { page: 1, total_pages: 2 })
136
+ def test_formatter_handles_arrays
137
+ get '/grape/render_array_with_json_api'
66
138
 
67
- assert last_response.ok?
68
- assert_equal serializable_resource.to_json, last_response.body
69
- end
139
+ posts = Models.all
140
+ serializable_resource = serializable(posts, adapter: :json_api)
70
141
 
71
- def test_formatter_handles_arrays
72
- get '/grape/render_array_with_json_api'
142
+ assert last_response.ok?
143
+ assert_equal serializable_resource.to_json, last_response.body
144
+ ensure
145
+ Models.reset_all
146
+ end
147
+
148
+ def test_formatter_handles_collections
149
+ get '/grape/render_collection_with_json_api'
150
+ assert last_response.ok?
73
151
 
74
- posts = Models.all
75
- serializable_resource = serializable(posts, adapter: :json_api)
152
+ representation = JSON.parse(last_response.body)
153
+ assert representation.include?('data')
154
+ assert representation['data'].count == Models.collection_per
155
+ assert representation.include?('links')
156
+ assert representation['links'].count > 0
157
+ end
76
158
 
77
- assert last_response.ok?
78
- assert_equal serializable_resource.to_json, last_response.body
79
- ensure
80
- ARModels::Post.delete_all
159
+ def test_implicit_formatter
160
+ post = Models.model1
161
+ serializable_resource = serializable(post, adapter: :json_api)
162
+
163
+ with_adapter :json_api do
164
+ get '/grape/render_with_implicit_formatter'
165
+ end
166
+
167
+ assert last_response.ok?
168
+ assert_equal serializable_resource.to_json, last_response.body
169
+ end
170
+
171
+ def test_implicit_formatter_handles_arrays
172
+ posts = Models.all
173
+ serializable_resource = serializable(posts, adapter: :json_api)
174
+
175
+ with_adapter :json_api do
176
+ get '/grape/render_array_with_implicit_formatter'
177
+ end
178
+
179
+ assert last_response.ok?
180
+ assert_equal serializable_resource.to_json, last_response.body
181
+ ensure
182
+ Models.reset_all
183
+ end
184
+
185
+ def test_implicit_formatter_handles_collections
186
+ with_adapter :json_api do
187
+ get '/grape/render_collection_with_implicit_formatter'
188
+ end
189
+
190
+ representation = JSON.parse(last_response.body)
191
+ assert last_response.ok?
192
+ assert representation.include?('data')
193
+ assert representation['data'].count == Models.collection_per
194
+ assert representation.include?('links')
195
+ assert representation['links'].count > 0
196
+ end
81
197
  end
82
198
  end
data/test/lint_test.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  module ActiveModel
@@ -30,7 +32,7 @@ module ActiveModel
30
32
  def errors
31
33
  end
32
34
 
33
- def self.human_attribute_name(attr, options = {})
35
+ def self.human_attribute_name(_, _ = {})
34
36
  end
35
37
 
36
38
  def self.lookup_ancestors
data/test/logger_test.rb CHANGED
@@ -1,18 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
- class ActiveModelSerializers::LoggerTest < ActiveSupport::TestCase
4
- def test_logger_is_set_to_action_controller_logger_when_initializer_runs
5
- assert_equal $action_controller_logger, ActionController::Base.logger # rubocop:disable Style/GlobalVars
6
- end
5
+ module ActiveModelSerializers
6
+ class LoggerTest < ActiveSupport::TestCase
7
+ def test_logger_is_set_to_action_controller_logger_when_initializer_runs
8
+ assert_equal $action_controller_logger, ActionController::Base.logger # rubocop:disable Style/GlobalVars
9
+ end
7
10
 
8
- def test_logger_can_be_set
9
- original_logger = ActiveModelSerializers.logger
10
- logger = Logger.new(STDOUT)
11
+ def test_logger_can_be_set
12
+ original_logger = ActiveModelSerializers.logger
13
+ logger = Logger.new(STDOUT)
11
14
 
12
- ActiveModelSerializers.logger = logger
15
+ ActiveModelSerializers.logger = logger
13
16
 
14
- assert_equal ActiveModelSerializers.logger, logger
15
- ensure
16
- ActiveModelSerializers.logger = original_logger
17
+ assert_equal ActiveModelSerializers.logger, logger
18
+ ensure
19
+ ActiveModelSerializers.logger = original_logger
20
+ end
17
21
  end
18
22
  end
data/test/poro_test.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class PoroTest < ActiveSupport::TestCase
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  module ActiveModelSerializers
4
6
  class SerializableResourceTest < ActiveSupport::TestCase
5
7
  def setup
6
- @resource = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
8
+ @resource = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
7
9
  @serializer = ProfileSerializer.new(@resource)
8
10
  @adapter = ActiveModelSerializers::Adapter.create(@serializer)
9
11
  @serializable_resource = SerializableResource.new(@resource)
@@ -32,11 +34,11 @@ module ActiveModelSerializers
32
34
  end
33
35
 
34
36
  def test_use_adapter_with_adapter_option
35
- assert SerializableResource.new(@resource, { adapter: 'json' }).use_adapter?
37
+ assert SerializableResource.new(@resource, adapter: 'json').use_adapter?
36
38
  end
37
39
 
38
40
  def test_use_adapter_with_adapter_option_as_false
39
- refute SerializableResource.new(@resource, { adapter: false }).use_adapter?
41
+ refute SerializableResource.new(@resource, adapter: false).use_adapter?
40
42
  end
41
43
 
42
44
  class SerializableResourceErrorsTest < Minitest::Test
@@ -45,15 +47,13 @@ module ActiveModelSerializers
45
47
  resource = ModelWithErrors.new
46
48
  resource.errors.add(:name, 'must be awesome')
47
49
  serializable_resource = ActiveModelSerializers::SerializableResource.new(
48
- resource, {
49
- serializer: ActiveModel::Serializer::ErrorSerializer,
50
- adapter: :json_api
51
- })
52
- expected_response_document =
53
- { :errors =>
54
- [
55
- { :source => { :pointer => '/data/attributes/name' }, :detail => 'must be awesome' }
56
- ]
50
+ resource, serializer: ActiveModel::Serializer::ErrorSerializer,
51
+ adapter: :json_api
52
+ )
53
+ expected_response_document = {
54
+ errors: [
55
+ { source: { pointer: '/data/attributes/name' }, detail: 'must be awesome' }
56
+ ]
57
57
  }
58
58
  assert_equal serializable_resource.as_json(options), expected_response_document
59
59
  end
@@ -65,16 +65,14 @@ module ActiveModelSerializers
65
65
  resource.errors.add(:title, 'must be amazing')
66
66
  resources << ModelWithErrors.new
67
67
  serializable_resource = SerializableResource.new(
68
- resources, {
69
- serializer: ActiveModel::Serializer::ErrorsSerializer,
70
- each_serializer: ActiveModel::Serializer::ErrorSerializer,
71
- adapter: :json_api
72
- })
73
- expected_response_document =
74
- { :errors =>
75
- [
76
- { :source => { :pointer => '/data/attributes/title' }, :detail => 'must be amazing' }
77
- ]
68
+ resources, serializer: ActiveModel::Serializer::ErrorsSerializer,
69
+ each_serializer: ActiveModel::Serializer::ErrorSerializer,
70
+ adapter: :json_api
71
+ )
72
+ expected_response_document = {
73
+ errors: [
74
+ { source: { pointer: '/data/attributes/title' }, detail: 'must be amazing' }
75
+ ]
78
76
  }
79
77
  assert_equal serializable_resource.as_json(options), expected_response_document
80
78
  end
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  module ActiveModel
4
6
  class Serializer
5
7
  class AssociationMacrosTest < ActiveSupport::TestCase
6
- AuthorSummarySerializer = Class.new
8
+ class AuthorSummarySerializer < ActiveModel::Serializer; end
9
+
7
10
  class AssociationsTestSerializer < Serializer
8
11
  belongs_to :author, serializer: AuthorSummarySerializer
9
12
  has_many :comments
@@ -11,7 +14,7 @@ module ActiveModel
11
14
  end
12
15
 
13
16
  def before_setup
14
- @reflections = AssociationsTestSerializer._reflections
17
+ @reflections = AssociationsTestSerializer._reflections.values
15
18
  end
16
19
 
17
20
  def test_has_one_defines_reflection