active_model_serializers 0.10.0 → 0.10.2

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 (109) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -4
  3. data/.travis.yml +1 -0
  4. data/CHANGELOG.md +39 -2
  5. data/Gemfile +1 -1
  6. data/README.md +21 -24
  7. data/Rakefile +3 -3
  8. data/active_model_serializers.gemspec +19 -23
  9. data/docs/general/adapters.md +4 -2
  10. data/docs/general/configuration_options.md +6 -1
  11. data/docs/general/deserialization.md +1 -1
  12. data/docs/general/fields.md +31 -0
  13. data/docs/general/rendering.md +7 -2
  14. data/docs/general/serializers.md +62 -3
  15. data/docs/howto/add_pagination_links.md +2 -3
  16. data/docs/integrations/ember-and-json-api.md +25 -10
  17. data/docs/jsonapi/schema.md +1 -1
  18. data/lib/action_controller/serialization.rb +4 -3
  19. data/lib/active_model/serializer/adapter/base.rb +2 -0
  20. data/lib/active_model/serializer/array_serializer.rb +8 -5
  21. data/lib/active_model/serializer/associations.rb +6 -7
  22. data/lib/active_model/serializer/belongs_to_reflection.rb +0 -3
  23. data/lib/active_model/serializer/caching.rb +67 -112
  24. data/lib/active_model/serializer/collection_serializer.rb +30 -10
  25. data/lib/active_model/serializer/configuration.rb +1 -0
  26. data/lib/active_model/serializer/error_serializer.rb +11 -7
  27. data/lib/active_model/serializer/errors_serializer.rb +25 -20
  28. data/lib/active_model/serializer/has_many_reflection.rb +0 -3
  29. data/lib/active_model/serializer/has_one_reflection.rb +0 -3
  30. data/lib/active_model/serializer/lint.rb +134 -130
  31. data/lib/active_model/serializer/reflection.rb +3 -3
  32. data/lib/active_model/serializer/version.rb +1 -1
  33. data/lib/active_model/serializer.rb +57 -15
  34. data/lib/active_model_serializers/adapter/attributes.rb +2 -67
  35. data/lib/active_model_serializers/adapter/base.rb +38 -38
  36. data/lib/active_model_serializers/adapter/json_api/link.rb +1 -1
  37. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +8 -1
  38. data/lib/active_model_serializers/adapter/json_api.rb +36 -28
  39. data/lib/active_model_serializers/adapter.rb +6 -0
  40. data/lib/active_model_serializers/deprecate.rb +1 -2
  41. data/lib/active_model_serializers/deserialization.rb +2 -0
  42. data/lib/active_model_serializers/model.rb +3 -1
  43. data/lib/active_model_serializers/railtie.rb +3 -1
  44. data/lib/active_model_serializers/register_jsonapi_renderer.rb +44 -31
  45. data/lib/active_model_serializers/serialization_context.rb +10 -3
  46. data/lib/active_model_serializers.rb +6 -0
  47. data/lib/generators/rails/serializer_generator.rb +3 -3
  48. data/lib/grape/active_model_serializers.rb +7 -5
  49. data/lib/grape/formatters/active_model_serializers.rb +19 -2
  50. data/lib/grape/helpers/active_model_serializers.rb +1 -0
  51. data/test/action_controller/adapter_selector_test.rb +4 -4
  52. data/test/action_controller/explicit_serializer_test.rb +5 -4
  53. data/test/action_controller/json/include_test.rb +106 -27
  54. data/test/action_controller/json_api/errors_test.rb +6 -7
  55. data/test/action_controller/json_api/linked_test.rb +29 -24
  56. data/test/action_controller/json_api/pagination_test.rb +19 -19
  57. data/test/action_controller/serialization_test.rb +10 -7
  58. data/test/active_model_serializers/json_pointer_test.rb +15 -13
  59. data/test/active_model_serializers/key_transform_test.rb +254 -252
  60. data/test/active_model_serializers/model_test.rb +6 -4
  61. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +143 -0
  62. data/test/active_model_serializers/serialization_context_test_isolated.rb +23 -10
  63. data/test/adapter/json/collection_test.rb +14 -0
  64. data/test/adapter/json/transform_test.rb +14 -14
  65. data/test/adapter/json_api/collection_test.rb +4 -3
  66. data/test/adapter/json_api/errors_test.rb +17 -19
  67. data/test/adapter/json_api/has_many_test.rb +18 -18
  68. data/test/adapter/json_api/json_api_test.rb +5 -7
  69. data/test/adapter/json_api/linked_test.rb +9 -6
  70. data/test/adapter/json_api/links_test.rb +3 -1
  71. data/test/adapter/json_api/pagination_links_test.rb +19 -7
  72. data/test/adapter/json_api/relationships_test.rb +9 -4
  73. data/test/adapter/json_api/resource_identifier_test.rb +7 -2
  74. data/test/adapter/json_api/resource_meta_test.rb +3 -3
  75. data/test/adapter/json_api/transform_test.rb +251 -250
  76. data/test/adapter/json_api/type_test.rb +1 -1
  77. data/test/adapter/json_test.rb +8 -7
  78. data/test/adapter/null_test.rb +1 -2
  79. data/test/adapter/polymorphic_test.rb +5 -5
  80. data/test/adapter_test.rb +1 -1
  81. data/test/benchmark/app.rb +1 -1
  82. data/test/benchmark/bm_caching.rb +15 -15
  83. data/test/benchmark/bm_transform.rb +16 -5
  84. data/test/benchmark/controllers.rb +16 -17
  85. data/test/benchmark/fixtures.rb +72 -72
  86. data/test/cache_test.rb +101 -45
  87. data/test/collection_serializer_test.rb +2 -2
  88. data/test/fixtures/poro.rb +8 -7
  89. data/test/grape_test.rb +152 -56
  90. data/test/lint_test.rb +1 -1
  91. data/test/logger_test.rb +13 -11
  92. data/test/serializable_resource_test.rb +18 -22
  93. data/test/serializers/associations_test.rb +10 -10
  94. data/test/serializers/attribute_test.rb +1 -1
  95. data/test/serializers/attributes_test.rb +1 -1
  96. data/test/serializers/fieldset_test.rb +1 -1
  97. data/test/serializers/meta_test.rb +12 -6
  98. data/test/serializers/root_test.rb +1 -1
  99. data/test/serializers/serializer_for_test.rb +3 -1
  100. data/test/support/isolated_unit.rb +5 -2
  101. data/test/support/rails5_shims.rb +8 -2
  102. data/test/support/rails_app.rb +0 -9
  103. data/test/support/serialization_testing.rb +7 -5
  104. metadata +54 -24
  105. data/.rubocop_todo.yml +0 -167
  106. data/lib/active_model/serializer/include_tree.rb +0 -111
  107. data/test/include_tree/from_include_args_test.rb +0 -26
  108. data/test/include_tree/from_string_test.rb +0 -94
  109. data/test/include_tree/include_args_to_hash_test.rb +0 -64
