agi_active_model_serializers 0.10.7

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 (220) hide show
  1. checksums.yaml +7 -0
  2. data/.github/ISSUE_TEMPLATE.md +29 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +15 -0
  4. data/.gitignore +35 -0
  5. data/.rubocop.yml +102 -0
  6. data/.simplecov +110 -0
  7. data/.travis.yml +51 -0
  8. data/CHANGELOG.md +612 -0
  9. data/CODE_OF_CONDUCT.md +74 -0
  10. data/CONTRIBUTING.md +105 -0
  11. data/Gemfile +56 -0
  12. data/MIT-LICENSE +22 -0
  13. data/README.md +307 -0
  14. data/Rakefile +103 -0
  15. data/active_model_serializers.gemspec +63 -0
  16. data/appveyor.yml +24 -0
  17. data/bin/bench +171 -0
  18. data/bin/bench_regression +316 -0
  19. data/bin/serve_benchmark +39 -0
  20. data/docs/README.md +41 -0
  21. data/docs/STYLE.md +58 -0
  22. data/docs/general/adapters.md +247 -0
  23. data/docs/general/caching.md +58 -0
  24. data/docs/general/configuration_options.md +169 -0
  25. data/docs/general/deserialization.md +100 -0
  26. data/docs/general/fields.md +31 -0
  27. data/docs/general/getting_started.md +133 -0
  28. data/docs/general/instrumentation.md +40 -0
  29. data/docs/general/key_transforms.md +40 -0
  30. data/docs/general/logging.md +14 -0
  31. data/docs/general/rendering.md +279 -0
  32. data/docs/general/serializers.md +461 -0
  33. data/docs/how-open-source-maintained.jpg +0 -0
  34. data/docs/howto/add_pagination_links.md +138 -0
  35. data/docs/howto/add_relationship_links.md +137 -0
  36. data/docs/howto/add_root_key.md +55 -0
  37. data/docs/howto/grape_integration.md +42 -0
  38. data/docs/howto/outside_controller_use.md +65 -0
  39. data/docs/howto/passing_arbitrary_options.md +27 -0
  40. data/docs/howto/serialize_poro.md +32 -0
  41. data/docs/howto/test.md +154 -0
  42. data/docs/howto/upgrade_from_0_8_to_0_10.md +265 -0
  43. data/docs/integrations/ember-and-json-api.md +144 -0
  44. data/docs/integrations/grape.md +19 -0
  45. data/docs/jsonapi/errors.md +56 -0
  46. data/docs/jsonapi/schema.md +151 -0
  47. data/docs/jsonapi/schema/schema.json +366 -0
  48. data/docs/rfcs/0000-namespace.md +106 -0
  49. data/docs/rfcs/template.md +15 -0
  50. data/lib/action_controller/serialization.rb +66 -0
  51. data/lib/active_model/serializable_resource.rb +11 -0
  52. data/lib/active_model/serializer.rb +231 -0
  53. data/lib/active_model/serializer/adapter.rb +24 -0
  54. data/lib/active_model/serializer/adapter/attributes.rb +15 -0
  55. data/lib/active_model/serializer/adapter/base.rb +18 -0
  56. data/lib/active_model/serializer/adapter/json.rb +15 -0
  57. data/lib/active_model/serializer/adapter/json_api.rb +15 -0
  58. data/lib/active_model/serializer/adapter/null.rb +15 -0
  59. data/lib/active_model/serializer/array_serializer.rb +12 -0
  60. data/lib/active_model/serializer/association.rb +34 -0
  61. data/lib/active_model/serializer/attribute.rb +25 -0
  62. data/lib/active_model/serializer/belongs_to_reflection.rb +7 -0
  63. data/lib/active_model/serializer/collection_reflection.rb +7 -0
  64. data/lib/active_model/serializer/collection_serializer.rb +87 -0
  65. data/lib/active_model/serializer/concerns/associations.rb +102 -0
  66. data/lib/active_model/serializer/concerns/attributes.rb +82 -0
  67. data/lib/active_model/serializer/concerns/caching.rb +292 -0
  68. data/lib/active_model/serializer/concerns/configuration.rb +59 -0
  69. data/lib/active_model/serializer/concerns/links.rb +35 -0
  70. data/lib/active_model/serializer/concerns/meta.rb +29 -0
  71. data/lib/active_model/serializer/concerns/type.rb +25 -0
  72. data/lib/active_model/serializer/error_serializer.rb +14 -0
  73. data/lib/active_model/serializer/errors_serializer.rb +32 -0
  74. data/lib/active_model/serializer/field.rb +90 -0
  75. data/lib/active_model/serializer/fieldset.rb +31 -0
  76. data/lib/active_model/serializer/has_many_reflection.rb +7 -0
  77. data/lib/active_model/serializer/has_one_reflection.rb +7 -0
  78. data/lib/active_model/serializer/lint.rb +150 -0
  79. data/lib/active_model/serializer/null.rb +17 -0
  80. data/lib/active_model/serializer/reflection.rb +163 -0
  81. data/lib/active_model/serializer/singular_reflection.rb +7 -0
  82. data/lib/active_model/serializer/version.rb +5 -0
  83. data/lib/active_model_serializers.rb +53 -0
  84. data/lib/active_model_serializers/adapter.rb +98 -0
  85. data/lib/active_model_serializers/adapter/attributes.rb +13 -0
  86. data/lib/active_model_serializers/adapter/base.rb +83 -0
  87. data/lib/active_model_serializers/adapter/json.rb +21 -0
  88. data/lib/active_model_serializers/adapter/json_api.rb +517 -0
  89. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +213 -0
  90. data/lib/active_model_serializers/adapter/json_api/error.rb +96 -0
  91. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +49 -0
  92. data/lib/active_model_serializers/adapter/json_api/link.rb +83 -0
  93. data/lib/active_model_serializers/adapter/json_api/meta.rb +37 -0
  94. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +69 -0
  95. data/lib/active_model_serializers/adapter/json_api/relationship.rb +63 -0
  96. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +51 -0
  97. data/lib/active_model_serializers/adapter/null.rb +9 -0
  98. data/lib/active_model_serializers/callbacks.rb +55 -0
  99. data/lib/active_model_serializers/deprecate.rb +54 -0
  100. data/lib/active_model_serializers/deserialization.rb +15 -0
  101. data/lib/active_model_serializers/json_pointer.rb +14 -0
  102. data/lib/active_model_serializers/logging.rb +122 -0
  103. data/lib/active_model_serializers/lookup_chain.rb +80 -0
  104. data/lib/active_model_serializers/model.rb +71 -0
  105. data/lib/active_model_serializers/railtie.rb +48 -0
  106. data/lib/active_model_serializers/register_jsonapi_renderer.rb +78 -0
  107. data/lib/active_model_serializers/serializable_resource.rb +82 -0
  108. data/lib/active_model_serializers/serialization_context.rb +39 -0
  109. data/lib/active_model_serializers/test.rb +7 -0
  110. data/lib/active_model_serializers/test/schema.rb +138 -0
  111. data/lib/active_model_serializers/test/serializer.rb +125 -0
  112. data/lib/generators/rails/USAGE +6 -0
  113. data/lib/generators/rails/resource_override.rb +10 -0
  114. data/lib/generators/rails/serializer_generator.rb +36 -0
  115. data/lib/generators/rails/templates/serializer.rb.erb +15 -0
  116. data/lib/grape/active_model_serializers.rb +16 -0
  117. data/lib/grape/formatters/active_model_serializers.rb +32 -0
  118. data/lib/grape/helpers/active_model_serializers.rb +17 -0
  119. data/test/action_controller/adapter_selector_test.rb +53 -0
  120. data/test/action_controller/explicit_serializer_test.rb +135 -0
  121. data/test/action_controller/json/include_test.rb +246 -0
  122. data/test/action_controller/json_api/deserialization_test.rb +112 -0
  123. data/test/action_controller/json_api/errors_test.rb +40 -0
  124. data/test/action_controller/json_api/fields_test.rb +66 -0
  125. data/test/action_controller/json_api/linked_test.rb +202 -0
  126. data/test/action_controller/json_api/pagination_test.rb +116 -0
  127. data/test/action_controller/json_api/transform_test.rb +189 -0
  128. data/test/action_controller/lookup_proc_test.rb +49 -0
  129. data/test/action_controller/namespace_lookup_test.rb +232 -0
  130. data/test/action_controller/serialization_scope_name_test.rb +229 -0
  131. data/test/action_controller/serialization_test.rb +472 -0
  132. data/test/active_model_serializers/adapter_for_test.rb +208 -0
  133. data/test/active_model_serializers/json_pointer_test.rb +22 -0
  134. data/test/active_model_serializers/logging_test.rb +77 -0
  135. data/test/active_model_serializers/model_test.rb +69 -0
  136. data/test/active_model_serializers/railtie_test_isolated.rb +63 -0
  137. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +161 -0
  138. data/test/active_model_serializers/serialization_context_test_isolated.rb +71 -0
  139. data/test/active_model_serializers/test/schema_test.rb +131 -0
  140. data/test/active_model_serializers/test/serializer_test.rb +62 -0
  141. data/test/active_record_test.rb +9 -0
  142. data/test/adapter/attributes_test.rb +43 -0
  143. data/test/adapter/deprecation_test.rb +100 -0
  144. data/test/adapter/json/belongs_to_test.rb +45 -0
  145. data/test/adapter/json/collection_test.rb +104 -0
  146. data/test/adapter/json/has_many_test.rb +45 -0
  147. data/test/adapter/json/transform_test.rb +93 -0
  148. data/test/adapter/json_api/belongs_to_test.rb +155 -0
  149. data/test/adapter/json_api/collection_test.rb +96 -0
  150. data/test/adapter/json_api/errors_test.rb +76 -0
  151. data/test/adapter/json_api/fields_test.rb +96 -0
  152. data/test/adapter/json_api/has_many_embed_ids_test.rb +43 -0
  153. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +96 -0
  154. data/test/adapter/json_api/has_many_test.rb +165 -0
  155. data/test/adapter/json_api/has_one_test.rb +80 -0
  156. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +168 -0
  157. data/test/adapter/json_api/json_api_test.rb +33 -0
  158. data/test/adapter/json_api/linked_test.rb +413 -0
  159. data/test/adapter/json_api/links_test.rb +95 -0
  160. data/test/adapter/json_api/pagination_links_test.rb +193 -0
  161. data/test/adapter/json_api/parse_test.rb +137 -0
  162. data/test/adapter/json_api/relationship_test.rb +397 -0
  163. data/test/adapter/json_api/resource_identifier_test.rb +110 -0
  164. data/test/adapter/json_api/resource_meta_test.rb +100 -0
  165. data/test/adapter/json_api/toplevel_jsonapi_test.rb +82 -0
  166. data/test/adapter/json_api/transform_test.rb +512 -0
  167. data/test/adapter/json_api/type_test.rb +61 -0
  168. data/test/adapter/json_test.rb +46 -0
  169. data/test/adapter/null_test.rb +22 -0
  170. data/test/adapter/polymorphic_test.rb +171 -0
  171. data/test/adapter_test.rb +67 -0
  172. data/test/array_serializer_test.rb +22 -0
  173. data/test/benchmark/app.rb +65 -0
  174. data/test/benchmark/benchmarking_support.rb +67 -0
  175. data/test/benchmark/bm_active_record.rb +81 -0
  176. data/test/benchmark/bm_adapter.rb +38 -0
  177. data/test/benchmark/bm_caching.rb +119 -0
  178. data/test/benchmark/bm_lookup_chain.rb +83 -0
  179. data/test/benchmark/bm_transform.rb +45 -0
  180. data/test/benchmark/config.ru +3 -0
  181. data/test/benchmark/controllers.rb +83 -0
  182. data/test/benchmark/fixtures.rb +219 -0
  183. data/test/cache_test.rb +595 -0
  184. data/test/collection_serializer_test.rb +123 -0
  185. data/test/fixtures/active_record.rb +113 -0
  186. data/test/fixtures/poro.rb +232 -0
  187. data/test/generators/scaffold_controller_generator_test.rb +24 -0
  188. data/test/generators/serializer_generator_test.rb +74 -0
  189. data/test/grape_test.rb +178 -0
  190. data/test/lint_test.rb +49 -0
  191. data/test/logger_test.rb +20 -0
  192. data/test/poro_test.rb +9 -0
  193. data/test/serializable_resource_test.rb +79 -0
  194. data/test/serializers/association_macros_test.rb +37 -0
  195. data/test/serializers/associations_test.rb +383 -0
  196. data/test/serializers/attribute_test.rb +153 -0
  197. data/test/serializers/attributes_test.rb +52 -0
  198. data/test/serializers/caching_configuration_test_isolated.rb +170 -0
  199. data/test/serializers/configuration_test.rb +32 -0
  200. data/test/serializers/fieldset_test.rb +14 -0
  201. data/test/serializers/meta_test.rb +202 -0
  202. data/test/serializers/options_test.rb +32 -0
  203. data/test/serializers/read_attribute_for_serialization_test.rb +79 -0
  204. data/test/serializers/root_test.rb +21 -0
  205. data/test/serializers/serialization_test.rb +55 -0
  206. data/test/serializers/serializer_for_test.rb +136 -0
  207. data/test/serializers/serializer_for_with_namespace_test.rb +88 -0
  208. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +6 -0
  209. data/test/support/isolated_unit.rb +82 -0
  210. data/test/support/rails5_shims.rb +53 -0
  211. data/test/support/rails_app.rb +36 -0
  212. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +6 -0
  213. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +6 -0
  214. data/test/support/schemas/custom/show.json +7 -0
  215. data/test/support/schemas/hyper_schema.json +93 -0
  216. data/test/support/schemas/render_using_json_api.json +43 -0
  217. data/test/support/schemas/simple_json_pointers.json +10 -0
  218. data/test/support/serialization_testing.rb +71 -0
  219. data/test/test_helper.rb +58 -0
  220. metadata +602 -0
