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,110 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class CollectionSerializerTest < ActiveSupport::TestCase
6
- MessagesSerializer = Class.new(ActiveModel::Serializer) do
7
- type 'messages'
8
- end
9
-
10
- def setup
11
- @comment = Comment.new
12
- @post = Post.new
13
- @resource = build_named_collection @comment, @post
14
- @serializer = collection_serializer.new(@resource, { some: :options })
15
- end
16
-
17
- def collection_serializer
18
- CollectionSerializer
19
- end
20
-
21
- def build_named_collection(*resource)
22
- resource.define_singleton_method(:name) { 'MeResource' }
23
- resource
24
- end
25
-
26
- def test_has_object_reader_serializer_interface
27
- assert_equal @serializer.object, @resource
28
- end
29
-
30
- def test_respond_to_each
31
- assert_respond_to @serializer, :each
32
- end
33
-
34
- def test_each_object_should_be_serialized_with_appropriate_serializer
35
- serializers = @serializer.to_a
36
-
37
- assert_kind_of CommentSerializer, serializers.first
38
- assert_kind_of Comment, serializers.first.object
39
-
40
- assert_kind_of PostSerializer, serializers.last
41
- assert_kind_of Post, serializers.last.object
42
-
43
- assert_equal :options, serializers.last.custom_options[:some]
44
- end
45
-
46
- def test_serializer_option_not_passed_to_each_serializer
47
- serializers = collection_serializer.new([@post], { serializer: PostSerializer }).to_a
48
-
49
- refute serializers.first.custom_options.key?(:serializer)
50
- end
51
-
52
- def test_root_default
53
- @serializer = collection_serializer.new([@comment, @post])
54
- assert_nil @serializer.root
55
- end
56
-
57
- def test_root
58
- expected = 'custom_root'
59
- @serializer = collection_serializer.new([@comment, @post], root: expected)
60
- assert_equal expected, @serializer.root
61
- end
62
-
63
- def test_root_with_no_serializers
64
- expected = 'custom_root'
65
- @serializer = collection_serializer.new([], root: expected)
66
- assert_equal expected, @serializer.root
67
- end
68
-
69
- def test_json_key_with_resource_with_serializer
70
- singular_key = @serializer.send(:serializers).first.json_key
71
- assert_equal singular_key.pluralize, @serializer.json_key
72
- end
73
-
74
- def test_json_key_with_resource_with_name_and_no_serializers
75
- serializer = collection_serializer.new(build_named_collection)
76
- assert_equal 'me_resources', serializer.json_key
77
- end
78
-
79
- def test_json_key_with_resource_with_nil_name_and_no_serializers
80
- resource = []
81
- resource.define_singleton_method(:name) { nil }
82
- serializer = collection_serializer.new(resource)
83
- assert_nil serializer.json_key
84
- end
85
-
86
- def test_json_key_with_resource_without_name_and_no_serializers
87
- serializer = collection_serializer.new([])
88
- assert_nil serializer.json_key
89
- end
90
-
91
- def test_json_key_with_empty_resources_with_serializer
92
- resource = []
93
- serializer = collection_serializer.new(resource, serializer: MessagesSerializer)
94
- assert_equal 'messages', serializer.json_key
95
- end
96
-
97
- def test_json_key_with_root
98
- expected = 'custom_root'
99
- serializer = collection_serializer.new(@resource, root: expected)
100
- assert_equal expected, serializer.json_key
101
- end
102
-
103
- def test_json_key_with_root_and_no_serializers
104
- expected = 'custom_root'
105
- serializer = collection_serializer.new(build_named_collection, root: expected)
106
- assert_equal expected, serializer.json_key
107
- end
108
- end
109
- end
110
- end
@@ -1,78 +0,0 @@
1
- require 'active_record'
2
-
3
- ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
4
- ActiveRecord::Schema.define do
5
- self.verbose = false
6
- create_table :posts, force: true do |t|
7
- t.string :title
8
- t.text :body
9
- t.references :author
10
- t.timestamps null: false
11
- end
12
- create_table :authors, force: true do |t|
13
- t.string :name
14
- t.timestamps null: false
15
- end
16
- create_table :comments, force: true do |t|
17
- t.text :contents
18
- t.references :author
19
- t.references :post
20
- t.timestamp null: false
21
- end
22
- create_table :employees, force: true do |t|
23
- t.string :name
24
- t.string :email
25
- t.timestamp null: false
26
- end
27
- create_table :object_tags, force: true do |t|
28
- t.string :poly_tag_id
29
- t.string :taggable_type
30
- t.string :taggable_id
31
- t.timestamp null: false
32
- end
33
- create_table :poly_tags, force: true do |t|
34
- t.string :phrase
35
- t.timestamp null: false
36
- end
37
- create_table :pictures, force: true do |t|
38
- t.string :title
39
- t.string :imageable_type
40
- t.string :imageable_id
41
- t.timestamp null: false
42
- end
43
- end
44
-
45
- module ARModels
46
- class Post < ActiveRecord::Base
47
- has_many :comments
48
- belongs_to :author
49
- end
50
-
51
- class Comment < ActiveRecord::Base
52
- belongs_to :post
53
- belongs_to :author
54
- end
55
-
56
- class Author < ActiveRecord::Base
57
- has_many :posts
58
- end
59
-
60
- class PostSerializer < ActiveModel::Serializer
61
- attributes :id, :title, :body
62
-
63
- has_many :comments
64
- belongs_to :author
65
- end
66
-
67
- class CommentSerializer < ActiveModel::Serializer
68
- attributes :id, :contents
69
-
70
- belongs_to :author
71
- end
72
-
73
- class AuthorSerializer < ActiveModel::Serializer
74
- attributes :id, :name
75
-
76
- has_many :posts
77
- end
78
- end
@@ -1,282 +0,0 @@
1
- verbose = $VERBOSE
2
- $VERBOSE = nil
3
- class Model < ActiveModelSerializers::Model
4
- FILE_DIGEST = Digest::MD5.hexdigest(File.open(__FILE__).read)
5
-
6
- ### Helper methods, not required to be serializable
7
-
8
- # Convenience when not adding @attributes readers and writers
9
- def method_missing(meth, *args)
10
- if meth.to_s =~ /^(.*)=$/
11
- attributes[$1.to_sym] = args[0]
12
- elsif attributes.key?(meth)
13
- attributes[meth]
14
- else
15
- super
16
- end
17
- end
18
-
19
- # required for ActiveModel::AttributeAssignment#_assign_attribute
20
- # in Rails 5
21
- def respond_to_missing?(method_name, _include_private = false)
22
- attributes.key?(method_name.to_s.tr('=', '').to_sym) || super
23
- end
24
- end
25
-
26
- # see
27
- # https://github.com/rails/rails/blob/4-2-stable/activemodel/lib/active_model/errors.rb
28
- # The below allows you to do:
29
- #
30
- # model = ModelWithErrors.new
31
- # model.validate! # => ["cannot be nil"]
32
- # model.errors.full_messages # => ["name cannot be nil"]
33
- class ModelWithErrors < ::ActiveModelSerializers::Model
34
- attr_accessor :name
35
- end
36
-
37
- class Profile < Model
38
- end
39
-
40
- class ProfileSerializer < ActiveModel::Serializer
41
- attributes :name, :description
42
-
43
- # TODO: is this used anywhere?
44
- def arguments_passed_in?
45
- instance_options[:my_options] == :accessible
46
- end
47
- end
48
-
49
- class ProfilePreviewSerializer < ActiveModel::Serializer
50
- attributes :name
51
- end
52
-
53
- Post = Class.new(Model)
54
- Like = Class.new(Model)
55
- Author = Class.new(Model)
56
- Bio = Class.new(Model)
57
- Blog = Class.new(Model)
58
- Role = Class.new(Model)
59
- User = Class.new(Model)
60
- Location = Class.new(Model)
61
- Place = Class.new(Model)
62
- Tag = Class.new(Model)
63
- VirtualValue = Class.new(Model)
64
- Comment = Class.new(Model) do
65
- # Uses a custom non-time-based cache key
66
- def cache_key
67
- "#{self.class.name.downcase}/#{self.id}"
68
- end
69
- end
70
-
71
- class Employee < ActiveRecord::Base
72
- has_many :pictures, as: :imageable
73
- has_many :object_tags, as: :taggable
74
- end
75
-
76
- class ObjectTag < ActiveRecord::Base
77
- belongs_to :poly_tag
78
- belongs_to :taggable, polymorphic: true
79
- end
80
-
81
- class Picture < ActiveRecord::Base
82
- belongs_to :imageable, polymorphic: true
83
- has_many :object_tags, as: :taggable
84
- end
85
-
86
- class PolyTag < ActiveRecord::Base
87
- has_many :object_tags
88
- end
89
-
90
- module Spam; end
91
- Spam::UnrelatedLink = Class.new(Model)
92
-
93
- PostSerializer = Class.new(ActiveModel::Serializer) do
94
- cache key: 'post', expires_in: 0.1, skip_digest: true
95
- attributes :id, :title, :body
96
-
97
- has_many :comments
98
- belongs_to :blog
99
- belongs_to :author
100
-
101
- def blog
102
- Blog.new(id: 999, name: 'Custom blog')
103
- end
104
-
105
- # TODO: is this used anywhere?
106
- def custom_options
107
- instance_options
108
- end
109
- end
110
-
111
- SpammyPostSerializer = Class.new(ActiveModel::Serializer) do
112
- attributes :id
113
- has_many :related
114
- end
115
-
116
- CommentSerializer = Class.new(ActiveModel::Serializer) do
117
- cache expires_in: 1.day, skip_digest: true
118
- attributes :id, :body
119
-
120
- belongs_to :post
121
- belongs_to :author
122
-
123
- def custom_options
124
- instance_options
125
- end
126
- end
127
-
128
- AuthorSerializer = Class.new(ActiveModel::Serializer) do
129
- cache key: 'writer', skip_digest: true
130
- attribute :id
131
- attribute :name
132
-
133
- has_many :posts
134
- has_many :roles
135
- has_one :bio
136
- end
137
-
138
- RoleSerializer = Class.new(ActiveModel::Serializer) do
139
- cache only: [:name], skip_digest: true
140
- attributes :id, :name, :description, :slug
141
-
142
- def slug
143
- "#{object.name}-#{object.id}"
144
- end
145
-
146
- belongs_to :author
147
- end
148
-
149
- LikeSerializer = Class.new(ActiveModel::Serializer) do
150
- attributes :id, :time
151
-
152
- belongs_to :likeable
153
- end
154
-
155
- LocationSerializer = Class.new(ActiveModel::Serializer) do
156
- cache only: [:place], skip_digest: true
157
- attributes :id, :lat, :lng
158
-
159
- belongs_to :place
160
-
161
- def place
162
- 'Nowhere'
163
- end
164
- end
165
-
166
- PlaceSerializer = Class.new(ActiveModel::Serializer) do
167
- attributes :id, :name
168
-
169
- has_many :locations
170
- end
171
-
172
- BioSerializer = Class.new(ActiveModel::Serializer) do
173
- cache except: [:content], skip_digest: true
174
- attributes :id, :content, :rating
175
-
176
- belongs_to :author
177
- end
178
-
179
- BlogSerializer = Class.new(ActiveModel::Serializer) do
180
- cache key: 'blog'
181
- attributes :id, :name
182
-
183
- belongs_to :writer
184
- has_many :articles
185
- end
186
-
187
- PaginatedSerializer = Class.new(ActiveModel::Serializer::CollectionSerializer) do
188
- def json_key
189
- 'paginated'
190
- end
191
- end
192
-
193
- AlternateBlogSerializer = Class.new(ActiveModel::Serializer) do
194
- attribute :id
195
- attribute :name, key: :title
196
- end
197
-
198
- CustomBlogSerializer = Class.new(ActiveModel::Serializer) do
199
- attribute :id
200
- attribute :special_attribute
201
-
202
- has_many :articles
203
- end
204
-
205
- CommentPreviewSerializer = Class.new(ActiveModel::Serializer) do
206
- attributes :id
207
-
208
- belongs_to :post
209
- end
210
-
211
- AuthorPreviewSerializer = Class.new(ActiveModel::Serializer) do
212
- attributes :id
213
-
214
- has_many :posts
215
- end
216
-
217
- PostPreviewSerializer = Class.new(ActiveModel::Serializer) do
218
- attributes :title, :body, :id
219
-
220
- has_many :comments, serializer: CommentPreviewSerializer
221
- belongs_to :author, serializer: AuthorPreviewSerializer
222
- end
223
-
224
- PostWithTagsSerializer = Class.new(ActiveModel::Serializer) do
225
- attributes :id
226
-
227
- has_many :tags
228
- end
229
-
230
- PostWithCustomKeysSerializer = Class.new(ActiveModel::Serializer) do
231
- attributes :id
232
-
233
- has_many :comments, key: :reviews
234
- belongs_to :author, key: :writer
235
- has_one :blog, key: :site
236
- end
237
-
238
- VirtualValueSerializer = Class.new(ActiveModel::Serializer) do
239
- attributes :id
240
-
241
- has_many :reviews, virtual_value: [{ type: 'reviews', id: '1' },
242
- { type: 'reviews', id: '2' }]
243
- has_one :maker, virtual_value: { type: 'makers', id: '1' }
244
-
245
- def reviews
246
- end
247
-
248
- def maker
249
- end
250
- end
251
-
252
- PolymorphicHasManySerializer = Class.new(ActiveModel::Serializer) do
253
- attributes :id, :name
254
- end
255
-
256
- PolymorphicBelongsToSerializer = Class.new(ActiveModel::Serializer) do
257
- attributes :id, :title
258
-
259
- has_one :imageable, serializer: PolymorphicHasManySerializer, polymorphic: true
260
- end
261
-
262
- PolymorphicSimpleSerializer = Class.new(ActiveModel::Serializer) do
263
- attributes :id
264
- end
265
-
266
- PolymorphicObjectTagSerializer = Class.new(ActiveModel::Serializer) do
267
- attributes :id
268
-
269
- has_many :taggable, serializer: PolymorphicSimpleSerializer, polymorphic: true
270
- end
271
-
272
- PolymorphicTagSerializer = Class.new(ActiveModel::Serializer) do
273
- attributes :id, :phrase
274
-
275
- has_many :object_tags, serializer: PolymorphicObjectTagSerializer
276
- end
277
-
278
- Spam::UnrelatedLinkSerializer = Class.new(ActiveModel::Serializer) do
279
- cache only: [:id]
280
- attributes :id
281
- end
282
- $VERBOSE = verbose
@@ -1,24 +0,0 @@
1
- require 'test_helper'
2
- require 'generators/rails/resource_override'
3
-
4
- class ResourceGeneratorTest < Rails::Generators::TestCase
5
- destination File.expand_path('../../../tmp/generators', __FILE__)
6
- setup :prepare_destination, :copy_routes
7
-
8
- tests Rails::Generators::ResourceGenerator
9
- arguments %w(account)
10
-
11
- def test_serializer_file_is_generated
12
- run_generator
13
-
14
- assert_file 'app/serializers/account_serializer.rb', /class AccountSerializer < ActiveModel::Serializer/
15
- end
16
-
17
- private
18
-
19
- def copy_routes
20
- config_dir = File.join(destination_root, 'config')
21
- FileUtils.mkdir_p(config_dir)
22
- File.write(File.join(config_dir, 'routes.rb'), 'Rails.application.routes.draw {}')
23
- end
24
- end
@@ -1,57 +0,0 @@
1
- require 'test_helper'
2
- require 'generators/rails/resource_override'
3
- require 'generators/rails/serializer_generator'
4
-
5
- class SerializerGeneratorTest < Rails::Generators::TestCase
6
- destination File.expand_path('../../../tmp/generators', __FILE__)
7
- setup :prepare_destination
8
-
9
- tests Rails::Generators::SerializerGenerator
10
- arguments %w(account name:string description:text business:references)
11
-
12
- def test_generates_a_serializer
13
- run_generator
14
- assert_file 'app/serializers/account_serializer.rb', /class AccountSerializer < ActiveModel::Serializer/
15
- end
16
-
17
- def test_generates_a_namespaced_serializer
18
- run_generator ['admin/account']
19
- assert_file 'app/serializers/admin/account_serializer.rb', /class Admin::AccountSerializer < ActiveModel::Serializer/
20
- end
21
-
22
- def test_uses_application_serializer_if_one_exists
23
- Object.const_set(:ApplicationSerializer, Class.new)
24
- run_generator
25
- assert_file 'app/serializers/account_serializer.rb', /class AccountSerializer < ApplicationSerializer/
26
- ensure
27
- Object.send :remove_const, :ApplicationSerializer
28
- end
29
-
30
- def test_uses_given_parent
31
- Object.const_set(:ApplicationSerializer, Class.new)
32
- run_generator ['Account', '--parent=MySerializer']
33
- assert_file 'app/serializers/account_serializer.rb', /class AccountSerializer < MySerializer/
34
- ensure
35
- Object.send :remove_const, :ApplicationSerializer
36
- end
37
-
38
- def test_generates_attributes_and_associations
39
- run_generator
40
- assert_file 'app/serializers/account_serializer.rb' do |serializer|
41
- assert_match(/^ attributes :id, :name, :description$/, serializer)
42
- assert_match(/^ has_one :business$/, serializer)
43
- assert_match(/^end\n*\z/, serializer)
44
- end
45
- end
46
-
47
- def test_with_no_attributes_does_not_add_extra_space
48
- run_generator ['account']
49
- assert_file 'app/serializers/account_serializer.rb' do |content|
50
- if RUBY_PLATFORM =~ /mingw/
51
- assert_no_match(/\r\n\r\nend/, content)
52
- else
53
- assert_no_match(/\n\nend/, content)
54
- end
55
- end
56
- end
57
- end
data/test/grape_test.rb DELETED
@@ -1,82 +0,0 @@
1
- require 'test_helper'
2
- require 'grape'
3
- require 'grape/active_model_serializers'
4
-
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
11
-
12
- def self.model2
13
- ARModels::Post.new(id: 2, title: 'Second Dummy Title', body: 'Second Lorem Ipsum')
14
- end
15
-
16
- def self.all
17
- @all ||=
18
- begin
19
- model1.save!
20
- model2.save!
21
- ARModels::Post.all
22
- end
23
- end
24
- end
25
-
26
- class GrapeTest < Grape::API
27
- format :json
28
- include Grape::ActiveModelSerializers
29
-
30
- resources :grape do
31
- get '/render' do
32
- render Models.model1
33
- end
34
-
35
- get '/render_with_json_api' do
36
- post = Models.model1
37
- render post, meta: { page: 1, total_pages: 2 }, adapter: :json_api
38
- end
39
-
40
- get '/render_array_with_json_api' do
41
- posts = Models.all
42
- render posts, adapter: :json_api
43
- end
44
- end
45
- end
46
-
47
- def app
48
- GrapeTest.new
49
- end
50
-
51
- def test_formatter_returns_json
52
- get '/grape/render'
53
-
54
- post = Models.model1
55
- serializable_resource = serializable(post)
56
-
57
- assert last_response.ok?
58
- assert_equal serializable_resource.to_json, last_response.body
59
- end
60
-
61
- def test_render_helper_passes_through_options_correctly
62
- get '/grape/render_with_json_api'
63
-
64
- post = Models.model1
65
- serializable_resource = serializable(post, serializer: ARModels::PostSerializer, adapter: :json_api, meta: { page: 1, total_pages: 2 })
66
-
67
- assert last_response.ok?
68
- assert_equal serializable_resource.to_json, last_response.body
69
- end
70
-
71
- def test_formatter_handles_arrays
72
- get '/grape/render_array_with_json_api'
73
-
74
- posts = Models.all
75
- serializable_resource = serializable(posts, adapter: :json_api)
76
-
77
- assert last_response.ok?
78
- assert_equal serializable_resource.to_json, last_response.body
79
- ensure
80
- ARModels::Post.delete_all
81
- end
82
- end
@@ -1,26 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class IncludeTree
6
- class FromStringTest < ActiveSupport::TestCase
7
- def test_simple_array
8
- input = [:comments, :author]
9
- actual = ActiveModel::Serializer::IncludeTree.from_include_args(input)
10
- assert(actual.key?(:author))
11
- assert(actual.key?(:comments))
12
- end
13
-
14
- def test_nested_array
15
- input = [:comments, posts: [:author, comments: [:author]]]
16
- actual = ActiveModel::Serializer::IncludeTree.from_include_args(input)
17
- assert(actual.key?(:posts))
18
- assert(actual[:posts].key?(:author))
19
- assert(actual[:posts].key?(:comments))
20
- assert(actual[:posts][:comments].key?(:author))
21
- assert(actual.key?(:comments))
22
- end
23
- end
24
- end
25
- end
26
- end