@@ -4,6 +4,10 @@ module ActionController
4
4
  module Serialization
5
5
  class Json
6
6
  class IncludeTest < ActionController::TestCase
7
+ INCLUDE_STRING = 'posts.comments'.freeze
8
+ INCLUDE_HASH = { posts: :comments }.freeze
9
+ DEEP_INCLUDE = 'posts.comments.author'.freeze
10
+
7
11
  class IncludeTestController < ActionController::Base
8
12
  def setup_data
9
13
  ActionController::Base.cache_store.clear
@@ -38,17 +42,28 @@ module ActionController
38
42
 
39
43
  def render_resource_with_include_hash
40
44
  setup_data
41
- render json: @author, include: { posts: :comments }, adapter: :json
45
+ render json: @author, include: INCLUDE_HASH, adapter: :json
42
46
  end
43
47
 
44
48
  def render_resource_with_include_string
45
49
  setup_data
46
- render json: @author, include: 'posts.comments', adapter: :json
50
+ render json: @author, include: INCLUDE_STRING, adapter: :json
47
51
  end
48
52
 
49
53
  def render_resource_with_deep_include
50
54
  setup_data
51
- render json: @author, include: 'posts.comments.author', adapter: :json
55
+ render json: @author, include: DEEP_INCLUDE, adapter: :json
56
+ end
57
+
58
+ def render_without_recursive_relationships
59
+ # testing recursive includes ('**') can't have any cycles in the
60
+ # relationships, or we enter an infinite loop.
61
+ author = Author.new(id: 11, name: 'Jane Doe')
62
+ post = Post.new(id: 12, title: 'Hello World', body: 'My first post')
63
+ comment = Comment.new(id: 13, body: 'Commentary')
64
+ author.posts = [post]
65
+ post.comments = [comment]
66
+ render json: author
52
67
  end