@@ -0,0 +1,61 @@
1
+ require 'test_helper'
2
+
3
+ module ActiveModel
4
+ class Serializer
5
+ module Adapter
6
+ class JsonApi
7
+ class TypeTest < ActiveSupport::TestCase
8
+ class StringTypeSerializer < ActiveModel::Serializer
9
+ attribute :name
10
+ type 'profile'
11
+ end
12
+
13
+ class SymbolTypeSerializer < ActiveModel::Serializer
14
+ attribute :name
15
+ type :profile
16
+ end
17
+
18
+ setup do
19
+ @author = Author.new(id: 1, name: 'Steve K.')
20
+ end
21
+
22
+ def test_config_plural
23
+ with_jsonapi_resource_type :plural do
24
+ assert_type(@author, 'authors')
25
+ end
26
+ end
27
+
28
+ def test_config_singular
29
+ with_jsonapi_resource_type :singular do
30
+ assert_type(@author, 'author')
31
+ end
32
+ end
33
+
34
+ def test_explicit_string_type_value
35
+ assert_type(@author, 'profile', serializer: StringTypeSerializer)
36
+ end
37
+
38
+ def test_explicit_symbol_type_value
39
+ assert_type(@author, 'profile', serializer: SymbolTypeSerializer)
40
+ end
41
+
42
+ private
43
+
44
+ def assert_type(resource, expected_type, opts = {})
45
+ opts = opts.reverse_merge(adapter: :json_api)
46
+ hash = serializable(resource, opts).serializable_hash
47
+ assert_equal(expected_type, hash.fetch(:data).fetch(:type))
48
+ end
49
+
50
+ def with_jsonapi_resource_type(inflection)
51
+ old_inflection = ActiveModelSerializers.config.jsonapi_resource_type
52
+ ActiveModelSerializers.config.jsonapi_resource_type = inflection
53
+ yield
54
+ ensure
55
+ ActiveModelSerializers.config.jsonapi_resource_type = old_inflection
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+
3
+ module ActiveModelSerializers
4
+ module Adapter
5
+ class JsonTest < ActiveSupport::TestCase
6
+ def setup
7
+ ActionController::Base.cache_store.clear
8
+ @author = Author.new(id: 1, name: 'Steve K.')
9
+ @post = Post.new(id: 1, title: 'New Post', body: 'Body')
10
+ @first_comment = Comment.new(id: 1, body: 'ZOMG A COMMENT')
11
+ @second_comment = Comment.new(id: 2, body: 'ZOMG ANOTHER COMMENT')
12
+ @post.comments = [@first_comment, @second_comment]
13
+ @first_comment.post = @post
14
+ @second_comment.post = @post
15
+ @post.author = @author
16
+ @blog = Blog.new(id: 1, name: 'My Blog!!')
17
+ @post.blog = @blog
18
+
19
+ @serializer = PostSerializer.new(@post)
20
+ @adapter = ActiveModelSerializers::Adapter::Json.new(@serializer)
21
+ end
22
+
23
+ def test_has_many
24
+ assert_equal([
25
+ { id: 1, body: 'ZOMG A COMMENT' },
26
+ { id: 2, body: 'ZOMG ANOTHER COMMENT' }
27
+ ], @adapter.serializable_hash[:post][:comments])
28
+ end
29
+
30
+ def test_custom_keys
31
+ serializer = PostWithCustomKeysSerializer.new(@post)
32
+ adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
33
+
34
+ assert_equal({
35
+ id: 1,
36
+ reviews: [
37
+ { id: 1, body: 'ZOMG A COMMENT' },
38
+ { id: 2, body: 'ZOMG ANOTHER COMMENT' }
39
+ ],
40
+ writer: { id: 1, name: 'Steve K.' },
41
+ site: { id: 1, name: 'My Blog!!' }
42
+ }, adapter.serializable_hash[:post])
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ module ActiveModelSerializers
4
+ module Adapter
5
+ class NullTest < ActiveSupport::TestCase
6
+ def setup
7
+ profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
8
+ serializer = ProfileSerializer.new(profile)
9
+
10
+ @adapter = Null.new(serializer)
11
+ end
12
+
13
+ def test_serializable_hash
14
+ assert_equal({}, @adapter.serializable_hash)
15
+ end
16
+
17
+ def test_it_returns_empty_json
18
+ assert_equal('{}', @adapter.to_json)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,171 @@
1
+ require 'test_helper'
2
+
3
+ module ActiveModel
4
+ class Serializer
5
+ module Adapter
6
+ class PolymorphicTest < ActiveSupport::TestCase
7
+ setup do
8
+ @employee = Employee.new(id: 42, name: 'Zoop Zoopler', email: 'zoop@example.com')
9
+ @picture = @employee.pictures.new(id: 1, title: 'headshot-1.jpg')
10
+ @picture.imageable = @employee
11
+ end
12
+
13
+ def serialization(resource, adapter = :attributes)
14
+ serializable(resource, adapter: adapter, serializer: PolymorphicBelongsToSerializer).as_json
15
+ end
16
+
17
+ def tag_serialization(adapter = :attributes)
18
+ tag = PolyTag.new(id: 1, phrase: 'foo')
19
+ tag.object_tags << ObjectTag.new(id: 1, poly_tag_id: 1, taggable: @employee)
20
+ tag.object_tags << ObjectTag.new(id: 5, poly_tag_id: 1, taggable: @picture)
21
+ serializable(tag, adapter: adapter, serializer: PolymorphicTagSerializer, include: '*.*').as_json
22
+ end
23
+
24
+ def test_attributes_serialization
25
+ expected =
26
+ {
27
+ id: 1,
28
+ title: 'headshot-1.jpg',
29
+ imageable: {
30
+ type: 'employee',
31
+ employee: {
32
+ id: 42,
33
+ name: 'Zoop Zoopler'
34
+ }
35
+ }
36
+ }
37
+
38
+ assert_equal(expected, serialization(@picture))
39
+ end
40
+
41
+ def test_attributes_serialization_without_polymorphic_association
42
+ expected =
43
+ {
44
+ id: 2,
45
+ title: 'headshot-2.jpg',
46
+ imageable: nil
47
+ }
48
+
49
+ simple_picture = Picture.new(id: 2, title: 'headshot-2.jpg')
50
+ assert_equal(expected, serialization(simple_picture))
51
+ end
52
+
53
+ def test_attributes_serialization_with_polymorphic_has_many
54
+ expected =
55
+ {
56
+ id: 1,
57
+ phrase: 'foo',
58
+ object_tags: [
59
+ {
60
+ id: 1,
61
+ taggable: {
62
+ type: 'employee',
63
+ employee: {
64
+ id: 42
65
+ }
66
+ }
67
+ },
68
+ {
69
+ id: 5,
70
+ taggable: {
71
+ type: 'picture',
72
+ picture: {
73
+ id: 1
74
+ }
75
+ }
76
+ }
77
+ ]
78
+ }
79
+ assert_equal(expected, tag_serialization)
80
+ end
81
+
82
+ def test_json_serialization
83
+ expected =
84
+ {
85
+ picture: {
86
+ id: 1,
87
+ title: 'headshot-1.jpg',
88
+ imageable: {
89
+ type: 'employee',
90
+ employee: {
91
+ id: 42,
92
+ name: 'Zoop Zoopler'
93
+ }
94
+ }
95
+ }
96
+ }
97
+
98
+ assert_equal(expected, serialization(@picture, :json))
99
+ end
100
+
101
+ def test_json_serialization_without_polymorphic_association
102
+ expected =
103
+ {
104
+ picture: {
105
+ id: 2,
106
+ title: 'headshot-2.jpg',
107
+ imageable: nil
108
+ }
109
+ }
110
+
111
+ simple_picture = Picture.new(id: 2, title: 'headshot-2.jpg')
112
+ assert_equal(expected, serialization(simple_picture, :json))
113
+ end
114
+
115
+ def test_json_serialization_with_polymorphic_has_many
116
+ expected =
117
+ {
118
+ poly_tag: {
119
+ id: 1,
120
+ phrase: 'foo',
121
+ object_tags: [
122
+ {
123
+ id: 1,
124
+ taggable: {
125
+ type: 'employee',
126
+ employee: {
127
+ id: 42
128
+ }
129
+ }
130
+ },
131
+ {
132
+ id: 5,
133
+ taggable: {
134
+ type: 'picture',
135
+ picture: {
136
+ id: 1
137
+ }
138
+ }
139
+ }
140
+ ]
141
+ }
142
+ }
143
+ assert_equal(expected, tag_serialization(:json))
144
+ end
145
+
146
+ def test_json_api_serialization
147
+ expected =
148
+ {
149
+ data: {
150
+ id: '1',
151
+ type: 'pictures',
152
+ attributes: {
153
+ title: 'headshot-1.jpg'
154
+ },
155
+ relationships: {
156
+ imageable: {
157
+ data: {
158
+ id: '42',
159
+ type: 'employees'
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+
166
+ assert_equal(expected, serialization(@picture, :json_api))
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,67 @@
1
+ require 'test_helper'
2
+
3
+ module ActiveModelSerializers
4
+ class AdapterTest < ActiveSupport::TestCase
5
+ def setup
6
+ profile = Profile.new
7
+ @serializer = ProfileSerializer.new(profile)
8
+ @adapter = ActiveModelSerializers::Adapter::Base.new(@serializer)
9
+ end
10
+
11
+ def test_serializable_hash_is_abstract_method
12
+ assert_raises(NotImplementedError) do
13
+ @adapter.serializable_hash(only: [:name])
14
+ end
15
+ end
16
+
17
+ def test_serialization_options_ensures_option_is_a_hash
18
+ adapter = Class.new(ActiveModelSerializers::Adapter::Base) do
19
+ def serializable_hash(options = nil)
20
+ serialization_options(options)
21
+ end
22
+ end.new(@serializer)
23
+ assert_equal({}, adapter.serializable_hash(nil))
24
+ assert_equal({}, adapter.serializable_hash({}))
25
+ ensure
26
+ ActiveModelSerializers::Adapter.adapter_map.delete_if { |k, _| k =~ /class/ }
27
+ end
28
+
29
+ def test_serialization_options_ensures_option_is_one_of_valid_options
30
+ adapter = Class.new(ActiveModelSerializers::Adapter::Base) do
31
+ def serializable_hash(options = nil)
32
+ serialization_options(options)
33
+ end
34
+ end.new(@serializer)
35
+ filtered_options = { now: :see_me, then: :not }
36
+ valid_options = ActiveModel::Serializer::SERIALIZABLE_HASH_VALID_KEYS.each_with_object({}) do |option, result|
37
+ result[option] = option
38
+ end
39
+ assert_equal(valid_options, adapter.serializable_hash(filtered_options.merge(valid_options)))
40
+ ensure
41
+ ActiveModelSerializers::Adapter.adapter_map.delete_if { |k, _| k =~ /class/ }
42
+ end
43
+
44
+ def test_serializer
45
+ assert_equal @serializer, @adapter.serializer
46
+ end
47
+
48
+ def test_create_adapter
49
+ adapter = ActiveModelSerializers::Adapter.create(@serializer)
50
+ assert_equal ActiveModelSerializers::Adapter::Attributes, adapter.class
51
+ end
52
+
53
+ def test_create_adapter_with_override
54
+ adapter = ActiveModelSerializers::Adapter.create(@serializer, adapter: :json_api)
55
+ assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter.class
56
+ end
57
+
58
+ def test_inflected_adapter_class_for_known_adapter
59
+ ActiveSupport::Inflector.inflections(:en) { |inflect| inflect.acronym 'API' }
60
+ klass = ActiveModelSerializers::Adapter.adapter_class(:json_api)
61
+
62
+ ActiveSupport::Inflector.inflections.acronyms.clear
63
+
64
+ assert_equal ActiveModelSerializers::Adapter::JsonApi, klass
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+ require_relative 'collection_serializer_test'
3
+
4
+ module ActiveModel
5
+ class Serializer
6
+ class ArraySerializerTest < CollectionSerializerTest
7
+ extend Minitest::Assertions
8
+ def self.run_one_method(*)
9
+ _, stderr = capture_io do
10
+ super
11
+ end
12
+ if stderr !~ /NOTE: ActiveModel::Serializer::ArraySerializer.new is deprecated/
13
+ fail Minitest::Assertion, stderr
14
+ end
15
+ end
16
+
17
+ def collection_serializer
18
+ ArraySerializer
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,65 @@
1
+ # https://github.com/rails-api/active_model_serializers/pull/872
2
+ # approx ref 792fb8a9053f8db3c562dae4f40907a582dd1720 to test against
3
+ require 'bundler/setup'
4
+
5
+ require 'rails'
6
+ require 'active_model'
7
+ require 'active_support'
8
+ require 'active_support/json'
9
+ require 'action_controller'
10
+ require 'action_controller/test_case'
11
+ require 'action_controller/railtie'
12
+ abort "Rails application already defined: #{Rails.application.class}" if Rails.application
13
+
14
+ class NullLogger < Logger
15
+ def initialize(*_args)
16
+ end
17
+
18
+ def add(*_args, &_block)
19
+ end
20
+ end
21
+ class BenchmarkLogger < ActiveSupport::Logger
22
+ def initialize
23
+ @file = StringIO.new
24
+ super(@file)
25
+ end
26
+
27
+ def messages
28
+ @file.rewind
29
+ @file.read
30
+ end
31
+ end
32
+ # ref: https://gist.github.com/bf4/8744473
33
+ class BenchmarkApp < Rails::Application
34
+ # Set up production configuration
35
+ config.eager_load = true
36
+ config.cache_classes = true
37
+ # CONFIG: CACHE_ON={on,off}
38
+ config.action_controller.perform_caching = ENV['CACHE_ON'] != 'off'
39
+ config.action_controller.cache_store = ActiveSupport::Cache.lookup_store(:memory_store)
40
+
41
+ config.active_support.test_order = :random
42
+ config.secret_token = 'S' * 30
43
+ config.secret_key_base = 'abc123'
44
+ config.consider_all_requests_local = false
45
+
46
+ # otherwise deadlock occurred
47
+ config.middleware.delete 'Rack::Lock'
48
+
49
+ # to disable log files
50
+ config.logger = NullLogger.new
51
+ config.active_support.deprecation = :log
52
+ config.log_level = :info
53
+ end
54
+
55
+ require 'active_model_serializers'
56
+
57
+ # Initialize app before any serializers are defined, for running across revisions.
58
+ # ref: https://github.com/rails-api/active_model_serializers/pull/1478
59
+ Rails.application.initialize!
60
+ # HACK: Serializer::cache depends on the ActionController-dependent configs being set.
61
+ ActiveSupport.on_load(:action_controller) do
62
+ require_relative 'fixtures'
63
+ end
64
+
65
+ require_relative 'controllers'