active_model_serializers 0.10.6 → 0.10.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +28 -31
  3. data/CHANGELOG.md +47 -1
  4. data/Gemfile +20 -4
  5. data/README.md +1 -3
  6. data/active_model_serializers.gemspec +1 -1
  7. data/appveyor.yml +4 -6
  8. data/docs/general/adapters.md +6 -0
  9. data/docs/general/configuration_options.md +16 -0
  10. data/docs/general/rendering.md +1 -1
  11. data/docs/general/serializers.md +4 -1
  12. data/docs/howto/add_root_key.md +7 -0
  13. data/lib/active_model/serializer.rb +2 -1
  14. data/lib/active_model/serializer/collection_serializer.rb +4 -1
  15. data/lib/active_model/serializer/reflection.rb +1 -1
  16. data/lib/active_model/serializer/version.rb +1 -1
  17. data/lib/active_model_serializers.rb +1 -1
  18. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +1 -1
  19. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +40 -21
  20. data/lib/active_model_serializers/adapter/json_api/relationship.rb +16 -4
  21. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +31 -25
  22. data/test/action_controller/json_api/deserialization_test.rb +1 -1
  23. data/test/action_controller/json_api/pagination_test.rb +14 -6
  24. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +32 -2
  25. data/test/adapter/json_api/pagination_links_test.rb +20 -7
  26. data/test/adapter/json_api/parse_test.rb +1 -1
  27. data/test/adapter/json_api/type_test.rb +168 -36
  28. data/test/adapter/polymorphic_test.rb +47 -0
  29. data/test/collection_serializer_test.rb +6 -2
  30. data/test/fixtures/active_record.rb +2 -2
  31. data/test/serializers/associations_test.rb +45 -1
  32. data/test/support/isolated_unit.rb +4 -2
  33. data/test/support/serialization_testing.rb +8 -0
  34. metadata +37 -41
  35. data/test/adapter/json_api/has_many_embed_ids_test.rb +0 -43
  36. data/test/adapter/json_api/resource_identifier_test.rb +0 -110
@@ -1,43 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- class HasManyEmbedIdsTest < ActiveSupport::TestCase
7
- def setup
8
- @author = Author.new(name: 'Steve K.')
9
- @author.bio = nil
10
- @author.roles = nil
11
- @first_post = Post.new(id: 1, title: 'Hello!!', body: 'Hello, world!!')
12
- @second_post = Post.new(id: 2, title: 'New Post', body: 'Body')
13
- @author.posts = [@first_post, @second_post]
14
- @first_post.author = @author
15
- @second_post.author = @author
16
- @first_post.comments = []
17
- @second_post.comments = []
18
- @blog = Blog.new(id: 23, name: 'AMS Blog')
19
- @first_post.blog = @blog
20
- @second_post.blog = nil
21
-
22
- @serializer = AuthorSerializer.new(@author)
23
- @adapter = ActiveModelSerializers::Adapter::JsonApi.new(@serializer)
24
- end
25
-
26
- def test_includes_comment_ids
27
- expected = {
28
- data: [
29
- { type: 'posts', id: '1' },
30
- { type: 'posts', id: '2' }
31
- ]
32
- }
33
-
34
- assert_equal(expected, @adapter.serializable_hash[:data][:relationships][:posts])
35
- end
36
-
37
- def test_no_includes_linked_comments
38
- assert_nil @adapter.serializable_hash[:linked]
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,110 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModelSerializers
4
- module Adapter
5
- class JsonApi
6
- class ResourceIdentifierTest < ActiveSupport::TestCase
7
- class WithDefinedTypeSerializer < ActiveModel::Serializer
8
- type 'with_defined_type'
9
- end
10
-
11
- class WithDefinedIdSerializer < ActiveModel::Serializer
12
- def id
13
- 'special_id'
14
- end
15
- end
16
-
17
- class FragmentedSerializer < ActiveModel::Serializer
18
- cache only: :id
19
-
20
- def id
21
- 'special_id'
22
- end
23
- end
24
-
25
- setup do
26
- @model = Author.new(id: 1, name: 'Steve K.')
27
- ActionController::Base.cache_store.clear
28
- end
29
-
30
- def test_defined_type
31
- test_type(WithDefinedTypeSerializer, 'with-defined-type')
32
- end
33
-
34
- def test_singular_type
35
- test_type_inflection(AuthorSerializer, 'author', :singular)
36
- end
37
-
38
- def test_plural_type
39
- test_type_inflection(AuthorSerializer, 'authors', :plural)
40
- end
41
-
42
- def test_type_with_namespace
43
- Object.const_set(:Admin, Module.new)
44
- model = Class.new(::Model)
45
- Admin.const_set(:PowerUser, model)
46
- serializer = Class.new(ActiveModel::Serializer)
47
- Admin.const_set(:PowerUserSerializer, serializer)
48
- with_namespace_separator '--' do
49
- admin_user = Admin::PowerUser.new
50
- serializer = Admin::PowerUserSerializer.new(admin_user)
51
- expected = {
52
- id: admin_user.id,
53
- type: 'admin--power-users'
54
- }
55
-
56
- identifier = ResourceIdentifier.new(serializer, {})
57
- actual = identifier.as_json
58
- assert_equal(expected, actual)
59
- end
60
- end
61
-
62
- def test_id_defined_on_object
63
- test_id(AuthorSerializer, @model.id.to_s)
64
- end
65
-
66
- def test_id_defined_on_serializer
67
- test_id(WithDefinedIdSerializer, 'special_id')
68
- end
69
-
70
- def test_id_defined_on_fragmented
71
- test_id(FragmentedSerializer, 'special_id')
72
- end
73
-
74
- private
75
-
76
- def test_type_inflection(serializer_class, expected_type, inflection)
77
- original_inflection = ActiveModelSerializers.config.jsonapi_resource_type
78
- ActiveModelSerializers.config.jsonapi_resource_type = inflection
79
- test_type(serializer_class, expected_type)
80
- ensure
81
- ActiveModelSerializers.config.jsonapi_resource_type = original_inflection
82
- end
83
-
84
- def test_type(serializer_class, expected_type)
85
- serializer = serializer_class.new(@model)
86
- resource_identifier = ResourceIdentifier.new(serializer, nil)
87
- expected = {
88
- id: @model.id.to_s,
89
- type: expected_type
90
- }
91
-
92
- assert_equal(expected, resource_identifier.as_json)
93
- end
94
-
95
- def test_id(serializer_class, id)
96
- serializer = serializer_class.new(@model)
97
- resource_identifier = ResourceIdentifier.new(serializer, nil)
98
- inflection = ActiveModelSerializers.config.jsonapi_resource_type
99
- type = @model.class.model_name.send(inflection)
100
- expected = {
101
- id: id,
102
- type: type
103
- }
104
-
105
- assert_equal(expected, resource_identifier.as_json)
106
- end
107
- end
108
- end
109
- end
110
- end