53
68
  end
54
69
 
@@ -77,34 +92,90 @@ module ActionController
77
92
  def test_render_resource_with_include_hash
78
93
  get :render_resource_with_include_hash
79
94
  response = JSON.parse(@response.body)
80
- expected = {
81
- 'author' => {
82
- 'id' => 1,
83
- 'name' => 'Steve K.',
95
+
96
+ assert_equal(expected_include_response, response)
97
+ end
98
+
99
+ def test_render_resource_with_include_string
100
+ get :render_resource_with_include_string
101
+
102
+ response = JSON.parse(@response.body)
103
+
104
+ assert_equal(expected_include_response, response)
105
+ end
106
+
107
+ def test_render_resource_with_deep_include
108
+ get :render_resource_with_deep_include
109
+
110
+ response = JSON.parse(@response.body)
111
+
112
+ assert_equal(expected_deep_include_response, response)
113
+ end
114
+
115
+ def test_render_with_empty_default_includes
116
+ with_default_includes '' do
117
+ get :render_without_include
118
+ response = JSON.parse(@response.body)
119
+ expected = {
120
+ 'author' => {
121
+ 'id' => 1,
122
+ 'name' => 'Steve K.'
123
+ }
124
+ }
125
+ assert_equal(expected, response)
126
+ end
127
+ end
128
+
129
+ def test_render_with_recursive_default_includes
130
+ with_default_includes '**' do
131
+ get :render_without_recursive_relationships
132
+ response = JSON.parse(@response.body)
133
+
134
+ expected = {
135
+ 'id' => 11,
136
+ 'name' => 'Jane Doe',
137
+ 'roles' => nil,
138
+ 'bio' => nil,
84
139
  'posts' => [
85
140
  {
86
- 'id' => 42, 'title' => 'New Post', 'body' => 'Body',
141
+ 'id' => 12,
142
+ 'title' => 'Hello World',
143
+ 'body' => 'My first post',
87
144
  'comments' => [
88
145
  {
89
- 'id' => 1, 'body' => 'ZOMG A COMMENT'
90
- },
91
- {
92
- 'id' => 2, 'body' => 'ZOMG ANOTHER COMMENT'
146
+ 'id' => 13,
147
+ 'body' => 'Commentary',
148
+ 'post' => nil, # not set to avoid infinite recursion
149
+ 'author' => nil, # not set to avoid infinite recursion
93
150
  }
94
- ]
151
+ ],
152
+ 'blog' => {
153
+ 'id' => 999,
154
+ 'name' => 'Custom blog',
155
+ 'writer' => nil,
156
+ 'articles' => nil
157
+ },
158
+ 'author' => nil # not set to avoid infinite recursion
95
159
  }
96
160
  ]
97
161
  }
98
- }
162
+ assert_equal(expected, response)
163
+ end
164
+ end
99
165
 
100
- assert_equal(expected, response)
166
+ def test_render_with_includes_overrides_default_includes
167
+ with_default_includes '' do
168
+ get :render_resource_with_include_hash
169
+ response = JSON.parse(@response.body)
170
+
171
+ assert_equal(expected_include_response, response)
172
+ end
101
173
  end
102
174
 
103
- def test_render_resource_with_include_string
104
- get :render_resource_with_include_string
175
+ private
105
176
 
106
- response = JSON.parse(@response.body)
107
- expected = {
177
+ def expected_include_response
178
+ {
108
179
  'author' => {
109
180
  'id' => 1,
110
181
  'name' => 'Steve K.',
@@ -123,15 +194,10 @@ module ActionController
123
194
  ]
124
195
  }
125
196
  }
126
-
127
- assert_equal(expected, response)
128
197
  end
129
198
 
130
- def test_render_resource_with_deep_include
131
- get :render_resource_with_deep_include
132
-
133
- response = JSON.parse(@response.body)
134
- expected = {
199
+ def expected_deep_include_response
200
+ {
135
201
  'author' => {
136
202
  'id' => 1,
137
203
  'name' => 'Steve K.',
@@ -158,8 +224,21 @@ module ActionController
158
224
  ]
159
225
  }
160
226
  }
227
+ end
161
228
 
162
- assert_equal(expected, response)
229
+ def with_default_includes(include_directive)
230
+ original = ActiveModelSerializers.config.default_includes
231
+ ActiveModelSerializers.config.default_includes = include_directive
232
+ clear_include_directive_cache
233
+ yield
234
+ ensure
235
+ ActiveModelSerializers.config.default_includes = original
236
+ clear_include_directive_cache
237
+ end
238
+
239
+ def clear_include_directive_cache
240
+ ActiveModelSerializers
241
+ .instance_variable_set(:@default_include_directive, nil)
163
242
  end
164
243
  end
165
244
  end
@@ -7,13 +7,12 @@ module ActionController
7
7
  def test_active_model_with_multiple_errors
8
8
  get :render_resource_with_errors
9
9
 
10
- expected_errors_object =
11
- { :errors =>
12
- [
13
- { :source => { :pointer => '/data/attributes/name' }, :detail => 'cannot be nil' },
14
- { :source => { :pointer => '/data/attributes/name' }, :detail => 'must be longer' },
15
- { :source => { :pointer => '/data/attributes/id' }, :detail => 'must be a uuid' }
16
- ]
10
+ expected_errors_object = {
11
+ errors: [
12
+ { source: { pointer: '/data/attributes/name' }, detail: 'cannot be nil' },
13
+ { source: { pointer: '/data/attributes/name' }, detail: 'must be longer' },
14
+ { source: { pointer: '/data/attributes/id' }, detail: 'must be a uuid' }
15
+ ]
17
16
  }.to_json
18
17
  assert_equal json_reponse_body.to_json, expected_errors_object
19
18
  end
@@ -3,9 +3,8 @@ require 'test_helper'
3
3
  module ActionController
4
4
  module Serialization
5
5
  class JsonApi
6
- class LinkedTest < ActionController::TestCase
6
+ class LinkedTest < ActionDispatch::IntegrationTest
7
7
  class LinkedTestController < ActionController::Base
8
- require 'active_model_serializers/register_jsonapi_renderer'
9
8
  def setup_post
10
9
  ActionController::Base.cache_store.clear
11
10
  @role1 = Role.new(id: 1, name: 'admin')
@@ -39,62 +38,68 @@ module ActionController
39
38
 
40
39
  def render_resource_without_include
41
40
  setup_post
42
- render jsonapi: @post
41
+ render json: @post
43
42
  end
44
43
 
45
44
  def render_resource_with_include
46
45
  setup_post
47
- render jsonapi: @post, include: [:author]
46
+ render json: @post, adapter: :json_api, include: [:author]
48
47
  end
49
48
 
50
49
  def render_resource_with_include_of_custom_key_by_original
51
50
  setup_post
52
- render jsonapi: @post, include: [:reviews], serializer: PostWithCustomKeysSerializer
51
+ render json: @post, adapter: :json_api, include: [:reviews], serializer: PostWithCustomKeysSerializer
53
52
  end
54
53
 
55
54
  def render_resource_with_nested_include
56
55
  setup_post
57
- render jsonapi: @post, include: [comments: [:author]]
56
+ render json: @post, adapter: :json_api, include: [comments: [:author]]
58
57
  end
59
58
 
60
59
  def render_resource_with_nested_has_many_include_wildcard
61
60
  setup_post
62
- render jsonapi: @post, include: 'author.*'
61
+ render json: @post, adapter: :json_api, include: 'author.*'
63
62
  end
64
63
 
65
64
  def render_resource_with_missing_nested_has_many_include
66
65
  setup_post
67
66
  @post.author = @author2 # author2 has no roles.
68
- render jsonapi: @post, include: [author: [:roles]]
67
+ render json: @post, adapter: :json_api, include: [author: [:roles]]
69
68
  end
70
69
 
71
70
  def render_collection_with_missing_nested_has_many_include
72
71
  setup_post
73
72
  @post.author = @author2
74
- render jsonapi: [@post, @post2], include: [author: [:roles]]
73
+ render json: [@post, @post2], adapter: :json_api, include: [author: [:roles]]
75
74
  end
76
75
 
77
76
  def render_collection_without_include
78
77
  setup_post
79
- render jsonapi: [@post]
78
+ render json: [@post], adapter: :json_api
80
79
  end
81
80
 
82
81
  def render_collection_with_include
83
82
  setup_post
84
- render jsonapi: [@post], include: 'author, comments'
83
+ render json: [@post], adapter: :json_api, include: 'author, comments'
85
84
  end
86
85
  end
87
86
 
88
- tests LinkedTestController
87
+ setup do
88
+ @routes = Rails.application.routes.draw do
89
+ ActiveSupport::Deprecation.silence do
90
+ match ':action', to: LinkedTestController, via: [:get, :post]
91
+ end
92
+ end
93
+ end
89
94
 
90
95
  def test_render_resource_without_include
91
- get :render_resource_without_include
96
+ get '/render_resource_without_include'
92
97
  response = JSON.parse(@response.body)
93
98
  refute response.key? 'included'
94
99
  end
95
100
 
96
101
  def test_render_resource_with_include
97
- get :render_resource_with_include
102
+ get '/render_resource_with_include'
98
103
  response = JSON.parse(@response.body)
99
104
  assert response.key? 'included'
100
105
  assert_equal 1, response['included'].size
@@ -102,7 +107,7 @@ module ActionController
102
107
  end
103
108
 
104
109
  def test_render_resource_with_nested_has_many_include
105
- get :render_resource_with_nested_has_many_include_wildcard
110
+ get '/render_resource_with_nested_has_many_include_wildcard'
106
111
  response = JSON.parse(@response.body)
107
112
  expected_linked = [
108
113
  {
@@ -144,7 +149,7 @@ module ActionController
144
149
  end
145
150
 
146
151
  def test_render_resource_with_include_of_custom_key_by_original
147
- get :render_resource_with_include_of_custom_key_by_original
152
+ get '/render_resource_with_include_of_custom_key_by_original'
148
153
  response = JSON.parse(@response.body)
149
154
  assert response.key? 'included'
150
155
 
@@ -156,39 +161,39 @@ module ActionController
156
161
  end
157
162
 
158
163
  def test_render_resource_with_nested_include
159
- get :render_resource_with_nested_include
164
+ get '/render_resource_with_nested_include'
160
165
  response = JSON.parse(@response.body)
161
166
  assert response.key? 'included'
162
167
  assert_equal 3, response['included'].size
163
168
  end
164
169
 
165
170
  def test_render_collection_without_include
166
- get :render_collection_without_include
171
+ get '/render_collection_without_include'
167
172
  response = JSON.parse(@response.body)
168
173
  refute response.key? 'included'
169
174
  end
170
175
 
171
176
  def test_render_collection_with_include
172
- get :render_collection_with_include
177
+ get '/render_collection_with_include'
173
178
  response = JSON.parse(@response.body)
174
179
  assert response.key? 'included'
175
180
  end
176
181
 
177
182
  def test_render_resource_with_nested_attributes_even_when_missing_associations
178
- get :render_resource_with_missing_nested_has_many_include
183
+ get '/render_resource_with_missing_nested_has_many_include'
179
184
  response = JSON.parse(@response.body)
180
185
  assert response.key? 'included'
181
- refute has_type?(response['included'], 'roles')
186
+ refute include_type?(response['included'], 'roles')
182
187
  end
183
188
 
184
189
  def test_render_collection_with_missing_nested_has_many_include
185
- get :render_collection_with_missing_nested_has_many_include
190
+ get '/render_collection_with_missing_nested_has_many_include'
186
191
  response = JSON.parse(@response.body)
187
192
  assert response.key? 'included'
188
- assert has_type?(response['included'], 'roles')
193
+ assert include_type?(response['included'], 'roles')
189
194
  end
190
195
 
191
- def has_type?(collection, value)
196
+ def include_type?(collection, value)
192
197
  collection.detect { |i| i['type'] == value }
193
198
  end
194
199
  end
@@ -14,9 +14,9 @@ module ActionController
14
14
  class PaginationTestController < ActionController::Base
15
15
  def setup
16
16
  @array = [
17
- Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' }),
18
- Profile.new({ name: 'Name 2', description: 'Description 2', comments: 'Comments 2' }),
19
- Profile.new({ name: 'Name 3', description: 'Description 3', comments: 'Comments 3' })
17
+ Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1'),
18
+ Profile.new(name: 'Name 2', description: 'Description 2', comments: 'Comments 2'),
19
+ Profile.new(name: 'Name 3', description: 'Description 3', comments: 'Comments 3')
20
20
  ]
21
21
  end
22
22
 
@@ -48,10 +48,10 @@ module ActionController
48
48
 
49
49
  def test_render_pagination_links_with_will_paginate
50
50
  expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
51
- 'first' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
52
- 'prev' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
53
- 'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
54
- 'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1" }
51
+ 'first' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
52
+ 'prev' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
53
+ 'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
54
+ 'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1" }
55
55
 
56
56
  get :render_pagination_using_will_paginate, params: { page: { number: 2, size: 1 } }
57
57
  response = JSON.parse(@response.body)
@@ -60,8 +60,8 @@ module ActionController
60
60
 
61
61
  def test_render_only_last_and_next_pagination_links
62
62
  expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2",
63
- 'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
64
- 'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2" }
63
+ 'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2",
64
+ 'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2" }
65
65
  get :render_pagination_using_will_paginate, params: { page: { number: 1, size: 2 } }
66
66
  response = JSON.parse(@response.body)
67
67
  assert_equal expected_links, response['links']
@@ -69,10 +69,10 @@ module ActionController
69
69
 
70
70
  def test_render_pagination_links_with_kaminari
71
71
  expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1",
72
- 'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
73
- 'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
74
- 'next' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
75
- 'last' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1" }
72
+ 'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
73
+ 'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
74
+ 'next' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
75
+ 'last' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1" }
76
76
  get :render_pagination_using_kaminari, params: { page: { number: 2, size: 1 } }
77
77
  response = JSON.parse(@response.body)
78
78
  assert_equal expected_links, response['links']
@@ -80,8 +80,8 @@ module ActionController
80
80
 
81
81
  def test_render_only_prev_and_first_pagination_links
82
82
  expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1",
83
- 'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
84
- 'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1" }
83
+ 'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1",
84
+ 'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1" }
85
85
  get :render_pagination_using_kaminari, params: { page: { number: 3, size: 1 } }
86
86
  response = JSON.parse(@response.body)
87
87
  assert_equal expected_links, response['links']
@@ -89,8 +89,8 @@ module ActionController
89
89
 
90
90
  def test_render_only_last_and_next_pagination_links_with_additional_params
91
91
  expected_links = { 'self' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=2&teste=additional",
92
- 'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional",
93
- 'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional" }
92
+ 'next' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional",
93
+ 'last' => "#{WILL_PAGINATE_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=2&teste=additional" }
94
94
  get :render_pagination_using_will_paginate, params: { page: { number: 1, size: 2 }, teste: 'additional' }
95
95
  response = JSON.parse(@response.body)
96
96
  assert_equal expected_links, response['links']
@@ -98,8 +98,8 @@ module ActionController
98
98
 
99
99
  def test_render_only_prev_and_first_pagination_links_with_additional_params
100
100
  expected_links = { 'self' => "#{KAMINARI_URI}?page%5Bnumber%5D=3&page%5Bsize%5D=1&teste=additional",
101
- 'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&teste=additional",
102
- 'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1&teste=additional" }
101
+ 'first' => "#{KAMINARI_URI}?page%5Bnumber%5D=1&page%5Bsize%5D=1&teste=additional",
102
+ 'prev' => "#{KAMINARI_URI}?page%5Bnumber%5D=2&page%5Bsize%5D=1&teste=additional" }
103
103
  get :render_pagination_using_kaminari, params: { page: { number: 3, size: 1 }, teste: 'additional' }
104
104
  response = JSON.parse(@response.body)
105
105
  assert_equal expected_links, response['links']
@@ -74,7 +74,7 @@ module ActionController
74
74
  end
75
75
 
76
76
  def update_and_render_object_with_cache_enabled
77
- @post.updated_at = Time.now
77
+ @post.updated_at = Time.zone.now
78
78
 
79
79
  generate_cached_serializer(@post)
80
80
  render json: @post
@@ -163,7 +163,7 @@ module ActionController
163
163
  end
164
164
  expected = {
165
165
  data: {
166
- id: assigns(:profile).id.to_s,
166
+ id: @controller.instance_variable_get(:@profile).id.to_s,
167
167
  type: 'profiles',
168
168
  attributes: {
169
169
  name: 'Name 1',
@@ -246,7 +246,7 @@ module ActionController
246
246
  expected = {
247
247
  data: [
248
248
  {
249
- id: assigns(:profiles).first.id.to_s,
249
+ id: @controller.instance_variable_get(:@profiles).first.id.to_s,
250
250
  type: 'profiles',
251
251
  attributes: {
252
252
  name: 'Name 1',
@@ -269,7 +269,7 @@ module ActionController
269
269
  expected = {
270
270
  data: [
271
271
  {
272
- id: assigns(:profiles).first.id.to_s,
272
+ id: @controller.instance_variable_get(:@profiles).first.id.to_s,
273
273
  type: 'profiles',
274
274
  attributes: {
275
275
  name: 'Name 1',
@@ -294,7 +294,8 @@ module ActionController
294
294
  comments: [
295
295
  {
296
296
  id: 1,
297
- body: 'ZOMG A COMMENT' }
297
+ body: 'ZOMG A COMMENT'
298
+ }
298
299
  ],
299
300
  blog: {
300
301
  id: 999,
@@ -333,7 +334,8 @@ module ActionController
333
334
  comments: [
334
335
  {
335
336
  id: 1,
336
- body: 'ZOMG A COMMENT' }
337
+ body: 'ZOMG A COMMENT'
338
+ }
337
339
  ],
338
340
  blog: {
339
341
  id: 999,
@@ -407,7 +409,8 @@ module ActionController
407
409
  comments: [
408
410
  {
409
411
  id: 1,
410
- body: 'ZOMG A COMMENT' }
412
+ body: 'ZOMG A COMMENT'
413
+ }
411
414
  ],
412
415
  blog: {
413
416
  id: 999,
@@ -1,20 +1,22 @@
1
1
  require 'test_helper'
2
2
 
3
- class ActiveModelSerializers::JsonPointerTest < ActiveSupport::TestCase
4
- def test_attribute_pointer
5
- attribute_name = 'title'
6
- pointer = ActiveModelSerializers::JsonPointer.new(:attribute, attribute_name)
7
- assert_equal '/data/attributes/title', pointer
8
- end
3
+ module ActiveModelSerializers
4
+ class JsonPointerTest < ActiveSupport::TestCase
5
+ def test_attribute_pointer
6
+ attribute_name = 'title'
7
+ pointer = ActiveModelSerializers::JsonPointer.new(:attribute, attribute_name)
8
+ assert_equal '/data/attributes/title', pointer
9
+ end
9
10
 
10
- def test_primary_data_pointer
11
- pointer = ActiveModelSerializers::JsonPointer.new(:primary_data)
12
- assert_equal '/data', pointer
13
- end
11
+ def test_primary_data_pointer
12
+ pointer = ActiveModelSerializers::JsonPointer.new(:primary_data)
13
+ assert_equal '/data', pointer
14
+ end
14
15
 
15
- def test_unkown_data_pointer
16
- assert_raises(TypeError) do
17
- ActiveModelSerializers::JsonPointer.new(:unknown)
16
+ def test_unkown_data_pointer
17
+ assert_raises(TypeError) do
18
+ ActiveModelSerializers::JsonPointer.new(:unknown)
19
+ end
18
20
  end
19
21
  end
20
22
  end